| Commit message (Collapse) | Author | Age |
|
|
|
| |
The change caused lots of evaluation errors, since it caused derivations to no longer be valid paths as well.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This improves error messages when a set or a list is used where a path
was expected. For an example, if you used a package set (as opposed to a
single package) in systemPackages before this commit, the error was:
```
cannot coerce a list to a string, at "/home/nixpkgs/lib/types.nix":103:37
```
Now, the error message reads:
```
The option value `environment.systemPackages' in `/etc/nixos/configuration.nix' is not a list of paths.
```
|
|
|
|
|
|
|
|
| |
For example, this allows writing
nix.package = /nix/store/786mlvhd17xvcp2r4jmmay6jj4wj6b7f-nix-1.10pre4206_896428c;
Also, document types.package in the manual.
|
| |
|
|
|
|
|
|
|
| |
Previously, conflicting definitions would merge to "true". Now they
give an error, e.g.
error: The option `hardware.enableAllFirmware' has conflicting definitions, in `/etc/nixos/configurations/misc/eelco/stuff.nix' and `/etc/nixos/configurations/misc/eelco/mandark.nix'.
|
| |
|
|
|
|
|
|
|
| |
This move idioms which were used in `evalOptionValue` and in the `merge`
functions of `listOf` and `attrsOf` types, such that we can use a names such
as `isDefined` and `optionalValue` instead or repeating identical
comparisons of `defsFinal == []`.
|
|
|
|
|
|
|
| |
Ideally the module system could be configured pretty much completely by
the contents of the modules themselves, so add comments about avoiding
complicating it further and possibly removing now-redundant
configurability from the existing interface.
|
|
|
|
|
| |
This symplifies typechecking and allows properties to be used inside the
function body. It also makes possible checking the type of the result.
|
|
|
|
|
|
|
|
| |
This simplifes typechecking and allows properties to be used inside of
the attribute sets.
This fixes the empty synergy-client and synergy-server services
previously generated on systems with synergy disabled.
|
|
|
|
| |
This simplifies typechecking and allows properties to be used inside the lists
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Now we should be able to have multiple declaration of the same option as
long as all declarations have the same type. If the type has a sub module,
then it is merged with the submodules of other declarations, as done with
option sets.
In addition, the file of the option declaration is passed into the
submodule, such as the documentation can display it correctly.
|
| |
|
| |
|
| |
|
|
|
|
| |
It clashes with builtins.typeOf.
|
|
|
|
| |
there is a name attribute
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit ca1c5cfa8fff055c74786dbe0d2ca889ae462365.
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit 8764758044b0425de54228d87cc68a4ed6d4d414.
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit 3f70dabad320b115d586a59db8cca05c7f3b7c75.
|
|
|
|
|
|
| |
It is parameterized by a function that takes a name and evaluates to the
option type for the attribute of that name. Together with
submoduleWithExtraArgs, this subsumes nixosSubmodule.
|
| |
|
|
|
|
| |
Since NixOS modules expect special arguments, use a hack to provide them
|
|
|
|
| |
Signed-off-by: Shea Levy <shea@shealevy.com>
|
| |
|
|
|
|
|
| |
"with" used to be less lazy, so don't rely on that. Also don't use
the "<" operator.
|
|
|
|
| |
And fix various instances of bad arguments.
|
|
|
|
|
|
|
|
| |
E.g.
The unique option `fileSystems./.device' is defined multiple times, in `/etc/nixos/configuration.nix' and `/etc/nixos/foo.nix'.
This requires passing file/value tuples to the merge functions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
An annoying and dangerous property of "types.string" is that it merges
multiple definitions by concatenating them, which almost never
produces a sensible result. (Those options for which it does make
sense typically should use "types.lines" instead, and things only work
because the option definitions already end in a newline.) Of course,
you can use "types.uniq types.string", but that's rather verbose, and
inconsistent with other basic types like "types.int".
Changing the behaviour of "types.string" to be unique by default is
not an option, given the large number of options that use it. So
instead, we now have "types.str", which is equivalent to "types.uniq
types.string".
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For instance, if time.timeZone is defined multiple times, you now get
the error message:
error: user-thrown exception: The unique option `time.timeZone' is defined multiple times, in `/etc/nixos/configurations/misc/eelco/x11vnc.nix' and `/etc/nixos/configuration.nix'.
while previously you got:
error: user-thrown exception: Multiple definitions of string. Only one is allowed for this option.
and only an inspection of the stack trace gave a clue as to what
option caused the problem.
|
|
|
|
|
| |
It's redundant because you can (and should) specify an option type, or
an apply function.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|