types.nix: better error message for non-paths

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.
```
This commit is contained in:
Benno Fünfstück 2015-02-09 21:49:01 +01:00
parent fd53387bba
commit 691f683c8c
2 changed files with 3 additions and 2 deletions

View file

@ -103,7 +103,8 @@ rec {
path = mkOptionType {
name = "path";
# Hacky: there is no isPath primop.
check = x: builtins.substring 0 1 (toString x) == "/";
# need to check isString first because otherwise toString throws an error.
check = x: builtins.isString x && builtins.substring 0 1 (toString x) == "/";
merge = mergeOneOption;
};

View file

@ -57,7 +57,7 @@ in
environment = {
systemPackages = mkOption {
type = types.listOf types.path;
type = types.listOf types.package;
default = [];
example = literalExample "[ pkgs.firefox pkgs.thunderbird ]";
description = ''