diff --git a/doc/overlays.xml b/doc/overlays.xml
index cb54c33cf65..540c83e0a39 100644
--- a/doc/overlays.xml
+++ b/doc/overlays.xml
@@ -28,8 +28,8 @@ first one present is considered, and all the rest are ignored:
- In the directory pointed by the environment variable
- NIXPKGS_OVERLAYS.
+ In the directory pointed to by the Nix search path entry
+ <nixpkgs-overlays>.
diff --git a/pkgs/top-level/impure.nix b/pkgs/top-level/impure.nix
index d8201a3569f..d1a28b9b15e 100644
--- a/pkgs/top-level/impure.nix
+++ b/pkgs/top-level/impure.nix
@@ -1,6 +1,17 @@
/* Impure default args for `pkgs/top-level/default.nix`. See that file
for the meaning of each argument. */
+with builtins;
+
+let
+
+ homeDir = builtins.getEnv "HOME";
+
+ # Return ‘x’ if it evaluates, or ‘def’ if it throws an exception.
+ try = x: def: let res = tryEval x; in if res.success then res.value else def;
+
+in
+
{ # Fallback: Assume we are building packages for the current (host, in GNU
# Autotools parlance) system.
system ? builtins.currentSystem
@@ -8,10 +19,7 @@
, # Fallback: The contents of the configuration file found at $NIXPKGS_CONFIG or
# $HOME/.nixpkgs/config.nix.
config ? let
- inherit (builtins) getEnv pathExists;
-
configFile = getEnv "NIXPKGS_CONFIG";
- homeDir = getEnv "HOME";
configFile2 = homeDir + "/.nixpkgs/config.nix";
in
if configFile != "" && pathExists configFile then import configFile
@@ -22,20 +30,17 @@
# collections of packages. These collection of packages are part of the
# fix-point made by Nixpkgs.
overlays ? let
- inherit (builtins) getEnv pathExists readDir attrNames map sort
- lessThan;
- dirEnv = getEnv "NIXPKGS_OVERLAYS";
- dirHome = (getEnv "HOME") + "/.nixpkgs/overlays";
+ dirPath = try (if pathExists then else "") "";
+ dirHome = homeDir + "/.nixpkgs/overlays";
dirCheck = dir: dir != "" && pathExists (dir + "/.");
overlays = dir:
let content = readDir dir; in
- map (n: import "${dir}/${n}")
+ map (n: import (dir + ("/" + n)))
(builtins.filter (n: builtins.match ".*\.nix" n != null)
(sort lessThan (attrNames content)));
in
- if dirEnv != "" then
- if dirCheck dirEnv then overlays dirEnv
- else throw "The environment variable NIXPKGS_OVERLAYS does not name a valid directory."
+ if dirPath != "" then
+ overlays dirPath
else if dirCheck dirHome then overlays dirHome
else []