nixos/lib: Add featureFlags, use it for minimal modules

This commit is contained in:
Robert Hensing 2022-01-07 01:09:46 +01:00
parent 25caf736d5
commit d3f956aba3
3 changed files with 32 additions and 11 deletions

View File

@ -1,5 +1,25 @@
{ lib ? import ../../lib, ... }:
let
# The warning is in a top-level let binding so it is only printed once.
minimalModulesWarning = warn "lib.nixos.evalModules is experimental and subject to change. See nixos/lib/default.nix" null;
inherit (nonExtendedLib) warn;
nonExtendedLib = import ../../lib;
in
{ # Optional. Allows an extended `lib` to be used instead of the regular Nixpkgs lib.
lib ? nonExtendedLib,
# Feature flags allow you to opt in to unfinished code. These may change some
# behavior or disable warnings.
featureFlags ? {},
# This file itself is rather new, so we accept unknown parameters to be forward
# compatible. This is generally not recommended, because typos go undetected.
...
}:
let
seqIf = cond: if cond then builtins.seq else a: b: b;
# If cond, force `a` before returning any attr
seqAttrsIf = cond: a: lib.mapAttrs (_: v: seqIf cond a v);
eval-config-minimal = import ./eval-config-minimal.nix { inherit lib; };
in
/*
@ -7,7 +27,7 @@ in
using a binding like `nixosLib = import (nixpkgs + "/nixos/lib") { }`.
*/
{
inherit (eval-config-minimal)
inherit (seqAttrsIf (!featureFlags?minimalModules) minimalModulesWarning eval-config-minimal)
evalModules
;
}

View File

@ -1,10 +1,7 @@
let
# The warning is in a top-level let binding so it is only printed once.
experimentalWarning = warn "lib.nixos.evalModules is experimental and subject to change. See nixos/lib/default.nix" null;
inherit (nonExtendedLib) warn;
nonExtendedLib = import ../../lib;
in
{ lib ? nonExtendedLib, bypassEvalModulesWarning ? false, ... }:
# DO NOT IMPORT. Use nixpkgsFlake.lib.nixos, or import (nixpkgs + "/nixos/lib")
{ lib }: # read -^
let
/*
@ -43,5 +40,5 @@ let
in
{
evalModules = builtins.seq (if bypassEvalModulesWarning then null else experimentalWarning) evalModules;
inherit evalModules;
}

View File

@ -20,7 +20,11 @@ let
if elem system systems then handleTest path args
else {};
nixosLib = import ../lib {};
nixosLib = import ../lib {
# Experimental features need testing too, but there's no point in warning
# about it, so we enable the feature flag.
featureFlags.minimalModules = {};
};
evalMinimalConfig = module: nixosLib.evalModules { modules = [ module ]; };
in
{