grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / lib / systemd-types.nix
blob65ddb2458627c8e6a62916797b60a0ac53d34a57
1 { lib, systemdUtils, pkgs }:
3 let
4   inherit (systemdUtils.lib)
5     automountConfig
6     makeUnit
7     mountConfig
8     pathConfig
9     sliceConfig
10     socketConfig
11     stage1ServiceConfig
12     stage2ServiceConfig
13     targetConfig
14     timerConfig
15     unitConfig
16     ;
18   inherit (systemdUtils.unitOptions)
19     concreteUnitOptions
20     stage1AutomountOptions
21     stage1CommonUnitOptions
22     stage1MountOptions
23     stage1PathOptions
24     stage1ServiceOptions
25     stage1SliceOptions
26     stage1SocketOptions
27     stage1TimerOptions
28     stage2AutomountOptions
29     stage2CommonUnitOptions
30     stage2MountOptions
31     stage2PathOptions
32     stage2ServiceOptions
33     stage2SliceOptions
34     stage2SocketOptions
35     stage2TimerOptions
36     ;
38   inherit (lib)
39     mkDefault
40     mkDerivedConfig
41     mkEnableOption
42     mkIf
43     mkOption
44     ;
46   inherit (lib.types)
47     attrsOf
48     coercedTo
49     enum
50     lines
51     listOf
52     nullOr
53     oneOf
54     package
55     path
56     singleLineStr
57     submodule
58     ;
60   initrdStorePathModule = { config, ... }: {
61     options = {
62       enable = (mkEnableOption "copying of this file and symlinking it") // { default = true; };
64       target = mkOption {
65         type = nullOr path;
66         description = ''
67           Path of the symlink.
68         '';
69         default = null;
70       };
72       source = mkOption {
73         type = path;
74         description = "Path of the source file.";
75       };
77       dlopen = {
78         usePriority = mkOption {
79           type = enum [ "required" "recommended" "suggested" ];
80           default = "recommended";
81           description = ''
82             Priority of dlopen ELF notes to include. "required" is
83             minimal, "recommended" includes "required", and
84             "suggested" includes "recommended".
86             See: https://systemd.io/ELF_DLOPEN_METADATA/
87           '';
88         };
90         features = mkOption {
91           type = listOf singleLineStr;
92           default = [ ];
93           description = ''
94             Features to enable via dlopen ELF notes. These will be in
95             addition to anything included via 'usePriority',
96             regardless of their priority.
97           '';
98         };
99       };
100     };
101   };
106   units = attrsOf (submodule ({ name, config, ... }: {
107     options = concreteUnitOptions;
108     config = {
109       name = mkDefault name;
110       unit = mkDefault (makeUnit name config);
111     };
112   }));
114   services = attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
115   initrdServices = attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
117   targets = attrsOf (submodule [ stage2CommonUnitOptions unitConfig targetConfig ]);
118   initrdTargets = attrsOf (submodule [ stage1CommonUnitOptions unitConfig targetConfig ]);
120   sockets = attrsOf (submodule [ stage2SocketOptions unitConfig socketConfig]);
121   initrdSockets = attrsOf (submodule [ stage1SocketOptions unitConfig socketConfig ]);
123   timers = attrsOf (submodule [ stage2TimerOptions unitConfig timerConfig ]);
124   initrdTimers = attrsOf (submodule [ stage1TimerOptions unitConfig timerConfig ]);
126   paths = attrsOf (submodule [ stage2PathOptions unitConfig pathConfig ]);
127   initrdPaths = attrsOf (submodule [ stage1PathOptions unitConfig pathConfig ]);
129   slices = attrsOf (submodule [ stage2SliceOptions unitConfig sliceConfig ]);
130   initrdSlices = attrsOf (submodule [ stage1SliceOptions unitConfig sliceConfig ]);
132   mounts = listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
133   initrdMounts = listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
135   automounts = listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
136   initrdAutomounts = attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
138   initrdStorePath = listOf (coercedTo
139     (oneOf [ singleLineStr package ])
140     (source: { inherit source; })
141     (submodule initrdStorePathModule));
143   initrdContents = attrsOf (submodule ({ config, options, name, ... }: {
144     imports = [ initrdStorePathModule ];
145     options = {
146       text = mkOption {
147         default = null;
148         type = nullOr lines;
149         description = "Text of the file.";
150       };
151     };
153     config = {
154       target = mkDefault name;
155       source = mkIf (config.text != null) (
156         let name' = "initrd-" + baseNameOf name;
157         in mkDerivedConfig options.text (pkgs.writeText name')
158       );
159     };
160   }));