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.
This breaks NixOS, and I don't actually need it, so someone who needs it
can bring this back without breaking NixOS :)
This reverts commit 2742087bdd.
Signed-off-by: Shea Levy <shea@shealevy.com>
This is like types.string, but values are merged by putting a newline
in between them. This is mostly useful for configuration file
options, where we don't want values accidentally ending up on the same
line.
Note that almost all options with string type in NixOS should either
be unmergable (i.e. should be marked with ‘types.uniq’) or should
actually be of type ‘lines’. So it might make sense to remove the
merge function for the ‘string’ type eventually.
- types.nix:
Introduce a new flag named "delayProperties" which define either that
properties should be evaluated (when false) or that they should be delaied
through the type structure.
- properties.nix:
Generalized the delayProperties function to make it work with the iter
functions of option types.
- modules.nix:
Replace evalProperties by a condition based on the value of the
"delayProperties" flag of the option type. If the flag does not exists or
if it is false, then the system behaves as always. Otherwise it delays
the properties from the current value to each values contained inside it.
svn path=/nixpkgs/trunk/; revision=17736