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'
- lib.traceValIfNot has been deprecated. Use
- if/then/else and lib.traceValSeq
- instead.
+ The pkgs argument to NixOS modules can now be set directly using nixpkgs.pkgs. Previously, only the system, config and overlays arguments could be used to influence pkgs.
+
+
+
+
+ A NixOS system can now be constructed more easily based on a preexisting invocation of Nixpkgs. For example:
+
+inherit (pkgs.nixos {
+ boot.loader.grub.enable = false;
+ fileSystems."/".device = "/dev/xvda1";
+}) toplevel kernel initialRamdisk manual;
+
+
+ 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.
+
+
+
+
+ lib.traceValIfNot has been deprecated. Use
+ if/then/else and lib.traceValSeq instead.
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 { overlays = [./my-overlay.nix]; }
+ * but not the value of (import {} // { 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 { };