hyprland-plugins icon indicating copy to clipboard operation
hyprland-plugins copied to clipboard

Plugins on nixos do not get built

Open dastarruer opened this issue 4 months ago • 9 comments

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;
  };
}

dastarruer avatar Aug 18 '25 23:08 dastarruer

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.

fufexan avatar Aug 19 '25 11:08 fufexan

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/

dastarruer avatar Aug 19 '25 20:08 dastarruer

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
'';

fufexan avatar Aug 20 '25 10:08 fufexan

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

dastarruer avatar Aug 20 '25 20:08 dastarruer

How's your hyprland-plugins input defined in the flake?

fufexan avatar Aug 22 '25 09:08 fufexan

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";
};

dastarruer avatar Aug 23 '25 00:08 dastarruer

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?

fufexan avatar Aug 23 '25 08:08 fufexan

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: @.***>

dastarruer avatar Aug 23 '25 15:08 dastarruer

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

clotodex avatar Aug 23 '25 23:08 clotodex