diff options
author | Matthew Justin Bauer <mjbauer95@gmail.com> | 2018-06-10 11:11:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-10 11:11:34 -0400 |
commit | 45c463d6f47c79d3ab2e67d005aae0a6e3634b3d (patch) | |
tree | 369a9e278c743c632c87104ebdd038eabdeceaea | |
parent | 70050dbc48d61364248f8d453bd1408435f76c81 (diff) | |
parent | 7996889cf0cb8d339893d2b880d565a099c4df35 (diff) | |
download | nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar.gz nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar.bz2 nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar.lz nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar.xz nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.tar.zst nixlib-45c463d6f47c79d3ab2e67d005aae0a6e3634b3d.zip |
Merge pull request #32422 from roberth/nixos-evaluate
Add pkgs.nixos function
-rw-r--r-- | nixos/doc/manual/release-notes/rl-1809.xml | 23 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 46 |
2 files changed, 66 insertions, 3 deletions
diff --git a/nixos/doc/manual/release-notes/rl-1809.xml b/nixos/doc/manual/release-notes/rl-1809.xml index 5799354c6e99..72f96f1ca1a2 100644 --- a/nixos/doc/manual/release-notes/rl-1809.xml +++ b/nixos/doc/manual/release-notes/rl-1809.xml @@ -178,9 +178,26 @@ $ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull' </listitem> <listitem> <para> - <literal>lib.traceValIfNot</literal> has been deprecated. Use - <literal>if/then/else</literal> and <literal>lib.traceValSeq</literal> - instead. + The <literal>pkgs</literal> argument to NixOS modules can now be set directly using <literal>nixpkgs.pkgs</literal>. Previously, only the <literal>system</literal>, <literal>config</literal> and <literal>overlays</literal> arguments could be used to influence <literal>pkgs</literal>. + </para> + </listitem> + <listitem> + <para> + A NixOS system can now be constructed more easily based on a preexisting invocation of Nixpkgs. For example: + <programlisting> +inherit (pkgs.nixos { + boot.loader.grub.enable = false; + fileSystems."/".device = "/dev/xvda1"; +}) toplevel kernel initialRamdisk manual; + </programlisting> + + This benefits evaluation performance, lets you write Nixpkgs packages that depend on NixOS images and is consistent with a deployment architecture that would be centered around Nixpkgs overlays. + </para> + </listitem> + <listitem> + <para> + <literal>lib.traceValIfNot</literal> has been deprecated. Use + <literal>if/then/else</literal> and <literal>lib.traceValSeq</literal> instead. </para> </listitem> <listitem> diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bc48df43f404..960bff421dae 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20935,6 +20935,52 @@ with pkgs; nixops-dns = callPackage ../tools/package-management/nixops/nixops-dns.nix { }; + /* + * Evaluate a NixOS configuration using this evaluation of Nixpkgs. + * + * With this function you can write, for example, a package that + * depends on a custom virtual machine image. + * + * Parameter: A module, path or list of those that represent the + * configuration of the NixOS system to be constructed. + * + * Result: An attribute set containing packages produced by this + * evaluation of NixOS, such as toplevel, kernel and + * initialRamdisk. + * The result can be extended in the modules by defining + * extra options in system.build. + * + * Unlike in plain NixOS, the nixpkgs.config, nixpkgs.overlays and + * nixpkgs.system options will be ignored by default. Instead, + * nixpkgs.pkgs will have the default value of pkgs as it was + * constructed right after invoking the nixpkgs function (e.g. the + * value of import <nixpkgs> { overlays = [./my-overlay.nix]; } + * but not the value of (import <nixpkgs> {} // { extra = ...; }). + * + * If you do want to use the config.nixpkgs options, you are + * probably better off by calling nixos/lib/eval-config.nix + * directly, even though it is possible to set config.nixpkgs.pkgs. + * + * For more information about writing NixOS modules, see + * https://nixos.org/nixos/manual/index.html#sec-writing-modules + * + * Note that you will need to have called Nixpkgs with the system + * parameter set to the right value for your deployment target. + */ + nixos = configuration: + (import (self.path + "/nixos/lib/eval-config.nix") { + inherit (pkgs) system; + modules = [( + { lib, ... }: { + config.nixpkgs.pkgs = lib.mkDefault pkgs; + } + )] ++ ( + if builtins.isList configuration + then configuration + else [configuration] + ); + }).config.system.build; + nixui = callPackage ../tools/package-management/nixui { node_webkit = nwjs_0_12; }; nix-bundle = callPackage ../tools/package-management/nix-bundle { }; |