# Generated by npins. Do not modify; will be overwritten regularly let 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, branch ? null, ... }: 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 urlToName = url: rev: let matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url; short = builtins.substring 0 7 rev; appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; in "${if matched == null then "source" else builtins.head matched}${appendShort}"; name = urlToName repository.url revision; in builtins.fetchGit { url = repository.url; rev = revision; inherit name; # hash = hash; }; 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`"