main
 1{lib, ...}: {
 2  flake.modules.nixos.wm-niri = _: {
 3    programs.niri = {
 4      enable = true;
 5      useNautilus = true;
 6    };
 7  };
 8
 9  flake.modules.homeManager.wm-niri = {
10    config,
11    pkgs,
12    ...
13  }: {
14    options = {
15      programs.niri = {
16        extraConfig = lib.mkOption {
17          type = lib.types.lines;
18          description = "Extra configuration for Niri, in KDL format.";
19        };
20        extraKeybinds = lib.mkOption {
21          type = lib.types.lines;
22          description = "Extra keybindings for Niri, in KDL format.";
23        };
24      };
25    };
26    config = {
27      xdg.configFile."niri" = {
28        source = ./config;
29        recursive = true;
30      };
31      xdg.configFile."niri/nix/misc.kdl".text = ''
32        screenshot-path "${config.xdg.userDirs.pictures}/Screenshots/Screenshot_%Y-%m-%d_%H-%M-%S.png";
33        hotkey-overlay {
34          skip-at-startup
35          hide-not-bound
36        }
37        xwayland-satellite { path "${lib.getExe pkgs.xwayland-satellite}"; }
38        prefer-no-csd
39        layout {
40          focus-ring {
41            active-color "#${config.lib.stylix.colors.base0E}"
42          }
43        }
44        window-rule {
45          opacity ${toString config.stylix.opacity.applications}
46        }
47      '';
48      services.xsettingsd = {
49        enable = true;
50      };
51
52      programs.niri.extraConfig = ''
53        binds {
54          ${config.programs.niri.extraKeybinds}
55        }
56      '';
57      xdg.configFile."niri/nix/extra.kdl".text = config.programs.niri.extraConfig;
58    };
59  };
60}