nixpkgs/pkgs/top-level/impure.nix
Eelco Dolstra 9d6a55aefd
~/.nixpkgs -> ~/.config/nixpkgs
The former is still respected as a fallback for config.nix for
backwards compatibility (but not for overlays because they're a new
feature).
2017-02-01 16:07:55 +01:00

52 lines
1.8 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 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
, # Fallback: The contents of the configuration file found at $NIXPKGS_CONFIG or
# $HOME/.config/nixpkgs/config.nix.
config ? let
configFile = getEnv "NIXPKGS_CONFIG";
configFile2 = homeDir + "/.config/nixpkgs/config.nix";
configFile3 = homeDir + "/.nixpkgs/config.nix"; # obsolete
in
if configFile != "" && pathExists configFile then import configFile
else if homeDir != "" && pathExists configFile2 then import configFile2
else if homeDir != "" && pathExists configFile3 then import configFile3
else {}
, # Overlays are used to extend Nixpkgs collection with additional
# collections of packages. These collection of packages are part of the
# fix-point made by Nixpkgs.
overlays ? let
dirPath = try (if pathExists <nixpkgs-overlays> then <nixpkgs-overlays> else "") "";
dirHome = homeDir + "/.config/nixpkgs/overlays";
dirCheck = dir: dir != "" && pathExists (dir + "/.");
overlays = dir:
let content = readDir dir; in
map (n: import (dir + ("/" + n)))
(builtins.filter (n: builtins.match ".*\.nix" n != null)
(sort lessThan (attrNames content)));
in
if dirPath != "" then
overlays dirPath
else if dirCheck dirHome then overlays dirHome
else []
, ...
} @ args:
import ./. (args // { inherit system config overlays; })