nixos/specialisation: Rephrase in terms of extendModules, noUserModules
By using the new extendModules function to produce the specialisations, we avoid reimplementing the eval-config.nix logic in reverse and fix cross compilation support for specialisations in the process.
This commit is contained in:
parent
6d7a5212c5
commit
b5681a7a40
@ -51,23 +51,28 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
in rec {
|
||||
|
||||
# Merge the option definitions in all modules, forming the full
|
||||
# system configuration.
|
||||
inherit (lib.evalModules {
|
||||
noUserModules = lib.evalModules {
|
||||
inherit prefix check;
|
||||
modules = baseModules ++ extraModules ++ [ pkgsModule ] ++ modules;
|
||||
modules = baseModules ++ extraModules ++ [ pkgsModule ];
|
||||
args = extraArgs;
|
||||
specialArgs =
|
||||
{ modulesPath = builtins.toString ../modules; } // specialArgs;
|
||||
}) config options _module type;
|
||||
};
|
||||
|
||||
# These are the extra arguments passed to every module. In
|
||||
# particular, Nixpkgs is passed through the "pkgs" argument.
|
||||
extraArgs = extraArgs_ // {
|
||||
inherit baseModules extraModules modules;
|
||||
inherit noUserModules baseModules extraModules modules;
|
||||
};
|
||||
|
||||
in rec {
|
||||
|
||||
# Merge the option definitions in all modules, forming the full
|
||||
# system configuration.
|
||||
inherit (noUserModules.extendModules { inherit modules; })
|
||||
config options _module type;
|
||||
|
||||
inherit extraArgs;
|
||||
|
||||
inherit (_module.args) pkgs;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, modules, baseModules, specialArgs, ... }:
|
||||
{ config, lib, pkgs, extendModules, noUserModules, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -11,16 +11,10 @@ let
|
||||
# you can provide an easy way to boot the same configuration
|
||||
# as you use, but with another kernel
|
||||
# !!! fix this
|
||||
children = mapAttrs (childName: childConfig:
|
||||
(import ../../../lib/eval-config.nix {
|
||||
inherit lib baseModules specialArgs;
|
||||
system = config.nixpkgs.initialSystem;
|
||||
modules =
|
||||
(optionals childConfig.inheritParentConfig modules)
|
||||
++ [ ./no-clone.nix ]
|
||||
++ [ childConfig.configuration ];
|
||||
}).config.system.build.toplevel
|
||||
) config.specialisation;
|
||||
children =
|
||||
mapAttrs
|
||||
(childName: childConfig: childConfig.configuration.system.build.toplevel)
|
||||
config.specialisation;
|
||||
|
||||
systemBuilder =
|
||||
let
|
||||
@ -176,7 +170,11 @@ in
|
||||
</screen>
|
||||
'';
|
||||
type = types.attrsOf (types.submodule (
|
||||
{ ... }: {
|
||||
local@{ ... }: let
|
||||
extend = if local.config.inheritParentConfig
|
||||
then extendModules
|
||||
else noUserModules.extendModules;
|
||||
in {
|
||||
options.inheritParentConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
@ -185,7 +183,15 @@ in
|
||||
|
||||
options.configuration = mkOption {
|
||||
default = {};
|
||||
description = "Arbitrary NixOS configuration options.";
|
||||
description = ''
|
||||
Arbitrary NixOS configuration.
|
||||
|
||||
Anything you can add to a normal NixOS configuration, you can add
|
||||
here, including imports and config values, although nested
|
||||
specialisations will be ignored.
|
||||
'';
|
||||
visible = "shallow";
|
||||
inherit (extend { modules = [ ./no-clone.nix ]; }) type;
|
||||
};
|
||||
})
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user