diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix index 4c00728a9a5..286178a0fa7 100644 --- a/pkgs/lib/modules.nix +++ b/pkgs/lib/modules.nix @@ -11,6 +11,17 @@ with import ./options.nix; with import ./properties.nix; rec { + + # Unfortunately this can also be a string. + isPath = x: !( + builtins.isFunction x + || builtins.isAttrs x + || builtins.isInt x + || builtins.isBool x + || builtins.isList x + ); + + importIfPath = path: if isPath path then import path diff --git a/pkgs/lib/trivial.nix b/pkgs/lib/trivial.nix index b2304ff7a17..8af3474f2a6 100644 --- a/pkgs/lib/trivial.nix +++ b/pkgs/lib/trivial.nix @@ -35,14 +35,4 @@ rec { else if builtins.isAttrs x then deepSeqAttrs x y else seq x y; - - isPath = val: with builtins; !( - isAttrs val - || isList val - || isInt val - || isString val - || isFunction val - || isBool val - || val == null - ); } diff --git a/pkgs/lib/types.nix b/pkgs/lib/types.nix index eac76917c2d..6ddac61d91b 100644 --- a/pkgs/lib/types.nix +++ b/pkgs/lib/types.nix @@ -96,7 +96,8 @@ rec { path = mkOptionType { name = "path"; - check = lib.traceValIfNot isPath; + # Hacky: there is no ‘isPath’ primop. + check = lib.traceValIfNot (x: builtins.unsafeDiscardStringContext (builtins.substring 0 1 (toString x)) == "/"); }; listOf = types.list;