diff --git a/nixos/modules/system/activation/activatable-system.nix b/nixos/modules/system/activation/activatable-system.nix index bb207ec0c18f2..1593f54ca8146 100644 --- a/nixos/modules/system/activation/activatable-system.nix +++ b/nixos/modules/system/activation/activatable-system.nix @@ -13,6 +13,10 @@ let ; systemBuilderArgs = { + passAsFile = [ + "activationScript" + "dryActivationScript" + ]; activationScript = config.system.activationScripts.script; dryActivationScript = config.system.dryActivationScript; }; @@ -54,8 +58,8 @@ in }; config = { system.activatableSystemBuilderCommands = '' - echo "$activationScript" > $out/activate - echo "$dryActivationScript" > $out/dry-activate + mv "$activationScriptPath" $out/activate + mv "$dryActivationScriptPath" $out/dry-activate substituteInPlace $out/activate --subst-var-by out ''${!toplevelVar} substituteInPlace $out/dry-activate --subst-var-by out ''${!toplevelVar} chmod u+x $out/activate $out/dry-activate diff --git a/nixos/modules/system/activation/top-level.nix b/nixos/modules/system/activation/top-level.nix index 56e97d3fdea9d..8cab25d9d1e42 100644 --- a/nixos/modules/system/activation/top-level.nix +++ b/nixos/modules/system/activation/top-level.nix @@ -64,7 +64,6 @@ let name = "nixos-system-${config.system.name}-${config.system.nixos.label}"; preferLocalBuild = true; allowSubstitutes = false; - passAsFile = [ "extraDependencies" ]; buildCommand = systemBuilder; systemd = config.systemd.package; @@ -386,6 +385,11 @@ in # to the system closure, which defeats the purpose of the `system.checks` # option, as opposed to `system.extraDependencies`. passedChecks = concatStringsSep " " config.system.checks; + + # Define `passAsFile` here, rather than in the body of `baseSystem`, so + # that it can be augmented with "activationScript" and + # "dryActivationScript" in `./activatable-system.nix`. + passAsFile = [ "extraDependencies" ]; } // lib.optionalAttrs (config.system.forbiddenDependenciesRegexes != [ ]) { closureInfo = pkgs.closureInfo {