biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / tools / nix / npins / source.nix
blob49046d8dd3c67885daf806ad4a87635048468158
1 # Not part of the public API – for use within nixpkgs only
3 # Usage:
4 # ```nix
5 # let
6 #   sources = lib.importJSON ./sources.json;
7 # in mkMyDerivation rec {
8 #   version = src.version; # This obviously only works for releases
9 #   src = pkgs.npins.mkSource sources.mySource;
10 # }
11 # ```
13 { fetchgit
14 , fetchzip
15 , fetchurl
17 let
18   mkSource = spec:
19     assert spec ? type; let
20       path =
21         if spec.type == "Git" then mkGitSource spec
22         else if spec.type == "GitRelease" then mkGitSource spec
23         else if spec.type == "PyPi" then mkPyPiSource spec
24         else if spec.type == "Channel" then mkChannelSource spec
25         else throw "Unknown source type ${spec.type}";
26     in
27     spec // { outPath = path; };
29   mkGitSource = { repository, revision, url ? null, hash, ... }:
30     assert repository ? type;
31     # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
32     # In the latter case, there we will always be an url to the tarball
33     if url != null then
34       (fetchzip {
35         inherit url;
36         sha256 = hash;
37         extension = "tar";
38       })
39     else assert repository.type == "Git"; fetchgit {
40       url = repository.url;
41       rev = revision;
42     };
44   mkPyPiSource = { url, hash, ... }:
45     fetchurl {
46       inherit url;
47       sha256 = hash;
48     };
50   mkChannelSource = { url, hash, ... }:
51     fetchzip {
52       inherit url;
53       sha256 = hash;
54       extension = "tar";
55     };
57   mkSource