1{ lib
2, pkgs
3, config
4, ...
5}:
6let
7 cfg = config.programs.regreet;
8 settingsFormat = pkgs.formats.toml { };
9in
10{
11 options.programs.regreet = {
12 enable = lib.mkEnableOption null // {
13 description = ''
14 Enable ReGreet, a clean and customizable greeter for greetd.
15
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).
21
22 A minimal configuration that launches ReGreet in {command}`cage` is
23 enabled by this module by default.
24 '';
25 };
26
27 package = lib.mkPackageOption pkgs [ "greetd" "regreet" ] { };
28
29 settings = lib.mkOption {
30 type = lib.types.either lib.types.path 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 };
38
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 };
51
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 };
61 };
62
63 config = lib.mkIf cfg.enable {
64 services.greetd = {
65 enable = lib.mkDefault true;
66 settings.default_session.command = lib.mkDefault "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} ${lib.escapeShellArgs cfg.cageArgs} -- ${lib.getExe cfg.package}";
67 };
68
69 environment.etc = {
70 "greetd/regreet.css" =
71 if lib.isPath cfg.extraCss
72 then {source = cfg.extraCss;}
73 else {text = cfg.extraCss;};
74
75 "greetd/regreet.toml".source =
76 if lib.isPath cfg.settings
77 then cfg.settings
78 else settingsFormat.generate "regreet.toml" cfg.settings;
79 };
80
81 systemd.tmpfiles.settings."10-regreet" = let
82 defaultConfig = {
83 user = "greeter";
84 group = config.users.users.${config.services.greetd.settings.default_session.user}.group;
85 mode = "0755";
86 };
87 in {
88 "/var/log/regreet".d = defaultConfig;
89 "/var/cache/regreet".d = defaultConfig;
90 };
91 };
92}