Plugins on nixos do not get built
I have tried both the flake and nixpkgs versions of the plugins, however they do not get built when I rebuild my system. hyprctl plugin list also does not show any plugins loaded. This is my config:
{
inputs,
pkgs,
config,
...
}: {
imports = [
./hyprlock.nix
./hypridle.nix
./colors.nix
];
wayland.windowManager.hyprland = {
enable = true;
# set to the flake package for more up to date software
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
plugins = with pkgs.hyprlandPlugins; [
borders-plus-plus
];
};
# Hyprland packages needed
home.packages = with pkgs; [
waybar
swww
networkmanagerapplet
];
# Without this, home manager can't symlink files to .config (https://github.com/nix-community/home-manager/issues/1807#issuecomment-3131623755)
xdg.configFile = {
"hypr/hyprland.conf".enable = false;
"hypr/hypridle.conf".enable = false;
"hypr/hyprlock.conf".enable = false;
};
# Symlink hyprland config
home.file.".config/hypr" = {
source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/.dotfiles/config/hypr";
recursive = true;
};
}
You seem to be using the flake package for Hyprland, so you should also be using the flake packages for plugins. If they don't build please provide the error.
The hyprland flake also does not work:
{
inputs,
pkgs,
config,
...
}: {
imports = [
./hyprlock.nix
./hypridle.nix
./colors.nix
];
wayland.windowManager.hyprland = {
enable = true;
# set to the flake package for more up to date software
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# For stuff between apps like clipboard access, drag and drop, etc.
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
plugins = [
inputs.hyprland-plugins.packages.${pkgs.system}.borders-plus-plus
];
};
# Hyprland packages needed
home.packages = with pkgs; [
waybar
swww
# Network manager
networkmanagerapplet
];
# Without this, home manager can't symlink files to .config (https://github.com/nix-community/home-manager/issues/1807#issuecomment-3131623755)
xdg.configFile = {
"hypr/hyprland.conf".enable = false;
"hypr/hypridle.conf".enable = false;
"hypr/hyprlock.conf".enable = false;
};
# Symlink hyprland config
home.file.".config/hypr" = {
source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/.dotfiles/config/hypr";
recursive = true;
};
}
This is the build output:
warning: Git tree '/home/dastarruer/.dotfiles' is dirty
building the system configuration...
warning: Git tree '/home/dastarruer/.dotfiles' is dirty
evaluation warning: dastarruer profile: You have enabled hyprland.systemd.enable or listed plugins in hyprland.plugins but do not have any configuration in hyprland.settings or hyprland.extraConfig. This is almost certainly a mistake.
activating the configuration...
setting up /etc...
sops-install-secrets: Imported /etc/ssh/ssh_host_rsa_key as GPG key with fingerprint 15dda8dafd7cdfda0d24117b688edc95ac384716
sops-install-secrets: Imported /etc/ssh/ssh_host_ed25519_key as age key with fingerprint age1ndcy8ln9zthefknnnm0c72hsvjulc2qkzqy2g0yd88uyc0z74sgsj7llvu
reloading user units for dastarruer...
restarting sysinit-reactivation.target
the following new units were started: NetworkManager-dispatcher.service
Done. The new configuration is /nix/store/5bkzi6fwninhna16dmsngm314j4vcpc9-nixos-system-dastarruer-25.11.20250814.fbcf476
Here is my repo: https://github.com/dastarruer/dotfiles/
evaluation warning: dastarruer profile: You have enabled hyprland.systemd.enable or listed plugins in hyprland.plugins but do not have any configuration in hyprland.settings or hyprland.extraConfig. This is almost certainly a mistake.
what this says is that you have your config empty, and from what I see you symlink it separately. How the plugins setting works is that it appends plugins to the main config file (hypr/hyprland.conf). You seem to disable that and symlink your own. What you can do in this case is create a separate file that contains the plugins, autogenerated by HM, and source that in your main config.
You can do that like this:
xdg.configFile."hypr/plugins.conf".text = ''
exec-once = hyprctl plugin load ${inputs.hyprland-plugins.packages.${pkgs.system}.borders-plus-plus}/lib/libborders-plus-plus.so
'';
This is what I have done:
{
inputs,
pkgs,
config,
...
}: {
imports = [
./hyprlock.nix
./hypridle.nix
./colors.nix
];
wayland.windowManager.hyprland = {
enable = true;
# set to the flake package for more up to date software
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# For stuff between apps like clipboard access, drag and drop, etc.
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
plugins = [
inputs.hyprland-plugins.packages.${pkgs.system}.borders-plus-plus
];
};
# Hyprland packages needed
home.packages = with pkgs; [
waybar
swww
# Network manager
networkmanagerapplet
];
# Without this, home manager can't symlink files to .config (https://github.com/nix-community/home-manager/issues/1807#issuecomment-3131623755)
xdg.configFile = {
"hypr/hyprland.conf".enable = false;
"hypr/hypridle.conf".enable = false;
"hypr/hyprlock.conf".enable = false;
};
# The change is here
home.file.".dotfiles/config/hypr/hyprland/load-plugins.conf".text = ''
exec-once = hyprctl plugin load ${inputs.hyprland-plugins.packages.${pkgs.system}.borders-plus-plus}/lib/libborders-plus-plus.so
'';
# Symlink hyprland config
home.file.".config/hypr" = {
source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/.dotfiles/config/hypr";
recursive = true;
};
}
When I run the command generated by home manager:
hyprctl plugin load /nix/store/c82hhsal9b10486ja1jvq2hhzd20rqx0-borders-plus-plus-0.1/lib/libborders-plus-plus.so
Plugin /nix/store/c82hhsal9b10486ja1jvq2hhzd20rqx0-borders-plus-plus-0.1/lib/libborders-plus-plus.so could not be loaded: /nix/store/c82hhsal9b10486ja1jvq2hhzd20rqx0-borders-plus-plus-0.1/lib/libborders-plus-plus.so: undefined symbol: _ZN15CHyprOpenGLImpl12renderBorderERKN9Hyprutils4Math4CBoxERK18CGradientValueDataNS_17SBorderRenderDataE
How's your hyprland-plugins input defined in the flake?
This is my repo: https://github.com/dastarruer/dotfiles This is my flake inputs section:
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
Plugins may need to be updated. @vaxerski is that the case?
Also, you have inputs.nixpkgs.follows = "nixpkgs"; which invalidates our cache. Are you sure you want to use that and build Hyprland yourself?
Ok, so it’s not an issue on my side, good to know.
I don’t know what ‘invalidates our cache’ means, but I assume I should remove that if I want the most up to date version of hyprland, correct?
On Sat, Aug 23, 2025 at 4:33 AM Mihai Fufezan @.***> wrote:
fufexan left a comment (hyprwm/hyprland-plugins#455) https://github.com/hyprwm/hyprland-plugins/issues/455#issuecomment-3216571138
Plugins may need to be updated. @vaxerski https://github.com/vaxerski is that the case?
Also, you have inputs.nixpkgs.follows = "nixpkgs"; which invalidates our cache. Are you sure you want to use that and build Hyprland yourself?
— Reply to this email directly, view it on GitHub https://github.com/hyprwm/hyprland-plugins/issues/455#issuecomment-3216571138, or unsubscribe https://github.com/notifications/unsubscribe-auth/BJONE6MQCWMG3GGJXNWCBRL3PARL7AVCNFSM6AAAAACEGRFRBOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMJWGU3TCMJTHA . You are receiving this because you authored the thread.Message ID: @.***>
You typically want to remove only this line
inputs.nixpkgs.follows = "nixpkgs";
If you dont remove it you are telling nix to build hyprland with YOUR version of nixpkgs (which i personally found unreliable)
If you remove it you fall back to the version the hyprland team uses. This means rhey typically also built it before validating that works and since this is being cached you dont have to buuld hyprland yourself at all since it will reuse the cache online to simply download that build
Long story short: for a happier life you want to remove that line