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>
This commit is contained in:
Raito Bezarius 2025-04-24 17:57:05 +02:00
parent 0d7d18dd00
commit 139bfb5b5e
3 changed files with 86 additions and 82 deletions

View File

@ -111,6 +111,8 @@ in
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 }

View File

@ -47,7 +47,7 @@ let
systemd = config.systemd.package;
bootspecTools = pkgs.bootspec;
bootspecTools = config.boot.bootspec.package;
nix = config.nix.package.out;

View File

@ -680,95 +680,97 @@ let
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
]
)
++ optionals (bootLoader == "systemd-boot") [
pkgs.zstd.bin
pkgs.mypy
pkgs.bootspec
]
++ optionals clevisTest [ pkgs.klibc ]
++ optional systemdStage1 pkgs.chroot-realpath;
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
nix.settings = {
substituters = mkForce [ ];
hashed-mirrors = null;
connect-timeout = 1;
# 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 clevisTest [ pkgs.klibc ]
++ optional systemdStage1 pkgs.chroot-realpath;
nix.settings = {
substituters = mkForce [ ];
hashed-mirrors = null;
connect-timeout = 1;
};
};
};
target = {
imports = [ commonConfig ];