From 691f683c8c3e5423bfe39e3c12f5a325130ec014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benno=20F=C3=BCnfst=C3=BCck?= Date: Mon, 9 Feb 2015 21:49:01 +0100 Subject: [PATCH] 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. ``` --- lib/types.nix | 3 ++- nixos/modules/config/system-path.nix | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/types.nix b/lib/types.nix index a7f9bf1946e6..27b653ebb6c7 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -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; }; diff --git a/nixos/modules/config/system-path.nix b/nixos/modules/config/system-path.nix index 62390f452ba2..d7979593f404 100644 --- a/nixos/modules/config/system-path.nix +++ b/nixos/modules/config/system-path.nix @@ -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 = ''