mirror of
https://github.com/nix-community/nixos-generators.git
synced 2024-11-22 10:05:06 +03:00
No lib.mkForce in system.build.kexec_tarball def'n
on nixpkgs versions prior to the commit that changed config.system.build's type from a lazy attribute set to a submodule. Prior to this type change, there is no system.build.kexec_tarball option declared, so the NixOS module system does not resolve priorities/overrides in the config.build.kexec_tarball definition. That is, with lib.mkForce, the config.build.kexec_tarball definition ends up being something like: { _type = "override"; content = <...>; priority = 50; } Removing lib.mkForce allows us to successfully and sensibly interpolate the value (== outPath) of system.build.kexec_tarball in system.build.kexec_bundle's builder script. Likewise, no lib.mkOverride for system.build.raw.
This commit is contained in:
parent
fb3ee0f618
commit
b34a6ac4e6
2
Makefile
2
Makefile
@ -3,7 +3,7 @@ SHARE ?= $(PREFIX)/share/nixos-generator
|
|||||||
|
|
||||||
all:
|
all:
|
||||||
|
|
||||||
SOURCES = formats format-module.nix configuration.nix nixos-generate.nix
|
SOURCES = formats format-module.nix configuration.nix lib.nix nixos-generate.nix
|
||||||
|
|
||||||
install:
|
install:
|
||||||
mkdir -p $(PREFIX)/bin $(SHARE)
|
mkdir -p $(PREFIX)/bin $(SHARE)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
{ config, pkgs, lib, modulesPath, ... }: let
|
{ config, pkgs, lib, modulesPath, options, ... }: let
|
||||||
|
|
||||||
clever-tests = builtins.fetchGit {
|
clever-tests = builtins.fetchGit {
|
||||||
url = "https://github.com/cleverca22/nix-tests";
|
url = "https://github.com/cleverca22/nix-tests";
|
||||||
rev = "a9a316ad89bfd791df4953c1a8b4e8ed77995a18"; # master on 2021-06-13
|
rev = "a9a316ad89bfd791df4953c1a8b4e8ed77995a18"; # master on 2021-06-13
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inherit (import ../lib.nix { inherit lib options; }) maybe;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
"${toString modulesPath}/installer/netboot/netboot-minimal.nix"
|
"${toString modulesPath}/installer/netboot/netboot-minimal.nix"
|
||||||
@ -13,7 +15,7 @@ in {
|
|||||||
];
|
];
|
||||||
|
|
||||||
system.build = rec {
|
system.build = rec {
|
||||||
kexec_tarball = lib.mkForce (pkgs.callPackage "${toString modulesPath}/../lib/make-system-tarball.nix" {
|
kexec_tarball = maybe.mkForce (pkgs.callPackage "${toString modulesPath}/../lib/make-system-tarball.nix" {
|
||||||
storeContents = [
|
storeContents = [
|
||||||
{ object = config.system.build.kexec_script; symlink = "/kexec_nixos"; }
|
{ object = config.system.build.kexec_script; symlink = "/kexec_nixos"; }
|
||||||
];
|
];
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
{ config, lib, pkgs, modulesPath, ... }:
|
{ config, lib, options, pkgs, modulesPath, ... }:
|
||||||
{
|
|
||||||
|
let
|
||||||
|
inherit (import ../lib.nix { inherit lib options; }) maybe;
|
||||||
|
in {
|
||||||
imports = [ ./raw.nix ];
|
imports = [ ./raw.nix ];
|
||||||
|
|
||||||
boot.loader.grub = {
|
boot.loader.grub = {
|
||||||
@ -13,7 +16,7 @@
|
|||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
system.build.raw = lib.mkOverride 99 (import "${toString modulesPath}/../lib/make-disk-image.nix" {
|
system.build.raw = maybe.mkOverride 99 (import "${toString modulesPath}/../lib/make-disk-image.nix" {
|
||||||
inherit lib config pkgs;
|
inherit lib config pkgs;
|
||||||
partitionTableType = "efi";
|
partitionTableType = "efi";
|
||||||
diskSize = "auto";
|
diskSize = "auto";
|
||||||
|
32
lib.nix
Normal file
32
lib.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
}: let
|
||||||
|
# See https://github.com/NixOS/nixpkgs/commit/ccb85a53b6a496984073227fd8c4d4c58889f421
|
||||||
|
# This commit changed the type of `system.build` from a lazy attribute set to
|
||||||
|
# a submodule. Prior to this commit, it doesn't make sense to qualify, e.g.
|
||||||
|
# the `system.build.kexec_tarball` definition with `lib.mkForce`, as this
|
||||||
|
# would result in setting the (final/resolved) value of
|
||||||
|
# `system.build.kexec_tarball` to something like:
|
||||||
|
# {
|
||||||
|
# _type = "override";
|
||||||
|
# content = <...>;
|
||||||
|
# priority = 50;
|
||||||
|
# }
|
||||||
|
# However, since this commit, `system.build.kexec_tarball` *must* be defined
|
||||||
|
# using `lib.mkForce`; otherwise, Nix bails out with a complaint about
|
||||||
|
# `system.build.kexec_tarball` being defined in multiple locations.
|
||||||
|
systemBuildIsSubmodule = options.system.build.type.name == "submodule";
|
||||||
|
|
||||||
|
optionsLookSane = lib.hasAttrByPath ["system" "build" "type" "name"] options;
|
||||||
|
in
|
||||||
|
assert (lib.assertMsg optionsLookSane "`options' must be the NixOS module `options' argument"); {
|
||||||
|
maybe =
|
||||||
|
{
|
||||||
|
mkForce = lib.id;
|
||||||
|
mkOverride = _: lib.id;
|
||||||
|
}
|
||||||
|
// (lib.optionalAttrs systemBuildIsSubmodule {
|
||||||
|
inherit (lib) mkForce mkOverride;
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user