summary refs log tree commit diff
path: root/lib/default.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-28 00:56:22 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-28 22:45:55 +0100
commit0e333688cea468a28516bf6935648c03ed62a7bb (patch)
tree06657556c1e80363a51010d546cac68b98fde90a /lib/default.nix
parentf4dadc5df8561405df9aabf4fa2c2dcd13234b22 (diff)
downloadnixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar.gz
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar.bz2
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar.lz
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar.xz
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.tar.zst
nixpkgs-0e333688cea468a28516bf6935648c03ed62a7bb.zip
Big cleanup of the NixOS module system
The major changes are:

* The evaluation is now driven by the declared options.  In
  particular, this fixes the long-standing problem with lack of
  laziness of disabled option definitions.  Thus, a configuration like

    config = mkIf false {
      environment.systemPackages = throw "bla";
    };

  will now evaluate without throwing an error.  This also improves
  performance since we're not evaluating unused option definitions.

* The implementation of properties is greatly simplified.

* There is a new type constructor "submodule" that replaces
  "optionSet".  Unlike "optionSet", "submodule" gets its option
  declarations as an argument, making it more like "listOf" and other
  type constructors.  A typical use is:

    foo = mkOption {
      type = type.attrsOf (type.submodule (
        { config, ... }:
        { bar = mkOption { ... };
          xyzzy = mkOption { ... };
        }));
    };

  Existing uses of "optionSet" are automatically mapped to
  "submodule".

* Modules are now checked for unsupported attributes: you get an error
  if a module contains an attribute other than "config", "options" or
  "imports".

* The new implementation is faster and uses much less memory.
Diffstat (limited to 'lib/default.nix')
-rw-r--r--lib/default.nix5
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/default.nix b/lib/default.nix
index 033269e6b60..fc92e04503b 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -8,7 +8,6 @@ let
   sources = import ./sources.nix;
   modules = import ./modules.nix;
   options = import ./options.nix;
-  properties = import ./properties.nix;
   types = import ./types.nix;
   meta = import ./meta.nix;
   debug = import ./debug.nix;
@@ -21,13 +20,13 @@ let
 
 in
   { inherit trivial lists strings stringsWithDeps attrsets sources options
-      properties modules types meta debug maintainers licenses platforms systems;
+      modules types meta debug maintainers licenses platforms systems;
     # Pull in some builtins not included elsewhere.
     inherit (builtins) pathExists readFile;
   }
   # !!! don't include everything at top-level; perhaps only the most
   # commonly used functions.
   // trivial // lists // strings // stringsWithDeps // attrsets // sources
-  // properties // options // types // meta // debug // misc // modules
+  // options // types // meta // debug // misc // modules
   // systems
   // customisation