Merge pull request #32422 from roberth/nixos-evaluate

Add pkgs.nixos function
This commit is contained in:
Matthew Justin Bauer 2018-06-10 11:11:34 -04:00 committed by GitHub
commit 45c463d6f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 3 deletions

View File

@ -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>

View File

@ -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 { };