blob: dd188ee866f4f037dc2427e077c79bb7885f05ef (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# adapted from upstream
{
lib,
pkgs,
config,
...
}:
let
cfg = config.services.displayManager.noctalia-greeter;
format = pkgs.formats.toml { };
inherit (lib)
escapeShellArgs
getExe'
maintainers
mkDefault
mkEnableOption
mkIf
mkOption
mkPackageOption
optionalAttrs
;
inherit (lib.types)
listOf
str
;
in
{
options.services.displayManager.noctalia-greeter = {
enable = mkEnableOption "Noctalia Greeter, a minimal login greeter for greetd";
package = mkPackageOption pkgs "noctalia-greeter" { };
extraArgs = mkOption {
description = "Arguments to add to the noctalia-greeter-session invocation.";
type = listOf str;
default = [ ];
};
settings = mkOption {
description = ''
Settings for noctalia-greeter written to greeter.toml.
Note that it also can contain some state, like the most recently used
session, which will be clobbered on every activation and boot. This is
due to an upstream limitation; the state is due to be moved to another
file.
'';
inherit (format) type;
default = { };
example = {
cursor = {
theme = "Adwaita";
size = 24;
};
keyboard = {
layout = "us";
};
};
};
cursorTheme = {
package = mkPackageOption pkgs "cursor theme" {
nullable = true;
default = null;
};
name = mkOption {
type = str;
default = "Adwaita";
description = ''
Name of the cursor theme to use for noctalia-greeter.
'';
};
};
};
config =
let
user = config.services.greetd.settings.default_session.user;
group =
let
g = config.users.users.${user}.group or "";
in
if g != "" then g else "greeter";
in
mkIf cfg.enable {
assertions = [
{
assertion = (config.users.users.${user} or { }) != { };
message = "noctalia-greeter: user ${user} does not exist. Please create it before referencing it.";
}
];
services.displayManager.noctalia-greeter.settings.cursor = mkIf (cfg.cursorTheme.package != null) {
theme = mkDefault cfg.cursorTheme.name;
path = mkDefault "${cfg.cursorTheme.package}/share/icons";
};
environment.systemPackages = [ cfg.package ];
systemd.tmpfiles.settings."10-noctalia-greeter" = {
"/var/lib/noctalia-greeter".d = {
inherit user group;
mode = "0750";
};
}
// optionalAttrs (cfg.settings != { }) {
"/var/lib/noctalia-greeter/greeter.toml"."L+" = {
argument = "${format.generate "greeter.toml" cfg.settings}";
inherit user group;
mode = "0644";
};
};
services.greetd = {
enable = mkDefault true;
settings.default_session.command = mkDefault "${getExe' cfg.package "noctalia-greeter-session"} ${escapeShellArgs cfg.extraArgs}";
};
security.polkit.enable = mkDefault true;
services.accounts-daemon.enable = mkDefault true;
};
meta.maintainers = with maintainers; [
dtomvan
samiser
];
}
|