From dc0f2638f396f0d676347c149f159dc184ecc6dc Mon Sep 17 00:00:00 2001 From: Thiago Kenji Okada Date: Thu, 12 Feb 2026 17:53:57 +0000 Subject: [PATCH 1/2] nixos-rebuild-ng: add missing FLAKE_FLAGS in `nix eval` calls --- pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py | 2 ++ pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py | 4 ++++ pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py | 2 ++ 3 files changed, 8 insertions(+) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py index 2804ea94a7b2..9544a393fb61 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py @@ -314,6 +314,7 @@ def get_build_image_name_flake( r = run_wrapper( [ "nix", + *FLAKE_FLAGS, "eval", "--json", flake.to_attr( @@ -365,6 +366,7 @@ def get_build_image_variants_flake( r = run_wrapper( [ "nix", + *FLAKE_FLAGS, "eval", "--json", flake.to_attr("config.system.build.images"), diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py index 8d922809b05d..5a9f61be1f25 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py @@ -386,6 +386,8 @@ def test_execute_nix_build_image_flake(mock_run: Mock, tmp_path: Path) -> None: call( [ "nix", + "--extra-experimental-features", + "nix-command flakes", "eval", "--json", '/path/to/config#nixosConfigurations."hostname".config.system.build.images', @@ -412,6 +414,8 @@ def test_execute_nix_build_image_flake(mock_run: Mock, tmp_path: Path) -> None: call( [ "nix", + "--extra-experimental-features", + "nix-command flakes", "eval", "--json", '/path/to/config#nixosConfigurations."hostname".config.system.build.images.azure.passthru.filePath', diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index 69d29422337a..de70cd7723fe 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -394,6 +394,8 @@ def test_get_build_image_variants_flake(mock_run: Mock) -> None: mock_run.assert_called_with( [ "nix", + "--extra-experimental-features", + "nix-command flakes", "eval", "--json", "/flake.nix#myAttr.config.system.build.images", From be9bcfc8f58df12b3bf03a484f724a996030f841 Mon Sep 17 00:00:00 2001 From: Thiago Kenji Okada Date: Mon, 16 Feb 2026 11:36:38 +0000 Subject: [PATCH 2/2] nixos-rebuild-ng: linter fixes --- .../src/nixos_rebuild/__init__.py | 2 +- .../nixos-rebuild-ng/src/nixos_rebuild/nix.py | 17 +++++++++-------- .../src/nixos_rebuild/process.py | 6 +++--- .../src/nixos_rebuild/services.py | 10 ++++++++-- .../ni/nixos-rebuild-ng/src/tests/test_nix.py | 10 ++++------ 5 files changed, 25 insertions(+), 20 deletions(-) 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 814d6c481c2f..baf0c57c93b2 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 @@ -201,7 +201,7 @@ def get_parser() -> tuple[argparse.ArgumentParser, dict[str, argparse.ArgumentPa "--diff", action="store_true", help="prints out the diff between the current system " - "and the newly built one using nix store diff-closures" + "and the newly built one using nix store diff-closures", ) main_parser.add_argument("action", choices=Action.values(), nargs="?") diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py index 9544a393fb61..1e2bd91f71c5 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py @@ -1,7 +1,7 @@ -import sys import json import logging import os +import sys import textwrap import uuid from concurrent.futures import ThreadPoolExecutor @@ -540,12 +540,13 @@ def list_generations(profile: Profile) -> list[GenerationJson]: reverse=True, ) -def diff_closures(current_config: Path, new_config: Path, target_host: Remote | None = None): - print( - f"<<< {current_config}\n" - f">>> {new_config}", - file=sys.stderr - ) + +def diff_closures( + current_config: Path, + new_config: Path, + target_host: Remote | None = None, +) -> None: + print(f"<<< {current_config}\n>>> {new_config}", file=sys.stderr) run_wrapper( [ "nix", @@ -556,7 +557,7 @@ def diff_closures(current_config: Path, new_config: Path, target_host: Remote | new_config, ], remote=target_host, - stdout=sys.stderr + stdout=sys.stderr, ) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 4a03e86ed4e9..b3cea3b15d68 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -8,7 +8,7 @@ import subprocess from collections.abc import Sequence from dataclasses import dataclass from ipaddress import AddressValueError, IPv6Address -from typing import Final, Self, TypedDict, Unpack +from typing import Final, Self, TextIO, TypedDict, Unpack from . import tmpdir @@ -85,8 +85,8 @@ class Remote: # Not exhaustive, but we can always extend it later. class RunKwargs(TypedDict, total=False): capture_output: bool - stderr: int | None - stdout: int | None + stderr: int | TextIO | None + stdout: int | TextIO | None def cleanup_ssh() -> None: diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py index 933c2f8de10e..f5b9609e14f7 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/services.py @@ -324,9 +324,15 @@ def build_and_activate_system( current_config = Path("/run/current-system") if args.diff: if current_config.exists(): - nix.diff_closures(current_config=current_config.readlink(), new_config=path_to_config, target_host=target_host) + nix.diff_closures( + current_config=current_config.readlink(), + new_config=path_to_config, + target_host=target_host, + ) else: - logger.warning(f"missing '{str(current_config)}', skipping configuration diff...") + logger.warning( + f"missing '{current_config!s}', skipping configuration diff..." + ) _activate_system( path_to_config=path_to_config, diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index de70cd7723fe..524527f8f68d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -556,11 +556,9 @@ def test_list_generations(mock_get_generations: Mock, tmp_path: Path) -> None: @patch(get_qualified_name(n.run_wrapper, n), autospec=True) def test_diff_closures(mock_run: Mock) -> None: - assert n.diff_closures( - Path("/run/current-system"), - Path("/nix/var/nix/profiles/system"), - None - ) == None + n.diff_closures( + Path("/run/current-system"), Path("/nix/var/nix/profiles/system"), None + ) mock_run.assert_called_with( [ "nix", @@ -572,7 +570,7 @@ def test_diff_closures(mock_run: Mock) -> None: Path("/nix/var/nix/profiles/system"), ], remote=None, - stdout=sys.stderr + stdout=sys.stderr, )