Help adding plugins for hyprland

I have hyprland enabled following the guide at Hyprland on Home Manager – Hyprland Wiki. When I try to enable plugins, the instruction is:

wayland.windowManager.hyprland.plugins = [
  inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars
  "/absolute/path/to/plugin.so"
];

But I don’t know how to determine the path to the plugin. More worrying, every attempt I have made (also used Hyprland - NixOS Wiki), I get the error attribute 'inputs' missing.

# flake.nix
  outputs = { self, nixpkgs, home-manager, ... } @inputs: 
    homeConfigurations."biscotty" = home-manager.lib.homeManagerConfiguration {
        inherit pkgs;
        modules = [ 
          ./home.nix
        ];
      };
    };

home.nix just imports this:

# hyprland.nix
{ pkgs, lib, config, inputs, ... }:
{

  wayland.windowManager.hyprland = {
    enable = true;

    xwayland.enable = true;
    package = pkgs.hyprland;
    plugins = [
      inputs.hyprland-plugins.packages."${pkgs.system}".hyperbars
    ];

And I get the error error: attribute 'inputs' missing.

Hey there!

(Note: I have never used Hyprland myself, so take the following with a grain of salt. Maybe someone else can confirm this?)

A quick search brought up this list of available plugins that you can use in wayland.windowManager.hyprland.plugins. As I understand it, you can also build and use plugins locally and refer to them with "/absolute/path/to/plugin.so", so it apparently depends on where you choose to store them.

Concerning the attribute 'inputs' missing error: I think you need to pass the named attribute set argument inputs to your home.nix. To do that, modify your flake.nix:

# flake.nix
outputs = { self, nixpkgs, home-manager, ... } @inputs: 
  homeConfigurations."biscotty" = home-manager.lib.homeManagerConfiguration {
    inherit pkgs;
+   extraSpecialArgs = { inherit inputs; };
    modules = [ 
      ./home.nix
    ];
  };
};

Thank you for clearing up a few things.

This clears it up. I was ignoring the second bit anyway without error, but now I know what it’s purpose is.

I had tried specialArgs like in the configuration.nix part but I didn’t realize that the HM ones were extraSpecial ;-). Actually I had tried, but it does not build properly either, failing with this

--   Found xwayland, version 23.2.6
--   Found xcb-util, version 0.4.1
--   Found xcb-render, version 1.16
--   Found xcb-xfixes, version 1.16
--   Found xcb-icccm, version 0.4.2
--   Found xcb-composite, version 1.16
--   Found xcb-res, version 1.16
--   Found xcb-ewmh, version 0.4.2
-- Checking for module 'xcb-errors'
--   Found xcb-errors, version 1.0.1
-- SYSTEMD support is requested (NO_SYSTEMD not defined)...
-- Setting precompiled headers
-- Setting link libraries
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Couldn't load proto
-- Checking for module 'tomlplusplus'
--   Found tomlplusplus, version 3.4.0
-- Configuring incomplete, errors occurred!

And earlier in the same log.

-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/g++
- skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Gathering git info
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
CMake Error at CMakeLists.txt:32 (add_subdirectory):
  The source directory

    /build/source/subprojects/udis86

  does not contain a CMakeLists.txt file.

I’ve posted the full log below, but these seem to be the problematic bits.

I really appreciate your assistance. Thank you.

warning: The interpretation of store paths arguments ending in `.drv` recently changed. If this command is now failing try again with '/nix/store/kb2fmj213vl2vzjhg9ybmcsf3hnryqky-hyprland-0.40.0+date=2024-05-06_a8a04c7.drv^*'
➜  .dotfiles git:(name) ✗ nix log /nix/store/kb2fmj213vl2vzjhg9ybmcsf3hnryqky-hyprland-0.40.0+date=2024-05-06_a8a04c7.drv | cat
warning: The interpretation of store paths arguments ending in `.drv` recently changed. If this command is now failing try again with '/nix/store/kb2fmj213vl2vzjhg9ybmcsf3hnryqky-hyprland-0.40.0+date=2024-05-06_a8a04c7.drv^*'
@nix { "action": "setPhase", "phase": "unpackPhase" }
Running phase: unpackPhase
unpacking source archive /nix/store/bn9c0x8m31lcahyvl12ayj8zzdc815bz-source
source root is source
@nix { "action": "setPhase", "phase": "patchPhase" }
Running phase: patchPhase
@nix { "action": "setPhase", "phase": "updateAutotoolsGnuConfigScriptsPhase" }
Running phase: updateAutotoolsGnuConfigScriptsPhase
@nix { "action": "setPhase", "phase": "configurePhase" }
Running phase: configurePhase
fixing cmake files...
cmake flags: -GNinja -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCMAKE_INSTALL_LOCALEDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/share/locale -DCMAKE_INSTALL_LIBEXECDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/libexec -DCMAKE_INSTALL_LIBDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/lib -DCMAKE_INSTALL_DOCDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/share/doc/Hyprland -DCMAKE_INSTALL_INFODIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/share/info -DCMAKE_INSTALL_MANDIR=/nix/store/h14zffwcfix6iy30jl53wahl6vz8nggd-hyprland-0.40.0+date=2024-05-06_a8a04c7-man/share/man -DCMAKE_INSTALL_OLDINCLUDEDIR=/nix/store/fpvpwffvw65y9dss24dn3jcx9ic5zq18-hyprland-0.40.0+date=2024-05-06_a8a04c7-dev/include -DCMAKE_INSTALL_INCLUDEDIR=/nix/store/fpvpwffvw65y9dss24dn3jcx9ic5zq18-hyprland-0.40.0+date=2024-05-06_a8a04c7-dev/include -DCMAKE_INSTALL_SBINDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/sbin -DCMAKE_INSTALL_BINDIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/bin -DCMAKE_INSTALL_NAME_DIR=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7/lib -DCMAKE_POLICY_DEFAULT_CMP0025=NEW -DCMAKE_OSX_SYSROOT= -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_STRIP=/nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/strip -DCMAKE_RANLIB=/nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/ranlib -DCMAKE_AR=/nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/ar -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX=/nix/store/00g9cg3bccji6kcs5n7ay6lr8mywd6d2-hyprland-0.40.0+date=2024-05-06_a8a04c7 -DNO_XWAYLAND:BOOL=FALSE -DLEGACY_RENDERER:BOOL=FALSE -DNO_SYSTEMD:BOOL=FALSE
-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/k9pxn9rdy5d2081612zx4i177kzzyvkn-gcc-wrapper-13.2.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Gathering git info
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
CMake Error at CMakeLists.txt:32 (add_subdirectory):
  The source directory

    /build/source/subprojects/udis86

  does not contain a CMakeLists.txt file.


-- Setting up wlroots
-- Found PkgConfig: /nix/store/39nq7p6jcm9m3xqqm99skwmgsqw4pbbg-pkg-config-wrapper-0.29.2/bin/pkg-config (found version "0.29.2")
-- Found WaylandScanner at /nix/store/wfh7w6rfcsnscs7w745pllry2n3wjqcl-wayland-1.22.0-bin/bin/wayland-scanner
-- Found wayland-protocols at //nix/store/byysaxsxa8bgqdypczmnxr84yy1ynqjx-wayland-protocols-1.35/share/wayland-protocols
-- Configuring Hyprland in Release with CMake
-- Checking deps...
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found OpenGL: /nix/store/qady90492hsb01i96amgb8z6q24bv9kd-libGL-1.7.0/lib/libOpenGL.so  found components: GLES3
-- Checking for modules 'xkbcommon;uuid;wayland-server;wayland-client;wayland-cursor;wayland-protocols;cairo;pango;pangocairo;pixman-1;libdrm;libinput;hwdata;libseat;libdisplay-info;libliftoff;libudev;gbm;hyprwayland-scanner>=0.3.4;hyprlang>=0.3.2;hyprcursor>=0.1.7'
--   Found xkbcommon, version 1.5.0
--   Found uuid, version 2.39.3
--   Found wayland-server, version 1.22.0
--   Found wayland-client, version 1.22.0
--   Found wayland-cursor, version 1.22.0
--   Found wayland-protocols, version 1.35
--   Found cairo, version 1.18.0
--   Found pango, version 1.51.2
--   Found pangocairo, version 1.51.2
--   Found pixman-1, version 0.43.4
--   Found libdrm, version 2.4.120
--   Found libinput, version 1.25.0
--   Found hwdata, version 0.381
--   Found libseat, version 0.8.0
--   Found libdisplay-info, version 0.1.1
--   Found libliftoff, version 0.4.1
--   Found libudev, version 255
--   Found gbm, version 24.0.5
--   Found hyprwayland-scanner, version 0.3.4
--   Found hyprlang, version 0.5.1
--   Found hyprcursor, version 0.1.7
-- Looking for execinfo.h
-- Looking for execinfo.h - found
-- Configuration supports execinfo
-- Looking for backtrace in execinfo
-- Looking for backtrace in execinfo - not found
-- Looking for sys/timerfd.h
-- Looking for sys/timerfd.h - found
-- Checking for module 'epoll-shim'
--   No package 'epoll-shim' found
-- XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps...
-- Checking for modules 'xcb;xwayland;xcb-util;xcb-render;xcb-xfixes;xcb-icccm;xcb-composite;xcb-res;xcb-ewmh'
--   Found xcb, version 1.16
--   Found xwayland, version 23.2.6
--   Found xcb-util, version 0.4.1
--   Found xcb-render, version 1.16
--   Found xcb-xfixes, version 1.16
--   Found xcb-icccm, version 0.4.2
--   Found xcb-composite, version 1.16
--   Found xcb-res, version 1.16
--   Found xcb-ewmh, version 0.4.2
-- Checking for module 'xcb-errors'
--   Found xcb-errors, version 1.0.1
-- SYSTEMD support is requested (NO_SYSTEMD not defined)...
-- Setting precompiled headers
-- Setting link libraries
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Could not open input file: No such file or directory
Couldn't load proto
-- Checking for module 'tomlplusplus'
--   Found tomlplusplus, version 3.4.0
-- Configuring incomplete, errors occurred!

As I said before, I’m just guessing here, but the Hyprland-Wiki page that you linked in your original post states at the top: “(Required) NixOS Module: enables critical components needed to run Hyprland properly”. And the next wiki page contains instructions on how to enable the module:

# configuration.nix

{pkgs, ...}:
{
  programs.hyprland.enable = true;
}

Perhaps this helps?

I already had that, but thank you.

Just to be clear, hyprland works without the plugins, I just can’t get the plugins installed.

Do you know what proto refers to? I found a lot of references to protobuf but not proto.

I see.

Have you tried adding hyprland-plugins to your inputs?
The line inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars in your config requires a hyprland-plugins entry in your flake’s inputs.

Check the GitHub repo for hyprland-plugins:

To use these plugins, it’s recommended that you are already using the Hyprland flake. First, add this flake to your inputs:

inputs = {
  # ...
  hyprland.url = "github:hyprwm/Hyprland";
  hyprland-plugins = {
    url = "github:hyprwm/hyprland-plugins";
    inputs.hyprland.follows = "hyprland";
  };

  # ...
};

The inputs.hyprland.follows guarantees the plugins will always be built using your locked Hyprland version, thus you will never get version mismatches that lead to errors.

Edit: There also seems to be a typo in your hyprland.nix: apparently it’s hyprbars and not hyperbars.

I had that one as well. Here’s a grep -r hyprland in my dotfiles, so this is all I’ve got:

configuration.nix:  programs.hyprland.enable = true;
inputs.hyprland.packages."${pkgs.system}".hyprland;
configuration.nix:    substituters = ["https://hyprland.cachix.org"];
configuration.nix:    trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="];
home.nix:    ./hyprland.nix
hyprland.nix:  wayland.windowManager.hyprland = {
hyprland.nix:    package = pkgs.hyprland;
hyprland.nix:  home.file."~/.config/hypr/hyprland.conf".text = ''

hyprland.nix also contains

    enable = true;
    xwayland.enable = true;

in the wayland.windowManager.hyprland block.

Then I’m out of ideas, I’m afraid. Sorry. :slightly_frowning_face:

Np. I’ll figure it out and post here when I do. It was nice to get some feedback. :slightly_smiling_face:

1 Like

have you solved it? same problems.

No I haven’t. (I am relieved to hear I’m not alone.)

just submit an issue on hyprland-plugins github. maybe also submit one to NIXOS github?

OK. BTW, I tried also with a different repo, hyprland.url = "github:vaxerski/Hyprland"; which I found in someone else’s flake, and it failed in the same way. Not sure if that is significant since I’m new to this. Is the other url I tried, in theory anyway, a clone of the hyprwm repo, which is the “official” one?