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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
{
lib,
systemdUtils,
pkgs,
}:
let
inherit (systemdUtils.lib)
automountConfig
makeUnit
mountConfig
pathConfig
sliceConfig
socketConfig
stage1ServiceConfig
stage2ServiceConfig
targetConfig
timerConfig
unitConfig
;
inherit (systemdUtils.unitOptions)
concreteUnitOptions
stage1AutomountOptions
stage1CommonUnitOptions
stage1MountOptions
stage1PathOptions
stage1ServiceOptions
stage1SliceOptions
stage1SocketOptions
stage1TimerOptions
stage2AutomountOptions
stage2CommonUnitOptions
stage2MountOptions
stage2PathOptions
stage2ServiceOptions
stage2SliceOptions
stage2SocketOptions
stage2TimerOptions
;
inherit (lib)
mkDefault
mkDerivedConfig
mkEnableOption
mkIf
mkOption
;
inherit (lib.types)
attrsOf
coercedTo
enum
lines
listOf
nullOr
oneOf
package
path
singleLineStr
submodule
;
initrdStorePathModule =
{ config, ... }:
{
options = {
enable = (mkEnableOption "copying of this file and symlinking it") // {
default = true;
};
target = mkOption {
type = nullOr path;
description = ''
Path of the symlink.
'';
default = null;
};
source = mkOption {
type = path;
description = "Path of the source file.";
};
dlopen = {
usePriority = mkOption {
type = enum [
"required"
"recommended"
"suggested"
];
default = "recommended";
description = ''
Priority of dlopen ELF notes to include. "required" is
minimal, "recommended" includes "required", and
"suggested" includes "recommended".
See: <https://systemd.io/ELF_DLOPEN_METADATA/>
'';
};
features = mkOption {
type = listOf singleLineStr;
default = [ ];
description = ''
Features to enable via dlopen ELF notes. These will be in
addition to anything included via 'usePriority',
regardless of their priority.
'';
};
};
};
};
in
{
units = attrsOf (
submodule (
{ name, config, ... }:
{
options = concreteUnitOptions;
config = {
name = mkDefault name;
unit = mkDefault (makeUnit name config);
};
}
)
);
services = attrsOf (submodule [
stage2ServiceOptions
unitConfig
stage2ServiceConfig
]);
initrdServices = attrsOf (submodule [
stage1ServiceOptions
unitConfig
stage1ServiceConfig
]);
targets = attrsOf (submodule [
stage2CommonUnitOptions
unitConfig
targetConfig
]);
initrdTargets = attrsOf (submodule [
stage1CommonUnitOptions
unitConfig
targetConfig
]);
sockets = attrsOf (submodule [
stage2SocketOptions
unitConfig
socketConfig
]);
initrdSockets = attrsOf (submodule [
stage1SocketOptions
unitConfig
socketConfig
]);
timers = attrsOf (submodule [
stage2TimerOptions
unitConfig
timerConfig
]);
initrdTimers = attrsOf (submodule [
stage1TimerOptions
unitConfig
timerConfig
]);
paths = attrsOf (submodule [
stage2PathOptions
unitConfig
pathConfig
]);
initrdPaths = attrsOf (submodule [
stage1PathOptions
unitConfig
pathConfig
]);
slices = attrsOf (submodule [
stage2SliceOptions
unitConfig
sliceConfig
]);
initrdSlices = attrsOf (submodule [
stage1SliceOptions
unitConfig
sliceConfig
]);
mounts = listOf (submodule [
stage2MountOptions
unitConfig
mountConfig
]);
initrdMounts = listOf (submodule [
stage1MountOptions
unitConfig
mountConfig
]);
automounts = listOf (submodule [
stage2AutomountOptions
unitConfig
automountConfig
]);
initrdAutomounts = attrsOf (submodule [
stage1AutomountOptions
unitConfig
automountConfig
]);
initrdStorePath = listOf (
coercedTo (oneOf [
singleLineStr
package
]) (source: { inherit source; }) (submodule initrdStorePathModule)
);
initrdContents = attrsOf (
submodule (
{
config,
options,
name,
...
}:
{
imports = [ initrdStorePathModule ];
options = {
text = mkOption {
default = null;
type = nullOr lines;
description = "Text of the file.";
};
};
config = {
target = mkDefault name;
source = mkIf (config.text != null) (
let
name' = "initrd-" + baseNameOf name;
in
mkDerivedConfig options.text (pkgs.writeText name')
);
};
}
)
);
}
|