From b5681a7a4096b81101626a0853c28bede0495490 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 1 Nov 2021 10:59:47 +0100 Subject: 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. --- nixos/modules/system/activation/top-level.nix | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'nixos/modules/system/activation/top-level.nix') diff --git a/nixos/modules/system/activation/top-level.nix b/nixos/modules/system/activation/top-level.nix index 68da910d29c..8266622e78d 100644 --- a/nixos/modules/system/activation/top-level.nix +++ b/nixos/modules/system/activation/top-level.nix @@ -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 ''; 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; }; }) ); -- cgit 1.4.1