nixos/lib: systemd definition files function

Add a re-usable function that converts an attrset to a directory
containing systemd definition files.

nikstur a662dc8b 906f999a

Changed files
+27 -29
nixos
lib
modules
system
boot
+17
nixos/lib/systemd-lib.nix
···
${attrsToSection def.sliceConfig}
'';
};
+
+
# Create a directory that contains systemd definition files from an attrset
+
# that contains the file names as keys and the content as values. The values
+
# in that attrset are determined by the supplied format.
+
definitions = directoryName: format: definitionAttrs:
+
let
+
listOfDefinitions = lib.mapAttrsToList
+
(name: format.generate "${name}.conf")
+
definitionAttrs;
+
in
+
pkgs.runCommand directoryName { } ''
+
mkdir -p $out
+
${(lib.concatStringsSep "\n"
+
(map (pkg: "cp ${pkg} $out/${pkg.name}") listOfDefinitions)
+
)}
+
'';
+
}
+6 -19
nixos/modules/system/boot/systemd/repart.nix
···
-
{ config, pkgs, lib, utils, ... }:
+
{ config, lib, pkgs, utils, ... }:
let
cfg = config.systemd.repart;
initrdCfg = config.boot.initrd.systemd.repart;
-
writeDefinition = name: partitionConfig: pkgs.writeText
-
"${name}.conf"
-
(lib.generators.toINI { } { Partition = partitionConfig; });
+
format = pkgs.formats.ini { };
-
listOfDefinitions = lib.mapAttrsToList
-
writeDefinition
-
(lib.filterAttrs (k: _: !(lib.hasPrefix "_" k)) cfg.partitions);
-
-
# Create a directory in the store that contains a copy of all definition
-
# files. This is then passed to systemd-repart in the initrd so it can access
-
# the definition files after the sysroot has been mounted but before
-
# activation. This needs a hard copy of the files and not just symlinks
-
# because otherwise the files do not show up in the sysroot.
-
definitionsDirectory = pkgs.runCommand "systemd-repart-definitions" { } ''
-
mkdir -p $out
-
${(lib.concatStringsSep "\n"
-
(map (pkg: "cp ${pkg} $out/${pkg.name}") listOfDefinitions)
-
)}
-
'';
+
definitionsDirectory = utils.systemdUtils.lib.definitions
+
"repart.d"
+
format
+
(lib.mapAttrs (_n: v: { Partition = v; }) cfg.partitions);
in
{
options = {
+4 -10
nixos/modules/system/boot/systemd/sysupdate.nix
···
format = pkgs.formats.ini { };
-
listOfDefinitions = lib.mapAttrsToList
-
(name: format.generate "${name}.conf")
-
(lib.filterAttrs (k: _: !(lib.hasPrefix "_" k)) cfg.transfers);
-
-
definitionsDirectory = pkgs.runCommand "sysupdate.d" { } ''
-
mkdir -p $out
-
${(lib.concatStringsSep "\n"
-
(map (pkg: "cp ${pkg} $out/${pkg.name}") listOfDefinitions)
-
)}
-
'';
+
definitionsDirectory = utils.systemdUtils.lib.definitions
+
"sysupdate.d"
+
format
+
cfg.transfers;
in
{
options.systemd.sysupdate = {