nixos/systemd-lib: Use module composition

This commit is contained in:
Janne Heß 2022-04-01 09:39:56 +02:00
parent fc91cdb5bc
commit 1e5261f31c
No known key found for this signature in database
GPG key ID: 69165158F05265DF
2 changed files with 21 additions and 19 deletions

View file

@ -291,49 +291,51 @@ in rec {
}; };
}; };
mkServiceConfig = path: { name, config, ... }: { serviceConfig = { name, config, ... }: {
config = mkMerge config = mkMerge
[ { [ {
path = mkAfter path;
environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}"; environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}";
} }
(mkIf (config.preStart != "") (mkIf (config ? preStart && config.preStart != "")
{ serviceConfig.ExecStartPre = { serviceConfig.ExecStartPre =
[ (makeJobScript "${name}-pre-start" config.preStart) ]; [ (makeJobScript "${name}-pre-start" config.preStart) ];
}) })
(mkIf (config.script != "") (mkIf (config ? script && config.script != "")
{ serviceConfig.ExecStart = { serviceConfig.ExecStart =
makeJobScript "${name}-start" config.script + " " + config.scriptArgs; makeJobScript "${name}-start" config.script + " " + config.scriptArgs;
}) })
(mkIf (config.postStart != "") (mkIf (config ? postStart && config.postStart != "")
{ serviceConfig.ExecStartPost = { serviceConfig.ExecStartPost =
[ (makeJobScript "${name}-post-start" config.postStart) ]; [ (makeJobScript "${name}-post-start" config.postStart) ];
}) })
(mkIf (config.reload != "") (mkIf (config ? reload && config.reload != "")
{ serviceConfig.ExecReload = { serviceConfig.ExecReload =
makeJobScript "${name}-reload" config.reload; makeJobScript "${name}-reload" config.reload;
}) })
(mkIf (config.preStop != "") (mkIf (config ? preStop && config.preStop != "")
{ serviceConfig.ExecStop = { serviceConfig.ExecStop =
makeJobScript "${name}-pre-stop" config.preStop; makeJobScript "${name}-pre-stop" config.preStop;
}) })
(mkIf (config.postStop != "") (mkIf (config ? postStart && config.postStop != "")
{ serviceConfig.ExecStopPost = { serviceConfig.ExecStopPost =
makeJobScript "${name}-post-stop" config.postStop; makeJobScript "${name}-post-stop" config.postStop;
}) })
]; ];
}; };
# Default path for systemd services. Should be quite minimal. stage2ServiceConfig = {
serviceConfig = mkServiceConfig [ imports = [ serviceConfig ];
pkgs.coreutils # Default path for systemd services. Should be quite minimal.
pkgs.findutils config.path = mkAfter [
pkgs.gnugrep pkgs.coreutils
pkgs.gnused pkgs.findutils
systemd pkgs.gnugrep
]; pkgs.gnused
systemd
];
};
initrdServiceConfig = mkServiceConfig []; stage1ServiceConfig = serviceConfig;
mountConfig = { config, ... }: { mountConfig = { config, ... }: {
config = { config = {

View file

@ -11,8 +11,8 @@ rec {
config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); }; config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); };
})); }));
services = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]); services = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig stage2ServiceConfig ]);
initrdServices = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig initrdServiceConfig ]); initrdServices = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig stage1ServiceConfig ]);
targets = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig ]); targets = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig ]);