diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 63107fdeaa58..54ddab6092bf 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -48,6 +48,7 @@ let nixos-rebuild-ng = pkgs.nixos-rebuild-ng.override { nix = config.nix.package; withNgSuffix = false; + withReexec = true; }; defaultConfigTemplate = '' diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/package.nix b/pkgs/by-name/ni/nixos-rebuild-ng/package.nix index e64d4208c73e..2c630f60a843 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/package.nix +++ b/pkgs/by-name/ni/nixos-rebuild-ng/package.nix @@ -8,6 +8,7 @@ runCommand, scdoc, withNgSuffix ? true, + withReexec ? false, withShellFiles ? true, }: let @@ -48,6 +49,7 @@ python3Packages.buildPythonApplication rec { postPatch = '' substituteInPlace nixos_rebuild/__init__.py \ --subst-var-by executable ${executable} \ + --subst-var-by withReexec ${lib.boolToString withReexec} \ --subst-var-by withShellFiles ${lib.boolToString withShellFiles} substituteInPlace pyproject.toml \ diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py index bdec4797e5c3..d2fac1b4f3c9 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py @@ -248,22 +248,14 @@ def reexec( flake_build_flags: dict[str, Args], ) -> None: drv = None + attr = "config.system.build.nixos-rebuild" try: # Need to set target_host=None, to avoid connecting to remote if flake := Flake.from_arg(args.flake, None): - drv = nix.build_flake( - "pkgs.nixos-rebuild-ng", - flake, - **flake_build_flags, - no_link=True, - ) + drv = nix.build_flake(attr, flake, **flake_build_flags, no_link=True) else: - drv = nix.build( - "pkgs.nixos-rebuild-ng", - BuildAttr.from_arg(args.attr, args.file), - **build_flags, - no_out_link=True, - ) + build_attr = BuildAttr.from_arg(args.attr, args.file) + drv = nix.build(attr, build_attr, **build_flags, no_out_link=True) except CalledProcessError: logger.warning("could not find a newer version of nixos-rebuild") @@ -306,7 +298,7 @@ def execute(argv: list[str]) -> None: # Re-exec to a newer version of the script before building to ensure we get # the latest fixes if ( - False # disabled until we introduce `config.system.build.nixos-rebuild-ng` + "@withReexec@" == "true" and can_run and not args.fast and not os.environ.get("_NIXOS_REBUILD_REEXEC")