nixpkgs: add nixos function
This commit is contained in:
parent
f56d484225
commit
1441806c27
2 changed files with 60 additions and 0 deletions
|
@ -77,6 +77,20 @@ following incompatible changes:</para>
|
|||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
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>
|
||||
</itemizedlist>
|
||||
|
|
|
@ -20690,6 +20690,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 { };
|
||||
|
|
Loading…
Reference in a new issue