mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
nixos/activation/bootspec: init bootspec support (RFC-0125)
This commit is contained in:
parent
0b8b0c65cc
commit
942dcd238b
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@ -78,6 +78,7 @@
|
||||
/nixos/doc/manual/man-nixos-option.xml @nbp
|
||||
/nixos/modules/installer/tools/nixos-option.sh @nbp
|
||||
/nixos/modules/system @dasJ
|
||||
/nixos/modules/system/activation/bootspec.nix @grahamc @cole-h
|
||||
|
||||
# NixOS integration test driver
|
||||
/nixos/lib/test-driver @tfc
|
||||
|
50
nixos/modules/system/activation/bootspec.nix
Normal file
50
nixos/modules/system/activation/bootspec.nix
Normal file
@ -0,0 +1,50 @@
|
||||
# Note that these schemas are defined by RFC-0125.
|
||||
# This document is considered a stable API, and is depended upon by external tooling.
|
||||
# Changes to the structure of the document, or the semantics of the values should go through an RFC.
|
||||
#
|
||||
# See: https://github.com/NixOS/rfcs/pull/125
|
||||
{ config, pkgs, lib, children }:
|
||||
let
|
||||
schemas = {
|
||||
v1 = rec {
|
||||
filename = "boot.v1.json";
|
||||
json =
|
||||
pkgs.writeText filename
|
||||
(builtins.toJSON
|
||||
{
|
||||
schemaVersion = 1;
|
||||
|
||||
kernel = "${config.boot.kernelPackages.kernel}/${config.system.boot.loader.kernelFile}";
|
||||
kernelParams = config.boot.kernelParams;
|
||||
initrd = "${config.system.build.initialRamdisk}/${config.system.boot.loader.initrdFile}";
|
||||
initrdSecrets = "${config.system.build.initialRamdiskSecretAppender}/bin/append-initrd-secrets";
|
||||
label = "NixOS ${config.system.nixos.codeName} ${config.system.nixos.label} (Linux ${config.boot.kernelPackages.kernel.modDirVersion})";
|
||||
|
||||
specialisation = lib.mapAttrs
|
||||
(childName: childToplevel: {
|
||||
bootspec = "${childToplevel}/${filename}";
|
||||
})
|
||||
children;
|
||||
});
|
||||
|
||||
generator = ''
|
||||
${pkgs.jq}/bin/jq '
|
||||
.toplevel = $toplevel |
|
||||
.init = $init
|
||||
' \
|
||||
--sort-keys \
|
||||
--arg toplevel "$out" \
|
||||
--arg init "$out/init" \
|
||||
< ${json} \
|
||||
> $out/${filename}
|
||||
'';
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
# This will be run as a part of the `systemBuilder` in ./top-level.nix. This
|
||||
# means `$out` points to the output of `config.system.build.toplevel` and can
|
||||
# be used for a variety of things (though, for now, it's only used to report
|
||||
# the path of the `toplevel` itself and the `init` executable).
|
||||
writer = schemas.v1.generator;
|
||||
}
|
@ -9,6 +9,14 @@ let
|
||||
"${config.system.boot.loader.kernelFile}";
|
||||
initrdPath = "${config.system.build.initialRamdisk}/" +
|
||||
"${config.system.boot.loader.initrdFile}";
|
||||
|
||||
bootSpec = import ./bootspec.nix {
|
||||
inherit
|
||||
config
|
||||
pkgs
|
||||
lib
|
||||
children;
|
||||
};
|
||||
in ''
|
||||
mkdir $out
|
||||
|
||||
@ -79,6 +87,8 @@ let
|
||||
|
||||
echo -n "${toString config.system.extraDependencies}" > $out/extra-dependencies
|
||||
|
||||
${bootSpec.writer}
|
||||
|
||||
${config.system.extraSystemBuilderCmds}
|
||||
'';
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user