summaryrefslogtreecommitdiff
path: root/pkgs/top-level/impure.nix
blob: 851ab4282902edce29edd50b069966342146ed41 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
  Impure default args for `pkgs/top-level/default.nix`. See that file
  for the meaning of each argument.
*/

let

  homeDir = builtins.getEnv "HOME";

in

{
  # We put legacy `system` into `localSystem`, if `localSystem` was not passed.
  # If neither is passed, assume we are building packages on the current
  # (build, in GNU Autotools parlance) platform.
  localSystem ? {
    system = args.system or builtins.currentSystem;
  },

  # These are needed only because nix's `--arg` command-line logic doesn't work
  # with unnamed parameters allowed by ...
  system ? localSystem.system,
  crossSystem ? localSystem,

  # Fallback: The contents of the configuration file found at $NIXPKGS_CONFIG or
  # $HOME/.config/nixpkgs/config.nix.
  config ?
    let
      configFile = builtins.getEnv "NIXPKGS_CONFIG";
      configFile2 = homeDir + "/.config/nixpkgs/config.nix";
      configFile3 = homeDir + "/.nixpkgs/config.nix"; # obsolete
    in
    if configFile != "" && builtins.pathExists configFile then
      import configFile
    else if homeDir != "" && builtins.pathExists configFile2 then
      import configFile2
    else if homeDir != "" && builtins.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 ? import ./impure-overlays.nix,

  crossOverlays ? [ ],

  ...
}@args:

# If `localSystem` was explicitly passed, legacy `system` should
# not be passed, and vice-versa.
assert args ? localSystem -> !(args ? system);
assert args ? system -> !(args ? localSystem);

import ./. (
  removeAttrs args [ "system" ]
  // {
    inherit config overlays localSystem;
  }
)