From 5dcbab6b74178077d22f7f716d1080d45e999439 Mon Sep 17 00:00:00 2001 From: K900 Date: Sat, 21 Sep 2024 12:25:25 +0300 Subject: [PATCH 1/2] nixos/tools: continue cleanup - remove with lib - shuffle some things around for readability - add separate options for each tool --- nixos/modules/installer/tools/tools.nix | 328 ++++++++++++------------ 1 file changed, 170 insertions(+), 158 deletions(-) diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 3c5816858a46..0a01d6bb9b69 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -3,8 +3,6 @@ { config, lib, pkgs, ... }: -with lib; - let makeProg = args: pkgs.substituteAll (args // { dir = "bin"; @@ -17,11 +15,6 @@ let ''; }); - inherit (pkgs) nixos-build-vms; - - nixos-install = pkgs.nixos-install.override { nix = config.nix.package; }; - nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package.out; }; - nixos-generate-config = makeProg { name = "nixos-generate-config"; src = ./nixos-generate-config.pl; @@ -34,8 +27,6 @@ let manPage = ./manpages/nixos-generate-config.8; }; - inherit (pkgs) nixos-option; - nixos-version = makeProg { name = "nixos-version"; src = ./nixos-version.sh; @@ -44,23 +35,141 @@ let inherit (config.system) configurationRevision; json = builtins.toJSON ({ nixosVersion = config.system.nixos.version; - } // optionalAttrs (config.system.nixos.revision != null) { + } // lib.optionalAttrs (config.system.nixos.revision != null) { nixpkgsRevision = config.system.nixos.revision; - } // optionalAttrs (config.system.configurationRevision != null) { + } // lib.optionalAttrs (config.system.configurationRevision != null) { configurationRevision = config.system.configurationRevision; }); manPage = ./manpages/nixos-version.8; }; - inherit (pkgs) nixos-enter; + nixos-install = pkgs.nixos-install.override { nix = config.nix.package; }; + nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package; }; + + defaultConfigTemplate = '' + # Edit this configuration file to define what should be installed on + # your system. Help is available in the configuration.nix(5) man page, on + # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + + { config, lib, pkgs, ... }: + + { + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + $bootLoaderConfig + # networking.hostName = "nixos"; # Define your hostname. + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + + # Set your time zone. + # time.timeZone = "Europe/Amsterdam"; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password\@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Select internationalisation properties. + # i18n.defaultLocale = "en_US.UTF-8"; + # console = { + # font = "Lat2-Terminus16"; + # keyMap = "us"; + # useXkbConfig = true; # use xkb.options in tty. + # }; + + $xserverConfig + + $desktopConfiguration + # Configure keymap in X11 + # services.xserver.xkb.layout = "us"; + # services.xserver.xkb.options = "eurosign:e,caps:escape"; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + # hardware.pulseaudio.enable = true; + # OR + # services.pipewire = { + # enable = true; + # pulse.enable = true; + # }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + # users.users.alice = { + # isNormalUser = true; + # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + # packages = with pkgs; [ + # firefox + # tree + # ]; + # }; + + # List packages installed in system profile. To search, run: + # \$ nix search wget + # environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + # ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # Copy the NixOS configuration file and link it from the resulting system + # (/run/current-system/configuration.nix). This is useful in case you + # accidentally delete configuration.nix. + # system.copySystemConfiguration = true; + + # This option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "${config.system.nixos.release}"; # Did you read the comment? + + } + ''; in - { - options.system.nixos-generate-config = { - configuration = mkOption { + configuration = lib.mkOption { internal = true; - type = types.str; + type = lib.types.str; + default = defaultConfigTemplate; description = '' The NixOS module that `nixos-generate-config` saves to `/etc/nixos/configuration.nix`. @@ -74,9 +183,9 @@ in ''; }; - desktopConfiguration = mkOption { + desktopConfiguration = lib.mkOption { internal = true; - type = types.listOf types.lines; + type = lib.types.listOf lib.types.lines; default = []; description = '' Text to preseed the desktop configuration that `nixos-generate-config` @@ -92,9 +201,9 @@ in }; }; - options.system.disableInstallerTools = mkOption { + options.system.disableInstallerTools = lib.mkOption { internal = true; - type = types.bool; + type = lib.types.bool; default = false; description = '' Disable nixos-rebuild, nixos-generate-config, nixos-installer @@ -104,145 +213,48 @@ in ''; }; - config = lib.mkMerge [ (lib.mkIf (config.nix.enable && !config.system.disableInstallerTools) { + imports = let + mkToolModule = { name, package ? pkgs.${name} }: { config, ... }: { + options.system.tools.${name}.enable = lib.mkEnableOption "${name} script" // { + default = true; + internal = true; + }; - system.nixos-generate-config.configuration = mkDefault '' - # Edit this configuration file to define what should be installed on - # your system. Help is available in the configuration.nix(5) man page, on - # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). - - { config, lib, pkgs, ... }: - - { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; - - $bootLoaderConfig - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - # time.timeZone = "Europe/Amsterdam"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password\@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkb.options in tty. - # }; - - $xserverConfig - - $desktopConfiguration - # Configure keymap in X11 - # services.xserver.xkb.layout = "us"; - # services.xserver.xkb.options = "eurosign:e,caps:escape"; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - # hardware.pulseaudio.enable = true; - # OR - # services.pipewire = { - # enable = true; - # pulse.enable = true; - # }; - - # Enable touchpad support (enabled default in most desktopManager). - # services.libinput.enable = true; - - # Define a user account. Don't forget to set a password with ‘passwd’. - # users.users.alice = { - # isNormalUser = true; - # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - # packages = with pkgs; [ - # firefox - # tree - # ]; - # }; - - # List packages installed in system profile. To search, run: - # \$ nix search wget - # environment.systemPackages = with pkgs; [ - # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - # wget - # ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # This option defines the first version of NixOS you have installed on this particular machine, - # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. - # - # Most users should NEVER change this value after the initial install, for any reason, - # even if you've upgraded your system to a new NixOS release. - # - # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, - # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how - # to actually do that. - # - # This value being lower than the current NixOS release does NOT mean your system is - # out of date, out of support, or vulnerable. - # - # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, - # and migrated your data accordingly. - # - # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . - system.stateVersion = "${config.system.nixos.release}"; # Did you read the comment? - - } - ''; - - environment.systemPackages = - [ nixos-build-vms - nixos-install - nixos-rebuild - nixos-generate-config - nixos-option - nixos-version - nixos-enter - ]; - - documentation.man.man-db.skipPackages = [ nixos-version ]; - - }) - - # These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally. - ({ - system.build = { - inherit nixos-install nixos-generate-config nixos-option nixos-rebuild nixos-enter; + config = lib.mkIf config.system.tools.${name}.enable { + environment.systemPackages = [ package ]; + }; }; - })]; + in [ + (mkToolModule { name = "nixos-build-vms"; }) + (mkToolModule { name = "nixos-enter"; }) + (mkToolModule { name = "nixos-generate-config"; package = nixos-generate-config; }) + (mkToolModule { name = "nixos-install"; package = nixos-install; }) + (mkToolModule { name = "nixos-option"; }) + (mkToolModule { name = "nixos-rebuild"; package = nixos-rebuild; }) + (mkToolModule { name = "nixos-version"; package = nixos-version; }) + ]; + config = lib.mkMerge [ + (lib.mkIf config.system.disableInstallerTools { + system.tools = { + nixos-build-vms.enable = false; + nixos-enter.enable = false; + nixos-generate-config.enable = false; + nixos-install.enable = false; + nixos-option.enable = false; + nixos-rebuild.enable = false; + nixos-version.enable = false; + }; + }) + { + documentation.man.man-db.skipPackages = [ nixos-version ]; + + # These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally. + system.build = { + inherit nixos-generate-config nixos-install nixos-rebuild; + nixos-option = lib.warn "Accessing nixos-option through `config.system.build` is deprecated, use `pkgs.nixos-option` instead." pkgs.nixos-option; + nixos-enter = lib.warn "Accessing nixos-enter through `config.system.build` is deprecated, use `pkgs.nixos-enter` instead." pkgs.nixos-enter; + }; + } + ]; } From 1f9fc918cedc855bd106696d9b2038a0dbdcf52c Mon Sep 17 00:00:00 2001 From: K900 Date: Sat, 21 Sep 2024 12:44:04 +0300 Subject: [PATCH 2/2] treewide: use pkgs.nixos-enter instead of config.system.build.nixos-enter --- nixos/doc/manual/development/testing-installer.chapter.md | 4 ++-- nixos/lib/make-disk-image.nix | 2 +- nixos/lib/make-multi-disk-zfs-image.nix | 2 +- nixos/lib/make-single-disk-zfs-image.nix | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/nixos/doc/manual/development/testing-installer.chapter.md b/nixos/doc/manual/development/testing-installer.chapter.md index 2eaa01614920..92c759a8559a 100644 --- a/nixos/doc/manual/development/testing-installer.chapter.md +++ b/nixos/doc/manual/development/testing-installer.chapter.md @@ -6,13 +6,13 @@ tedious, so here is a quick way to see if the installer works properly: ```ShellSession # mount -t tmpfs none /mnt # nixos-generate-config --root /mnt -$ nix-build '' -A config.system.build.nixos-install +$ nix-build '' -A nixos-install # ./result/bin/nixos-install ``` To start a login shell in the new NixOS installation in `/mnt`: ```ShellSession -$ nix-build '' -A config.system.build.nixos-enter +$ nix-build '' -A nixos-enter # ./result/bin/nixos-enter ``` diff --git a/nixos/lib/make-disk-image.nix b/nixos/lib/make-disk-image.nix index 208eaf59dc5c..a943edb7b574 100644 --- a/nixos/lib/make-disk-image.nix +++ b/nixos/lib/make-disk-image.nix @@ -321,7 +321,7 @@ let format' = format; in let e2fsprogs lkl config.system.build.nixos-install - config.system.build.nixos-enter + nixos-enter nix systemdMinimal ] diff --git a/nixos/lib/make-multi-disk-zfs-image.nix b/nixos/lib/make-multi-disk-zfs-image.nix index 077bb8f22707..1dac232e2b8c 100644 --- a/nixos/lib/make-multi-disk-zfs-image.nix +++ b/nixos/lib/make-multi-disk-zfs-image.nix @@ -124,7 +124,7 @@ let tools = lib.makeBinPath ( with pkgs; [ - config.system.build.nixos-enter + nixos-enter config.system.build.nixos-install dosfstools e2fsprogs diff --git a/nixos/lib/make-single-disk-zfs-image.nix b/nixos/lib/make-single-disk-zfs-image.nix index 585fa93b7fa0..e37b79797dca 100644 --- a/nixos/lib/make-single-disk-zfs-image.nix +++ b/nixos/lib/make-single-disk-zfs-image.nix @@ -112,7 +112,7 @@ let tools = lib.makeBinPath ( with pkgs; [ - config.system.build.nixos-enter + nixos-enter config.system.build.nixos-install dosfstools e2fsprogs