nixos/system/activation/bootspec: generalize the bootspec tooling package

After RFC-0125 implementation, Determinate Systems was pinged multiple
times to transfer the repository ownership of the tooling to a
vendor-neutral repository.

Unfortunately, this never manifested. Additionally, the leadership of
the NixOS project was too dysfunctional to deal with this sort of
problem. It might even still be the case up to this day.

Nonetheless, nixpkgs is about enabling end users to enact their own
policies. It would be better to live in a world where there is one
obvious choice of bootspec tooling, in the meantime, we can live in a
world where people can choose their bootspec tooling.

The Lix forge possess one fork of the Bootspec tooling:
https://git.lix.systems/lix-community/bootspec which will live its own
life from now on.

Change-Id: I00c4dd64e00b4c24f6641472902e7df60ed13b55
Signed-off-by: Raito Bezarius <masterancpp@gmail.com>

Changed files
+85 -81
nixos
modules
system
activation
boot
loader
systemd-boot
tests
+2
nixos/modules/system/activation/bootspec.nix
···
Enable this option if you want to ascertain that your documents are correct
'';
+
package = lib.mkPackageOption pkgs "bootspec" { };
+
extensions = lib.mkOption {
# NOTE(RaitoBezarius): this is not enough to validate: extensions."osRelease" = drv; those are picked up by cue validation.
type = lib.types.attrsOf lib.types.anything; # <namespace>: { ...namespace-specific fields }
+1 -1
nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix
···
systemd = config.systemd.package;
-
bootspecTools = pkgs.bootspec;
+
bootspecTools = config.boot.bootspec.package;
nix = config.nix.package.out;
+82 -80
nixos/tests/installer.nix
···
in
{
# The configuration of the system used to run "nixos-install".
-
installer = {
-
imports = [
-
commonConfig
-
../modules/profiles/installation-device.nix
-
../modules/profiles/base.nix
-
extraInstallerConfig
-
./common/auto-format-root-device.nix
-
];
+
installer =
+
{ config, ... }:
+
{
+
imports = [
+
commonConfig
+
../modules/profiles/installation-device.nix
+
../modules/profiles/base.nix
+
extraInstallerConfig
+
./common/auto-format-root-device.nix
+
];
-
# In systemdStage1, also automatically format the device backing the
-
# root filesystem.
-
virtualisation.fileSystems."/".autoFormat = systemdStage1;
+
# In systemdStage1, also automatically format the device backing the
+
# root filesystem.
+
virtualisation.fileSystems."/".autoFormat = systemdStage1;
-
boot.initrd.systemd.enable = systemdStage1;
+
boot.initrd.systemd.enable = systemdStage1;
-
# Use a small /dev/vdb as the root disk for the
-
# installer. This ensures the target disk (/dev/vda) is
-
# the same during and after installation.
-
virtualisation.emptyDiskImages = [ 512 ];
-
virtualisation.rootDevice = "/dev/vdb";
+
# Use a small /dev/vdb as the root disk for the
+
# installer. This ensures the target disk (/dev/vda) is
+
# the same during and after installation.
+
virtualisation.emptyDiskImages = [ 512 ];
+
virtualisation.rootDevice = "/dev/vdb";
-
hardware.enableAllFirmware = mkForce false;
-
nix.package = selectNixPackage pkgs;
+
nix.package = selectNixPackage pkgs;
+
hardware.enableAllFirmware = mkForce false;
-
# The test cannot access the network, so any packages we
-
# need must be included in the VM.
-
system.extraDependencies =
-
with pkgs;
-
[
-
bintools
-
brotli
-
brotli.dev
-
brotli.lib
-
desktop-file-utils
-
docbook5
-
docbook_xsl_ns
-
kbd.dev
-
kmod.dev
-
libarchive.dev
-
libxml2.bin
-
libxslt.bin
-
nixos-artwork.wallpapers.simple-dark-gray-bottom
-
ntp
-
perlPackages.ConfigIniFiles
-
perlPackages.FileSlurp
-
perlPackages.JSON
-
perlPackages.ListCompare
-
perlPackages.XMLLibXML
-
# make-options-doc/default.nix
-
(python3.withPackages (p: [ p.mistune ]))
-
shared-mime-info
-
sudo
-
switch-to-configuration-ng
-
texinfo
-
unionfs-fuse
-
xorg.lndir
-
shellcheck-minimal
-
-
# add curl so that rather than seeing the test attempt to download
-
# curl's tarball, we see what it's trying to download
-
curl
-
]
-
++ optionals (bootLoader == "grub") (
-
let
-
zfsSupport = extraInstallerConfig.boot.supportedFilesystems.zfs or false;
-
in
+
# The test cannot access the network, so any packages we
+
# need must be included in the VM.
+
system.extraDependencies =
+
with pkgs;
[
-
(pkgs.grub2.override { inherit zfsSupport; })
-
(pkgs.grub2_efi.override { inherit zfsSupport; })
-
pkgs.nixos-artwork.wallpapers.simple-dark-gray-bootloader
-
pkgs.perlPackages.FileCopyRecursive
-
pkgs.perlPackages.XMLSAX
-
pkgs.perlPackages.XMLSAXBase
+
bintools
+
brotli
+
brotli.dev
+
brotli.lib
+
desktop-file-utils
+
docbook5
+
docbook_xsl_ns
+
kbd.dev
+
kmod.dev
+
libarchive.dev
+
libxml2.bin
+
libxslt.bin
+
nixos-artwork.wallpapers.simple-dark-gray-bottom
+
ntp
+
perlPackages.ConfigIniFiles
+
perlPackages.FileSlurp
+
perlPackages.JSON
+
perlPackages.ListCompare
+
perlPackages.XMLLibXML
+
# make-options-doc/default.nix
+
(python3.withPackages (p: [ p.mistune ]))
+
shared-mime-info
+
sudo
+
switch-to-configuration-ng
+
texinfo
+
unionfs-fuse
+
xorg.lndir
+
shellcheck-minimal
+
+
# add curl so that rather than seeing the test attempt to download
+
# curl's tarball, we see what it's trying to download
+
curl
+
]
+
++ optionals (bootLoader == "grub") (
+
let
+
zfsSupport = extraInstallerConfig.boot.supportedFilesystems.zfs or false;
+
in
+
[
+
(pkgs.grub2.override { inherit zfsSupport; })
+
(pkgs.grub2_efi.override { inherit zfsSupport; })
+
pkgs.nixos-artwork.wallpapers.simple-dark-gray-bootloader
+
pkgs.perlPackages.FileCopyRecursive
+
pkgs.perlPackages.XMLSAX
+
pkgs.perlPackages.XMLSAXBase
+
]
+
)
+
++ optionals (bootLoader == "systemd-boot") [
+
pkgs.zstd.bin
+
pkgs.mypy
+
config.boot.bootspec.package
]
-
)
-
++ optionals (bootLoader == "systemd-boot") [
-
pkgs.zstd.bin
-
pkgs.mypy
-
pkgs.bootspec
-
]
-
++ optionals clevisTest [ pkgs.klibc ]
-
++ optional systemdStage1 pkgs.chroot-realpath;
+
++ optionals clevisTest [ pkgs.klibc ]
+
++ optional systemdStage1 pkgs.chroot-realpath;
-
nix.settings = {
-
substituters = mkForce [ ];
-
hashed-mirrors = null;
-
connect-timeout = 1;
+
nix.settings = {
+
substituters = mkForce [ ];
+
hashed-mirrors = null;
+
connect-timeout = 1;
+
};
};
-
};
target = {
imports = [ commonConfig ];