nixos/tools: continue cleanup
- remove with lib - shuffle some things around for readability - add separate options for each tool
This commit is contained in:
@@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
makeProg = args: pkgs.substituteAll (args // {
|
makeProg = args: pkgs.substituteAll (args // {
|
||||||
dir = "bin";
|
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 {
|
nixos-generate-config = makeProg {
|
||||||
name = "nixos-generate-config";
|
name = "nixos-generate-config";
|
||||||
src = ./nixos-generate-config.pl;
|
src = ./nixos-generate-config.pl;
|
||||||
@@ -34,8 +27,6 @@ let
|
|||||||
manPage = ./manpages/nixos-generate-config.8;
|
manPage = ./manpages/nixos-generate-config.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
inherit (pkgs) nixos-option;
|
|
||||||
|
|
||||||
nixos-version = makeProg {
|
nixos-version = makeProg {
|
||||||
name = "nixos-version";
|
name = "nixos-version";
|
||||||
src = ./nixos-version.sh;
|
src = ./nixos-version.sh;
|
||||||
@@ -44,69 +35,18 @@ let
|
|||||||
inherit (config.system) configurationRevision;
|
inherit (config.system) configurationRevision;
|
||||||
json = builtins.toJSON ({
|
json = builtins.toJSON ({
|
||||||
nixosVersion = config.system.nixos.version;
|
nixosVersion = config.system.nixos.version;
|
||||||
} // optionalAttrs (config.system.nixos.revision != null) {
|
} // lib.optionalAttrs (config.system.nixos.revision != null) {
|
||||||
nixpkgsRevision = config.system.nixos.revision;
|
nixpkgsRevision = config.system.nixos.revision;
|
||||||
} // optionalAttrs (config.system.configurationRevision != null) {
|
} // lib.optionalAttrs (config.system.configurationRevision != null) {
|
||||||
configurationRevision = config.system.configurationRevision;
|
configurationRevision = config.system.configurationRevision;
|
||||||
});
|
});
|
||||||
manPage = ./manpages/nixos-version.8;
|
manPage = ./manpages/nixos-version.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
inherit (pkgs) nixos-enter;
|
nixos-install = pkgs.nixos-install.override { nix = config.nix.package; };
|
||||||
in
|
nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package; };
|
||||||
|
|
||||||
{
|
defaultConfigTemplate = ''
|
||||||
|
|
||||||
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`.
|
|
||||||
|
|
||||||
This is an internal option. No backward compatibility is guaranteed.
|
|
||||||
Use at your own risk!
|
|
||||||
|
|
||||||
Note that this string gets spliced into a Perl script. The perl
|
|
||||||
variable `$bootLoaderConfig` can be used to
|
|
||||||
splice in the boot loader configuration.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
desktopConfiguration = mkOption {
|
|
||||||
internal = true;
|
|
||||||
type = types.listOf types.lines;
|
|
||||||
default = [];
|
|
||||||
description = ''
|
|
||||||
Text to preseed the desktop configuration that `nixos-generate-config`
|
|
||||||
saves to `/etc/nixos/configuration.nix`.
|
|
||||||
|
|
||||||
This is an internal option. No backward compatibility is guaranteed.
|
|
||||||
Use at your own risk!
|
|
||||||
|
|
||||||
Note that this string gets spliced into a Perl script. The perl
|
|
||||||
variable `$bootLoaderConfig` can be used to
|
|
||||||
splice in the boot loader configuration.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
options.system.disableInstallerTools = mkOption {
|
|
||||||
internal = true;
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Disable nixos-rebuild, nixos-generate-config, nixos-installer
|
|
||||||
and other NixOS tools. This is useful to shrink embedded,
|
|
||||||
read-only systems which are not expected to be rebuild or
|
|
||||||
reconfigure themselves. Use at your own risk!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
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
|
# Edit this configuration file to define what should be installed on
|
||||||
# your system. Help is available in the configuration.nix(5) man page, 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`).
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
@@ -223,26 +163,98 @@ in
|
|||||||
|
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
|
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`.
|
||||||
|
|
||||||
environment.systemPackages =
|
This is an internal option. No backward compatibility is guaranteed.
|
||||||
[ nixos-build-vms
|
Use at your own risk!
|
||||||
nixos-install
|
|
||||||
nixos-rebuild
|
Note that this string gets spliced into a Perl script. The perl
|
||||||
nixos-generate-config
|
variable `$bootLoaderConfig` can be used to
|
||||||
nixos-option
|
splice in the boot loader configuration.
|
||||||
nixos-version
|
'';
|
||||||
nixos-enter
|
};
|
||||||
|
|
||||||
|
desktopConfiguration = lib.mkOption {
|
||||||
|
internal = true;
|
||||||
|
type = lib.types.listOf lib.types.lines;
|
||||||
|
default = [];
|
||||||
|
description = ''
|
||||||
|
Text to preseed the desktop configuration that `nixos-generate-config`
|
||||||
|
saves to `/etc/nixos/configuration.nix`.
|
||||||
|
|
||||||
|
This is an internal option. No backward compatibility is guaranteed.
|
||||||
|
Use at your own risk!
|
||||||
|
|
||||||
|
Note that this string gets spliced into a Perl script. The perl
|
||||||
|
variable `$bootLoaderConfig` can be used to
|
||||||
|
splice in the boot loader configuration.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
options.system.disableInstallerTools = lib.mkOption {
|
||||||
|
internal = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Disable nixos-rebuild, nixos-generate-config, nixos-installer
|
||||||
|
and other NixOS tools. This is useful to shrink embedded,
|
||||||
|
read-only systems which are not expected to be rebuild or
|
||||||
|
reconfigure themselves. Use at your own risk!
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
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 ];
|
documentation.man.man-db.skipPackages = [ nixos-version ];
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
# These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally.
|
# These may be used in auxiliary scripts (ie not part of toplevel), so they are defined unconditionally.
|
||||||
({
|
|
||||||
system.build = {
|
system.build = {
|
||||||
inherit nixos-install nixos-generate-config nixos-option nixos-rebuild nixos-enter;
|
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;
|
||||||
};
|
};
|
||||||
})];
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user