main
 1{
 2  den.aspects.desktop.env.wm.niri = {
 3    nixos = {
 4      # See https://github.com/NixOS/nixpkgs/blob/bcb52fa87abbc7ec046c4817d85950c35dae92b7/nixos/modules/services/misc/graphical-desktop.nix
 5      services.graphical-desktop.enable = true;
 6
 7      programs.niri = {
 8        enable = true;
 9        useNautilus = true;
10      };
11    };
12
13    homeManager = {
14      lib,
15      config,
16      pkgs,
17      ...
18    }: let
19      cfg = config.programs.niri;
20      format = pkgs.formats.json {};
21    in {
22      options = {
23        programs.niri = {
24          extraConfig = {
25            pre = lib.mkOption {
26              inherit (format) type;
27              default = {
28              };
29              example = lib.literalExpression ''
30                {
31                  xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite;
32                }
33              '';
34              description = ''
35                Extra configurations included in niri's configuration top.
36
37                Check Home Manager's `lib.hm.generators.toKDL` function
38                for more infomations.
39              '';
40            };
41            post = lib.mkOption {
42              inherit (format) type;
43              default = {};
44              example = lib.literalExpression ''
45                {
46                  bind."Mod+Space" = {
47                    _props = {
48                      repeat = false;
49                      hotkey-overlay-title = "Toggle Application Launcher";
50                    };
51                    spawn = ["vicinae" "toggle"];
52                  };
53                }
54              '';
55              description = ''
56                Extra configurations included in niri's configuration bottom.
57
58                Check Home Manager's `lib.hm.generators.toKDL` function
59                for more infomations.
60              '';
61            };
62          };
63        };
64      };
65
66      config = {
67        programs.niri.extraConfig = {
68          pre = {
69            xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite;
70            screenshot-path = "${config.xdg.userDirs.pictures}/Screenshots/Screenshot_%Y-%m-%d_%H-%M-%S.png";
71          };
72        };
73
74        xdg.configFile."niri" = {
75          source = ./config;
76          recursive = true;
77        };
78
79        xdg.configFile."niri/nix/pre.kdl".text = lib.hm.generators.toKDL {} cfg.extraConfig.pre;
80        xdg.configFile."niri/nix/post.kdl".text = lib.hm.generators.toKDL {} cfg.extraConfig.post;
81      };
82    };
83  };
84}