diff --git a/nixos/lib/systemd-lib.nix b/nixos/lib/systemd-lib.nix index 820ccbcbf72a..22a7dd1ff9a1 100644 --- a/nixos/lib/systemd-lib.nix +++ b/nixos/lib/systemd-lib.nix @@ -360,9 +360,13 @@ in rec { }; }; - commonUnitText = def: '' + commonUnitText = def: lines: '' [Unit] ${attrsToSection def.unitConfig} + '' + lines + lib.optionalString (def.wantedBy != [ ]) '' + + [Install] + WantedBy=${concatStringsSep " " def.wantedBy} ''; targetToUnit = name: def: @@ -376,7 +380,7 @@ in rec { serviceToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + '' + text = commonUnitText def ('' [Service] '' + (let env = cfg.globalEnvironment // def.environment; in concatMapStrings (n: @@ -392,45 +396,41 @@ in rec { '' else "") + optionalString (def ? stopIfChanged && !def.stopIfChanged) '' X-StopIfChanged=false - '' + attrsToSection def.serviceConfig; + '' + attrsToSection def.serviceConfig); }; socketToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + - '' - [Socket] - ${attrsToSection def.socketConfig} - ${concatStringsSep "\n" (map (s: "ListenStream=${s}") def.listenStreams)} - ${concatStringsSep "\n" (map (s: "ListenDatagram=${s}") def.listenDatagrams)} - ''; + text = commonUnitText def '' + [Socket] + ${attrsToSection def.socketConfig} + ${concatStringsSep "\n" (map (s: "ListenStream=${s}") def.listenStreams)} + ${concatStringsSep "\n" (map (s: "ListenDatagram=${s}") def.listenDatagrams)} + ''; }; timerToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + - '' - [Timer] - ${attrsToSection def.timerConfig} - ''; + text = commonUnitText def '' + [Timer] + ${attrsToSection def.timerConfig} + ''; }; pathToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + - '' - [Path] - ${attrsToSection def.pathConfig} - ''; + text = commonUnitText def '' + [Path] + ${attrsToSection def.pathConfig} + ''; }; mountToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + - '' - [Mount] - ${attrsToSection def.mountConfig} - ''; + text = commonUnitText def '' + [Mount] + ${attrsToSection def.mountConfig} + ''; }; automountToUnit = name: def: @@ -444,11 +444,10 @@ in rec { sliceToUnit = name: def: { inherit (def) aliases wantedBy requiredBy enable overrideStrategy; - text = commonUnitText def + - '' - [Slice] - ${attrsToSection def.sliceConfig} - ''; + text = commonUnitText def '' + [Slice] + ${attrsToSection def.sliceConfig} + ''; }; # Create a directory that contains systemd definition files from an attrset