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
# This file imports the pinned nixpkgs set and applies relevant
# modifications, such as our overlays.
#
# The actual source pinning happens in //flake.nix (and //flake.lock),
# which is the single source of truth for the nixpkgs revision. It is
# threaded through //default.nix as `nixpkgsSrc`.
#
# Note that the attribute exposed by this (third_party.nixpkgs) is
# "special": //default.nix passes it as the `pkgs` argument to every
# package in the tree.

{ depot ? { }
, externalArgs ? { }
, depotOverlays ? true
, localSystem ? externalArgs.localSystem or builtins.currentSystem
, crossSystem ? externalArgs.crossSystem or localSystem
, nixpkgsSrc
  # additional overlays to be applied.
  # Useful when calling this file in a view exported from depot.
, additionalOverlays ? [ ]
, ...
}:

let
  # Arguments passed to both the stable nixpkgs and the main, unstable one.
  # Includes everything but overlays which are only passed to unstable nixpkgs.
  commonNixpkgsArgs = {
    # allow users to inject their config into builds (e.g. to test CA derivations)
    config =
      (if externalArgs ? nixpkgsConfig then externalArgs.nixpkgsConfig else { })
      // {
        allowUnfree = true;
        allowUnfreeRedistributable = true;
        allowBroken = true;
        # Forbids our meta.ci attribute
        # https://github.com/NixOS/nixpkgs/pull/191171#issuecomment-1260650771
        checkMeta = false;
        permittedInsecurePackages = [
          # TODO(tazjin): https://github.com/tvlfyi/nix/pull/5
          "nix-2.3.18-4f415e6"
        ];
      };

    inherit localSystem crossSystem;
  };

  # The nixpkgs source, or optionally the source (e.g. a path) specified by
  # the `nixpkgsBisectPath` argument. The latter is intended for use-cases
  # where the depot is bisected against nixpkgs to find the root cause of an
  # issue in a channel bump.
  nixpkgsSrc' = externalArgs.nixpkgsBisectPath or nixpkgsSrc;
in
import nixpkgsSrc' (commonNixpkgsArgs // {
  overlays = (if depotOverlays then [
    depot.third_party.overlays.haskell
  ] else [ ]) ++ additionalOverlays;
})