query
On this page

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;