{ config, inputs, lib, pkgs, ... }: let inherit (lib.modules) mkForce mkIf; inherit (lib.options) mkEnableOption; inherit (config.modules.system) isGraphical; cfg = config.modules.desktops.niri; latestNightly = (inputs.rust-overlay.lib.mkRustBin {} pkgs).nightly.latest.default; rustPlatform = pkgs.makeRustPlatform { rustc = latestNightly; cargo = latestNightly; stdenv = pkgs.clangStdenv; }; new-swww = (pkgs.swww.override {inherit rustPlatform;}).overrideAttrs (prev: { src = pkgs.fetchFromGitHub { inherit (prev.src) owner repo; rev = "398a4048e389341dfd55285c53518a8ea3930ec4"; hash = "sha256-ZAC5TbkshztW2IeDorhaxUmVCHf2tJCSGIGHSNl91Ns"; }; doInstallCheck = false; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { inherit (new-swww) src; hash = "sha256-YH2gcy/8EtUmTHzwt38bBOFX3saN1wHIGQ5/eWqvSeM="; }; }); in { options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor"; config = mkIf (cfg.enable || isGraphical) { programs.niri = { enable = true; package = pkgs.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; environment.systemPackages = builtins.attrValues { inherit (pkgs) xwayland-satellite avizo; inherit new-swww; }; xdg.portal = { enable = true; xdgOpenUsePortal = true; extraPortals = [ pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-gnome ]; config = { common.default = ["*"]; hyprland.default = ["gtk"]; }; configPackages = [ pkgs.niri ]; }; }; }