let sources = import ./Sources.nix { sourcesFile = ./Sources.json; }; config = { allowBroken = true; allowUnfree = true; cudaSupport = true; }; system = __currentSystem; in import sources.nixpkgs-stable { inherit system config; overlays = [ (_: _: { inherit sources; }) (_: _: { unstable = import sources.nixpkgs-unstable { inherit system config; };}) (_: pkgs: { # Given a generic `builder`, will generate an attrset for all the packages # pinned by `deps` with `builder` applied to the package. This attrset can # then be merged with the rest of the packages in the set as part of an # overlay or overrides. overridePinnedDeps = builder: pkgs.lib.genAttrs (builtins.attrNames pkgs.sources) builder; }) (_: pkgs: { # Modifies a derivation with our source and version, keeping old build # rules. This will fail if build steps have changed, or if no build # rules are available upstream. overrideSource = depName: pkgs.${depName}.overrideAttrs (old: old // rec { version = pkgs.sources.${depName}.version or pkgs.sources.${depName}.rev; src = pkgs.sources.${depName}; }); }) (_: pkgs: # override pinned deps with our sources pkgs.overridePinnedDeps pkgs.overrideSource) (import ./Deps.nix) (_: pkgs: { niv = import pkgs.sources.niv {}; }) ]; }