From b9ea4817840da216d258b37a7f1cc475d19ec861 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 28 Jan 2025 20:42:01 +0100 Subject: [PATCH 1/2] nixos/systemd-boot: replace substituteAll with replaceVarsWith --- .../boot/loader/systemd-boot/systemd-boot.nix | 94 +++++++++---------- 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix index 85fcbb83cece..e5080bd8d191 100644 --- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix +++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix @@ -31,7 +31,7 @@ let edk2ShellEspPath = "efi/edk2-uefi-shell/shell.efi"; - systemdBootBuilder = pkgs.substituteAll rec { + systemdBootBuilder = pkgs.replaceVarsWith { name = "systemd-boot"; dir = "bin"; @@ -40,68 +40,66 @@ let isExecutable = true; - inherit (builtins) storeDir; + replacements = rec { + inherit (builtins) storeDir; - inherit (pkgs) python3; + inherit (pkgs) python3; - systemd = config.systemd.package; + systemd = config.systemd.package; - bootspecTools = pkgs.bootspec; + bootspecTools = pkgs.bootspec; - nix = config.nix.package.out; + nix = config.nix.package.out; - timeout = if config.boot.loader.timeout == null then "menu-force" else config.boot.loader.timeout; + timeout = if config.boot.loader.timeout == null then "menu-force" else config.boot.loader.timeout; - configurationLimit = if cfg.configurationLimit == null then 0 else cfg.configurationLimit; + configurationLimit = if cfg.configurationLimit == null then 0 else cfg.configurationLimit; - inherit (cfg) - consoleMode - graceful - editor - rebootForBitlocker - ; + inherit (cfg) + consoleMode + graceful + editor + rebootForBitlocker + ; - inherit (efi) efiSysMountPoint canTouchEfiVariables; + inherit (efi) efiSysMountPoint canTouchEfiVariables; - bootMountPoint = - if cfg.xbootldrMountPoint != null then cfg.xbootldrMountPoint else efi.efiSysMountPoint; + bootMountPoint = + if cfg.xbootldrMountPoint != null then cfg.xbootldrMountPoint else efi.efiSysMountPoint; - nixosDir = "/EFI/nixos"; + nixosDir = "/EFI/nixos"; - inherit (config.system.nixos) distroName; + inherit (config.system.nixos) distroName; - memtest86 = optionalString cfg.memtest86.enable pkgs.memtest86plus; + checkMountpoints = pkgs.writeShellScript "check-mountpoints" '' + fail() { + echo "$1 = '$2' is not a mounted partition. Is the path configured correctly?" >&2 + exit 1 + } + ${pkgs.util-linuxMinimal}/bin/findmnt ${efiSysMountPoint} > /dev/null || fail efiSysMountPoint ${efiSysMountPoint} + ${lib.optionalString (cfg.xbootldrMountPoint != null) + "${pkgs.util-linuxMinimal}/bin/findmnt ${cfg.xbootldrMountPoint} > /dev/null || fail xbootldrMountPoint ${cfg.xbootldrMountPoint}" + } + ''; - netbootxyz = optionalString cfg.netbootxyz.enable pkgs.netbootxyz-efi; + copyExtraFiles = pkgs.writeShellScript "copy-extra-files" '' + empty_file=$(${pkgs.coreutils}/bin/mktemp) - checkMountpoints = pkgs.writeShellScript "check-mountpoints" '' - fail() { - echo "$1 = '$2' is not a mounted partition. Is the path configured correctly?" >&2 - exit 1 - } - ${pkgs.util-linuxMinimal}/bin/findmnt ${efiSysMountPoint} > /dev/null || fail efiSysMountPoint ${efiSysMountPoint} - ${lib.optionalString (cfg.xbootldrMountPoint != null) - "${pkgs.util-linuxMinimal}/bin/findmnt ${cfg.xbootldrMountPoint} > /dev/null || fail xbootldrMountPoint ${cfg.xbootldrMountPoint}" - } - ''; + ${concatStrings ( + mapAttrsToList (n: v: '' + ${pkgs.coreutils}/bin/install -Dp "${v}" "${bootMountPoint}/"${escapeShellArg n} + ${pkgs.coreutils}/bin/install -D $empty_file "${bootMountPoint}/${nixosDir}/.extra-files/"${escapeShellArg n} + '') cfg.extraFiles + )} - copyExtraFiles = pkgs.writeShellScript "copy-extra-files" '' - empty_file=$(${pkgs.coreutils}/bin/mktemp) - - ${concatStrings ( - mapAttrsToList (n: v: '' - ${pkgs.coreutils}/bin/install -Dp "${v}" "${bootMountPoint}/"${escapeShellArg n} - ${pkgs.coreutils}/bin/install -D $empty_file "${bootMountPoint}/${nixosDir}/.extra-files/"${escapeShellArg n} - '') cfg.extraFiles - )} - - ${concatStrings ( - mapAttrsToList (n: v: '' - ${pkgs.coreutils}/bin/install -Dp "${pkgs.writeText n v}" "${bootMountPoint}/loader/entries/"${escapeShellArg n} - ${pkgs.coreutils}/bin/install -D $empty_file "${bootMountPoint}/${nixosDir}/.extra-files/loader/entries/"${escapeShellArg n} - '') cfg.extraEntries - )} - ''; + ${concatStrings ( + mapAttrsToList (n: v: '' + ${pkgs.coreutils}/bin/install -Dp "${pkgs.writeText n v}" "${bootMountPoint}/loader/entries/"${escapeShellArg n} + ${pkgs.coreutils}/bin/install -D $empty_file "${bootMountPoint}/${nixosDir}/.extra-files/loader/entries/"${escapeShellArg n} + '') cfg.extraEntries + )} + ''; + }; }; finalSystemdBootBuilder = pkgs.writeScript "install-systemd-boot.sh" '' From dc0e094b331a3a5cbdef44e5ea7a2b718e9f8680 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 28 Jan 2025 20:49:08 +0100 Subject: [PATCH 2/2] nixos/installer: replace substituteAll with replaceVarsWith for tools --- nixos/modules/installer/tools/tools.nix | 38 ++++++++++++++----------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index e4d03f39018e..3731b011a845 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -4,7 +4,7 @@ { config, lib, pkgs, ... }: let - makeProg = args: pkgs.substituteAll (args // { + makeProg = args: pkgs.replaceVarsWith (args // { dir = "bin"; isExecutable = true; nativeBuildInputs = [ @@ -18,28 +18,32 @@ let nixos-generate-config = makeProg { name = "nixos-generate-config"; src = ./nixos-generate-config.pl; - perl = "${pkgs.perl.withPackages (p: [ p.FileSlurp ])}/bin/perl"; - hostPlatformSystem = pkgs.stdenv.hostPlatform.system; - detectvirt = "${config.systemd.package}/bin/systemd-detect-virt"; - btrfs = "${pkgs.btrfs-progs}/bin/btrfs"; - inherit (config.system.nixos-generate-config) configuration desktopConfiguration; - xserverEnabled = config.services.xserver.enable; + replacements = { + perl = "${pkgs.perl.withPackages (p: [ p.FileSlurp ])}/bin/perl"; + hostPlatformSystem = pkgs.stdenv.hostPlatform.system; + detectvirt = "${config.systemd.package}/bin/systemd-detect-virt"; + btrfs = "${pkgs.btrfs-progs}/bin/btrfs"; + inherit (config.system.nixos-generate-config) configuration desktopConfiguration; + xserverEnabled = config.services.xserver.enable; + }; manPage = ./manpages/nixos-generate-config.8; }; nixos-version = makeProg { name = "nixos-version"; src = ./nixos-version.sh; - inherit (pkgs) runtimeShell; - inherit (config.system.nixos) version codeName revision; - inherit (config.system) configurationRevision; - json = builtins.toJSON ({ - nixosVersion = config.system.nixos.version; - } // lib.optionalAttrs (config.system.nixos.revision != null) { - nixpkgsRevision = config.system.nixos.revision; - } // lib.optionalAttrs (config.system.configurationRevision != null) { - configurationRevision = config.system.configurationRevision; - }); + replacements = { + inherit (pkgs) runtimeShell; + inherit (config.system.nixos) version codeName revision; + inherit (config.system) configurationRevision; + json = builtins.toJSON ({ + nixosVersion = config.system.nixos.version; + } // lib.optionalAttrs (config.system.nixos.revision != null) { + nixpkgsRevision = config.system.nixos.revision; + } // lib.optionalAttrs (config.system.configurationRevision != null) { + configurationRevision = config.system.configurationRevision; + }); + }; manPage = ./manpages/nixos-version.8; };