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}