nixos
pkgs.nixos
Docs pulled from | This Revision | 10 minutes ago
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 attributes in system.build. Alternatively, you may use the result's config and options attributes to query any option.
Inputs
configuration
-
1. Function argument
Examples
nixos
usage example
let
myOS = pkgs.nixos ({ lib, pkgs, config, ... }: {
config.services.nginx = {
enable = true;
# ...
};
# Use config.system.build to exports relevant parts of a
# configuration. The runner attribute should not be
# considered a fully general replacement for systemd
# functionality.
config.system.build.run-nginx = config.systemd.services.nginx.runner;
});
in
myOS.run-nginx
Unlike in plain NixOS, the nixpkgs.config 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.
Noogle detected
Implementation
The following is the current implementation of this function.
nixos =
configuration:
let
c = import (path + "/nixos/lib/eval-config.nix") {
modules = [
(
{ lib, ... }:
{
config.nixpkgs.pkgs = lib.mkDefault pkgs;
config.nixpkgs.localSystem = lib.mkDefault stdenv.hostPlatform;
}
)
] ++ (if builtins.isList configuration then configuration else [ configuration ]);
# The system is inherited from the current pkgs above.
# Set it to null, to remove the "legacy" entrypoint's non-hermetic default.
system = null;
};
in
c.config.system.build // c;