nixos/tools: continue cleanup

- remove with lib
- shuffle some things around for readability
- add separate options for each tool

K900 5dcbab6b ee301a0e

Changed files
+170 -158
nixos
modules
installer
tools
+170 -158
nixos/modules/installer/tools/tools.nix
···
{ config, lib, pkgs, ... }:
-
with lib;
-
let
makeProg = args: pkgs.substituteAll (args // {
dir = "bin";
···
'';
});
-
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;
···
manPage = ./manpages/nixos-generate-config.8;
};
-
inherit (pkgs) nixos-option;
-
nixos-version = makeProg {
name = "nixos-version";
src = ./nixos-version.sh;
···
inherit (config.system) configurationRevision;
json = builtins.toJSON ({
nixosVersion = config.system.nixos.version;
-
} // optionalAttrs (config.system.nixos.revision != null) {
nixpkgsRevision = config.system.nixos.revision;
-
} // optionalAttrs (config.system.configurationRevision != null) {
configurationRevision = config.system.configurationRevision;
});
manPage = ./manpages/nixos-version.8;
};
-
inherit (pkgs) nixos-enter;
-
in
-
{
options.system.nixos-generate-config = {
-
configuration = mkOption {
internal = true;
-
type = types.str;
description = ''
The NixOS module that `nixos-generate-config`
saves to `/etc/nixos/configuration.nix`.
···
'';
};
-
desktopConfiguration = mkOption {
internal = true;
-
type = types.listOf types.lines;
default = [];
description = ''
Text to preseed the desktop configuration that `nixos-generate-config`
···
};
};
-
options.system.disableInstallerTools = mkOption {
internal = true;
-
type = types.bool;
default = false;
description = ''
Disable nixos-rebuild, nixos-generate-config, nixos-installer
···
'';
};
-
config = lib.mkMerge [ (lib.mkIf (config.nix.enable && !config.system.disableInstallerTools) {
-
-
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, pkgs, ... }:
let
makeProg = args: pkgs.substituteAll (args // {
dir = "bin";
···
'';
});
nixos-generate-config = makeProg {
name = "nixos-generate-config";
src = ./nixos-generate-config.pl;
···
manPage = ./manpages/nixos-generate-config.8;
};
nixos-version = makeProg {
name = "nixos-version";
src = ./nixos-version.sh;
···
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;
};
+
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 = lib.mkOption {
internal = true;
+
type = lib.types.str;
+
default = defaultConfigTemplate;
description = ''
The NixOS module that `nixos-generate-config`
saves to `/etc/nixos/configuration.nix`.
···
'';
};
+
desktopConfiguration = lib.mkOption {
internal = true;
+
type = lib.types.listOf lib.types.lines;
default = [];
description = ''
Text to preseed the desktop configuration that `nixos-generate-config`
···
};
};
+
options.system.disableInstallerTools = lib.mkOption {
internal = true;
+
type = lib.types.bool;
default = false;
description = ''
Disable nixos-rebuild, nixos-generate-config, nixos-installer
···
'';
};
+
imports = let
+
mkToolModule = { name, package ? pkgs.${name} }: { config, ... }: {
+
options.system.tools.${name}.enable = lib.mkEnableOption "${name} script" // {
+
default = true;
+
internal = true;
+
};
+
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;
+
};
+
}
+
];
}