summary refs log tree commit diff
path: root/nixos/modules/misc/nixos.nix
blob: 356129211d0652fe09210bb03c54c7a525ccf319 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{ config, options, lib, ... }:

# This modules is used to inject a different NixOS version as well as its
# argument such that one can pin a specific version with the versionning
# system of the configuration.
let
  nixosReentry = import config.nixos.path {
    inherit (config.nixos) configuration extraModules;
    inherit (config.nixpkgs) system;
    reEnter = true;
  };
in

with lib;

{
  options = {
    nixos.path = mkOption {
      default = null;
      example = literalExample "./nixpkgs-15.09/nixos";
      type = types.nullOr types.path;
      description = ''
        This option give the ability to evaluate the current set of modules
        with a different version of NixOS. This option can be used version
        the version of NixOS with the configuration without relying on the
        <literal>NIX_PATH</literal> environment variable.
      '';
    };

    nixos.system = mkOption {
      example = "i686-linux";
      type = types.uniq types.str;
      description = ''
        Name of the system used to compile NixOS.
      '';
    };

    nixos.extraModules = mkOption {
      default = [];
      example = literalExample "mkIf config.services.openssh.enable [ ./sshd-config.nix ]";
      type = types.listOf types.unspecified;
      description = ''
        Define additional modules which would be loaded to evaluate the
        configuration.
      '';
    };

    nixos.configuration = mkOption {
      type = types.unspecified;
      internal = true;
      description = ''
        Option used by <filename>nixos/default.nix</filename> to re-inject
        the same configuration module as the one used for the current
        execution.
      '';
    };

    nixos.reflect = mkOption {
      default = { inherit config options; };
      type = types.unspecified;
      internal = true;
      description = ''
        Provides <literal>config</literal> and <literal>options</literal>
        computed by the module system and given as argument to all
        modules. These are used for introspection of options and
        configuration by tools such as <literal>nixos-option</literal>.
      '';
    };
  };

  config = mkMerge [
    (mkIf (config.nixos.path != null) (mkForce {
      system.build.toplevel = nixosReentry.system;
      system.build.vm = nixosReentry.vm;
      nixos.reflect = { inherit (nixosReentry) config options; };
    }))

    { meta.maintainers = singleton lib.maintainers.pierron;
      meta.doc = ./nixos.xml;
    }
  ];
}