forked from NixOS/nixpkgs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request NixOS#153211 from hercules-ci/minimal-nixos
Add minimal NixOS entrypoint
- Loading branch information
Showing
7 changed files
with
114 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
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 | ||
/* | ||
This attribute set appears as lib.nixos in the flake, or can be imported | ||
using a binding like `nixosLib = import (nixpkgs + "/nixos/lib") { }`. | ||
*/ | ||
{ | ||
inherit (seqAttrsIf (!featureFlags?minimalModules) minimalModulesWarning eval-config-minimal) | ||
evalModules | ||
; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
|
||
# DO NOT IMPORT. Use nixpkgsFlake.lib.nixos, or import (nixpkgs + "/nixos/lib") | ||
{ lib }: # read -^ | ||
|
||
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 ? {}, | ||
}: | ||
# NOTE: Regular NixOS currently does use this function! Don't break it! | ||
# Ideally we don't diverge, unless we learn that we should. | ||
# In other words, only the public interface of nixos.evalModules | ||
# is experimental. | ||
lib.evalModules { | ||
inherit prefix modules; | ||
specialArgs = { | ||
modulesPath = builtins.toString ../modules; | ||
} // specialArgs; | ||
}; | ||
|
||
in | ||
{ | ||
inherit evalModules; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -64,6 +64,11 @@ let | |
in | ||
|
||
{ | ||
imports = [ | ||
./assertions.nix | ||
./meta.nix | ||
]; | ||
|
||
options.nixpkgs = { | ||
|
||
pkgs = mkOption { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ evalMinimalConfig, pkgs, lib, stdenv }: | ||
lib.recurseIntoAttrs { | ||
invokeNixpkgsSimple = | ||
(evalMinimalConfig ({ config, modulesPath, ... }: { | ||
imports = [ (modulesPath + "/misc/nixpkgs.nix") ]; | ||
nixpkgs.system = stdenv.hostPlatform.system; | ||
}))._module.args.pkgs.hello; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters