From 5765bbc868e6a50aa481b20f7ddd2cb62c81ff79 Mon Sep 17 00:00:00 2001 From: Bloxx12 Date: Mon, 21 Jul 2025 00:07:28 +0200 Subject: [PATCH] niri: switch to master package, move config file location Signed-off-by: Bloxx12 Change-Id: I6a6a696441d048ff2328d08338293b4a1be005e7 --- modules/wms/niri/niri.mod.nix | 102 ++++++++++++++++++++++++++++------ npins/sources.json | 16 ++++++ 2 files changed, 101 insertions(+), 17 deletions(-) diff --git a/modules/wms/niri/niri.mod.nix b/modules/wms/niri/niri.mod.nix index e9a714c..57e461b 100644 --- a/modules/wms/niri/niri.mod.nix +++ b/modules/wms/niri/niri.mod.nix @@ -2,32 +2,100 @@ config, lib, pkgs, + sources, ... }: let inherit (lib.modules) mkForce mkIf; inherit (lib.options) mkEnableOption; inherit (config.modules.system) isGraphical; + inherit (config.meta.mainUser) username; + cfg = config.modules.desktops.niri; - patched-niri = pkgs.niri.overrideAttrs (prev: { - src = pkgs.fetchFromGitHub { - inherit (prev.src) owner repo; - rev = "37458d94b288945f6cfbd3c5c233f634d59f246c"; - hash = "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg="; + niri = pkgs.callPackage (_: pkgs.rustPlatform.buildRustPackage { + pname = "niri"; + version = "unstable"; + + src = sources.niri; + postPatch = '' + patchShebangs resources/niri-session + substituteInPlace resources/niri.service \ + --replace-fail '/usr/bin' "$out/bin" + ''; + + cargoLock = { + allowBuiltinFetchGit = true; + lockFile = "${sources.niri}/Cargo.lock"; }; - cargoDeps = pkgs.rustPlatform.fetchCargoVendor { - inherit (patched-niri) src; - hash = "sha256-fT0L/OTlQ9BnKHnckKsLi+tN+oevEU+eJWrh1INqQhA="; - }; - patches = [ - (pkgs.fetchpatch { - url = "https://github.com/YaLTeR/niri/commit/ab71a6c553f9c53ea484ec6dedc5dcede708929f.diff"; - hash = "sha256-C3TJIK5/YTAcmdSP6NyOwX+1oA36u6nrMuJuVYIvAHQ="; - }) + + strictDeps = true; + doInstallCheck = false; + + nativeBuildInputs = with pkgs; [ + rustPlatform.bindgenHook + pkg-config + installShellFiles ]; - }); + + buildInputs = with pkgs; [ + cairo + dbus + libGL + libdisplay-info + libinput + seatd + libxkbcommon + libgbm + pango + wayland + dbus + pipewire + # Also includes libudev + systemd + ]; + + buildFeatures = [ + "dbus" + "dinit" + "xdp-gnome-screencast" + "systemd" + ]; + buildNoDefaultFeatures = true; + + postInstall = '' + installShellCompletion --cmd niri \ + --bash <($out/bin/niri completions bash) \ + --fish <($out/bin/niri completions fish) \ + --zsh <($out/bin/niri completions zsh) + + install -Dm644 resources/niri.desktop -t $out/share/wayland-sessions + install -Dm644 resources/niri-portals.conf -t $out/share/xdg-desktop-portal + install -Dm755 resources/niri-session $out/bin/niri-session + install -Dm644 resources/niri{.service,-shutdown.target} -t $out/share/systemd/user + ''; + + env = { + # Force linking with libEGL and libwayland-client + # so they can be discovered by `dlopen()` + RUSTFLAGS = toString ( + map (arg: "-C link-arg=" + arg) [ + "-Wl,--push-state,--no-as-needed" + "-lEGL" + "-lwayland-client" + "-Wl,--pop-state" + ] + ); + }; + + passthru = { + providedSessions = [ "niri" ]; + }; + + meta.mainProgram = "niri"; + + }) { }; in { options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor"; @@ -35,13 +103,13 @@ in config = mkIf (cfg.enable || isGraphical) { programs.niri = { enable = true; - package = patched-niri; + package = niri; }; # The niri module auto enables the gnome keyring, # which is something I direly want to avoid. services.gnome.gnome-keyring.enable = mkForce false; - environment.etc."niri/config.kdl".source = ./config.kdl; + hjem.users.${username}.files.".config/niri/config.kdl".source = ./config.kdl; environment.systemPackages = builtins.attrValues { inherit (pkgs) diff --git a/npins/sources.json b/npins/sources.json index 5a3305a..7e9393a 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -107,6 +107,22 @@ "url": "https://github.com/oxalica/nil/archive/524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f.tar.gz", "hash": "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU=" }, + "niri": { + "type": "GitRelease", + "repository": { + "type": "GitHub", + "owner": "yalter", + "repo": "niri" + }, + "pre_releases": false, + "version_upper_bound": null, + "release_prefix": null, + "submodules": false, + "version": "v25.05.1", + "revision": "61e306c1c6b13ae99bf7f51532a6aa86cd50d690", + "url": "https://api.github.com/repos/yalter/niri/tarball/refs/tags/v25.05.1", + "hash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=" + }, "nixfmt": { "type": "GitRelease", "repository": {