nixos/lib: systemd definition files function

Add a re-usable function that converts an attrset to a directory
containing systemd definition files.
This commit is contained in:
nikstur 2023-07-26 23:30:08 +02:00
parent 906f999a2f
commit a662dc8b73
3 changed files with 27 additions and 29 deletions

View File

@ -443,4 +443,21 @@ in rec {
${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)
)}
'';
}

View File

@ -1,28 +1,15 @@
{ 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 = {

View File

@ -5,16 +5,10 @@ let
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 = {