diff --git a/nixos/lib/systemd-lib.nix b/nixos/lib/systemd-lib.nix index 918180a014b2..dbf8d2db5b62 100644 --- a/nixos/lib/systemd-lib.nix +++ b/nixos/lib/systemd-lib.nix @@ -291,49 +291,51 @@ in rec { }; }; - mkServiceConfig = path: { name, config, ... }: { + serviceConfig = { name, config, ... }: { config = mkMerge [ { - path = mkAfter path; environment.PATH = mkIf (config.path != []) "${makeBinPath config.path}:${makeSearchPathOutput "bin" "sbin" config.path}"; } - (mkIf (config.preStart != "") + (mkIf (config ? preStart && config.preStart != "") { serviceConfig.ExecStartPre = [ (makeJobScript "${name}-pre-start" config.preStart) ]; }) - (mkIf (config.script != "") + (mkIf (config ? script && config.script != "") { serviceConfig.ExecStart = makeJobScript "${name}-start" config.script + " " + config.scriptArgs; }) - (mkIf (config.postStart != "") + (mkIf (config ? postStart && config.postStart != "") { serviceConfig.ExecStartPost = [ (makeJobScript "${name}-post-start" config.postStart) ]; }) - (mkIf (config.reload != "") + (mkIf (config ? reload && config.reload != "") { serviceConfig.ExecReload = makeJobScript "${name}-reload" config.reload; }) - (mkIf (config.preStop != "") + (mkIf (config ? preStop && config.preStop != "") { serviceConfig.ExecStop = makeJobScript "${name}-pre-stop" config.preStop; }) - (mkIf (config.postStop != "") + (mkIf (config ? postStart && config.postStop != "") { serviceConfig.ExecStopPost = makeJobScript "${name}-post-stop" config.postStop; }) ]; }; - # Default path for systemd services. Should be quite minimal. - serviceConfig = mkServiceConfig [ - pkgs.coreutils - pkgs.findutils - pkgs.gnugrep - pkgs.gnused - systemd - ]; + stage2ServiceConfig = { + imports = [ serviceConfig ]; + # Default path for systemd services. Should be quite minimal. + config.path = mkAfter [ + pkgs.coreutils + pkgs.findutils + pkgs.gnugrep + pkgs.gnused + systemd + ]; + }; - initrdServiceConfig = mkServiceConfig []; + stage1ServiceConfig = serviceConfig; mountConfig = { config, ... }: { config = { diff --git a/nixos/lib/systemd-types.nix b/nixos/lib/systemd-types.nix index b303335ffc1f..e7d504e586be 100644 --- a/nixos/lib/systemd-types.nix +++ b/nixos/lib/systemd-types.nix @@ -11,8 +11,8 @@ rec { config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); }; })); - services = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig serviceConfig ]); - initrdServices = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig initrdServiceConfig ]); + services = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig stage2ServiceConfig ]); + initrdServices = with types; attrsOf (submodule [ { options = serviceOptions; } unitConfig stage1ServiceConfig ]); targets = with types; attrsOf (submodule [ { options = targetOptions; } unitConfig ]);