# Generated by npins. Do not modify; will be overwritten regularly let requireFile = { sha256, hashMode ? "recursive" }: builtins.derivation { name = "source"; outputHashMode = hashMode; outputHashAlgo = "sha256"; outputHash = sha256; preferLocalBuild = true; allowSubstitutes = false; builder = "builtins:fetchurl"; system = "builtin"; # builtins.currentSystem; }; data = builtins.fromJSON (builtins.readFile ./sources.json); version = data.version; mkSource = spec: assert spec ? type; let path = if spec.type == "Git" then mkGitSource spec else if spec.type == "GitRelease" then mkGitSource spec else if spec.type == "PyPi" then mkPyPiSource spec else if spec.type == "Channel" then mkChannelSource spec else builtins.throw "Unknown source type ${spec.type}"; in spec // { outPath = path; }; mkGitSource = { repository, revision, url ? null, hash, ... }: assert repository ? type; # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository # In the latter case, there we will always be an url to the tarball if url != null then (builtins.fetchTarball { inherit url; sha256 = hash; # FIXME: check nix version & use SRI hashes }) else assert repository.type == "Git"; let cached = requireFile { sha256 = hash; }; fetched = builtins.fetchGit { url = repository.url; rev = revision; }; in if builtins.pathExists (builtins.unsafeDiscardStringContext cached.outPath) then cached.outPath else builtins.trace "npins: re-fetching source ${repository.url}" fetched.outPath; mkPyPiSource = { url, hash, ... }: builtins.fetchurl { inherit url; sha256 = hash; }; mkChannelSource = { url, hash, ... }: builtins.fetchTarball { inherit url; sha256 = hash; }; in if version == 3 then builtins.mapAttrs (_: mkSource) data.pins else throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"