python312Packages.zodbpickle: switch to pypa builder and enable tests
[NixPkgs.git] / nixos / modules / programs / regreet.nix
blob1f83f610dbf1effa45094e4f6ebdd9e8bb9ff00f
1 { lib
2 , pkgs
3 , config
4 , ...
5 }:
6 let
7   cfg = config.programs.regreet;
8   settingsFormat = pkgs.formats.toml { };
9 in
11   options.programs.regreet = {
12     enable = lib.mkEnableOption null // {
13       description = ''
14         Enable ReGreet, a clean and customizable greeter for greetd.
16         To use ReGreet, {option}`services.greetd` has to be enabled and
17         {option}`services.greetd.settings.default_session` should contain the
18         appropriate configuration to launch
19         {option}`config.programs.regreet.package`. For examples, see the
20         [ReGreet Readme](https://github.com/rharish101/ReGreet#set-as-default-session).
22         A minimal configuration that launches ReGreet in {command}`cage` is
23         enabled by this module by default.
24       '';
25     };
27     package = lib.mkPackageOption pkgs [ "greetd" "regreet" ] { };
29     settings = lib.mkOption {
30       type = settingsFormat.type;
31       default = { };
32       description = ''
33         ReGreet configuration file. Refer
34         <https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml>
35         for options.
36       '';
37     };
39     cageArgs = lib.mkOption {
40       type = lib.types.listOf lib.types.str;
41       default = [ "-s" ];
42       example = lib.literalExpression
43         ''
44           [ "-s" "-m" "last" ]
45         '';
46       description = ''
47         Additional arguments to be passed to
48         [cage](https://github.com/cage-kiosk/cage).
49       '';
50     };
52     extraCss = lib.mkOption {
53       type = lib.types.either lib.types.path lib.types.lines;
54       default = "";
55       description = ''
56         Extra CSS rules to apply on top of the GTK theme. Refer to
57         [GTK CSS Properties](https://docs.gtk.org/gtk4/css-properties.html) for
58         modifiable properties.
59       '';
60     };
62     theme = {
63       package = lib.mkPackageOption pkgs "gnome-themes-extra" { } // {
64         description = ''
65           The package that provides the theme given in the name option.
66         '';
67       };
69       name = lib.mkOption {
70         type = lib.types.str;
71         default = "Adwaita";
72         description = ''
73           Name of the theme to use for regreet.
74         '';
75       };
76     };
78     iconTheme = {
79       package = lib.mkPackageOption pkgs "adwaita-icon-theme" { } // {
80         description = ''
81           The package that provides the icon theme given in the name option.
82         '';
83       };
85       name = lib.mkOption {
86         type = lib.types.str;
87         default = "Adwaita";
88         description = ''
89           Name of the icon theme to use for regreet.
90         '';
91       };
92     };
94     font = {
95       package = lib.mkPackageOption pkgs "cantarell-fonts" { } // {
96         description = ''
97           The package that provides the font given in the name option.
98         '';
99       };
101       name = lib.mkOption {
102         type = lib.types.str;
103         default = "Cantarell";
104         description = ''
105           Name of the font to use for regreet.
106         '';
107       };
109       size = lib.mkOption {
110         type = lib.types.ints.positive;
111         default = 16;
112         description = ''
113           Size of the font to use for regreet.
114         '';
115       };
116     };
118     cursorTheme = {
119       package = lib.mkPackageOption pkgs "adwaita-icon-theme" { } // {
120         description = ''
121           The package that provides the cursor theme given in the name option.
122         '';
123       };
125       name = lib.mkOption {
126         type = lib.types.str;
127         default = "Adwaita";
128         description = ''
129           Name of the cursor theme to use for regreet.
130         '';
131       };
132     };
133   };
135   config = lib.mkIf cfg.enable {
136     environment.systemPackages = [
137       cfg.theme.package
138       cfg.iconTheme.package
139       cfg.cursorTheme.package
140     ];
142     fonts.packages = [ cfg.font.package ];
144     programs.regreet.settings.GTK = {
145       cursor_theme_name = cfg.cursorTheme.name;
146       font_name = "${cfg.font.name} ${toString cfg.font.size}";
147       icon_theme_name = cfg.iconTheme.name;
148       theme_name = cfg.theme.name;
149     };
151     services.greetd = {
152       enable = lib.mkDefault true;
153       settings.default_session.command = lib.mkDefault "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} ${lib.escapeShellArgs cfg.cageArgs} -- ${lib.getExe cfg.package}";
154     };
156     environment.etc = {
157       "greetd/regreet.css" =
158         if lib.isPath cfg.extraCss
159         then {source = cfg.extraCss;}
160         else {text = cfg.extraCss;};
162       "greetd/regreet.toml".source =
163         settingsFormat.generate "regreet.toml" cfg.settings;
164     };
166     systemd.tmpfiles.settings."10-regreet" = let
167       defaultConfig = {
168         user = "greeter";
169         group = config.users.users.${config.services.greetd.settings.default_session.user}.group;
170         mode = "0755";
171       };
172     in {
173       "/var/log/regreet".d = defaultConfig;
174       "/var/cache/regreet".d = defaultConfig;
175     };
176   };