summary refs log tree commit diff
path: root/nixos/lib/default.nix
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2022-01-02 14:11:21 +0100
committerRobert Hensing <robert@roberthensing.nl>2022-01-07 01:21:07 +0100
commitfbd038eca24703d8c5cc3ce28adda3e71c5fabf4 (patch)
tree16c5da2fc1d616d85c8414c81809283ccb06cb30 /nixos/lib/default.nix
parent498f8e26628d0c3efecdc0a36b1101fd3fca907a (diff)
nixos/lib: init (experimental)
Diffstat (limited to 'nixos/lib/default.nix')
-rw-r--r--nixos/lib/default.nix47
1 files changed, 47 insertions, 0 deletions
diff --git a/nixos/lib/default.nix b/nixos/lib/default.nix
new file mode 100644
index 0000000000000..6479b71449070
--- /dev/null
+++ b/nixos/lib/default.nix
@@ -0,0 +1,47 @@
+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, ... }:
+let
+
+  /*
+    Invoke NixOS. Unlike traditional NixOS, this does not include all modules.
+    Any such modules have to be explicitly added via the `modules` parameter,
+    or imported using `imports` in a module.
+
+    A minimal module list improves NixOS evaluation performance and allows
+    modules to be independently usable, supporting new use cases.
+
+    Parameters:
+
+      modules:        A list of modules that constitute the configuration.
+
+      specialArgs:    An attribute set of module arguments. Unlike
+                      `config._module.args`, these are available for use in
+                      `imports`.
+                      `config._module.args` should be preferred when possible.
+
+    Return:
+
+      An attribute set containing `config.system.build.toplevel` among other
+      attributes. See `lib.evalModules` in the Nixpkgs library.
+
+   */
+  evalModules = {
+    prefix ? [],
+    modules ? [],
+    specialArgs ? {},
+  }: lib.evalModules {
+    inherit prefix modules;
+    specialArgs = {
+      modulesPath = builtins.toString ../modules;
+    } // specialArgs;
+  };
+
+in
+{
+  evalModules = builtins.seq experimentalWarning evalModules;
+}