Luke Granger-Brown
57725ef3ec
git-subtree-dir: third_party/nixpkgs git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
161 lines
4.3 KiB
Nix
161 lines
4.3 KiB
Nix
{ 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')
|
|
);
|
|
};
|
|
}));
|
|
}
|