diff --git a/nix/sources.nix b/nix/sources.nix index dc040f8..7a9a2ae 100644 --- a/nix/sources.nix +++ b/nix/sources.nix @@ -21,9 +21,8 @@ with rec add a package called "nixpkgs" to your sources.json. ''; + # fetchTarball version that is compatible between all the versions of Nix builtins_fetchTarball = - # fetchTarball version that is compatible between all the versions of - # Nix { url, sha256 }@attrs: let inherit (builtins) lessThan nixVersion fetchTarball; @@ -33,6 +32,21 @@ with rec else fetchTarball attrs; + # fetchurl version that is compatible between all the versions of Nix + builtins_fetchurl = + { url, sha256 }@attrs: + let + inherit (builtins) lessThan nixVersion fetchurl; + in + if lessThan nixVersion "1.12" then + fetchurl { inherit url; } + else + fetchurl attrs; + + # A wrapper around pkgs.fetchzip that has inspectable arguments, + # annoyingly this means we have to specify them + fetchzip = { url, sha256 }@attrs: pkgs.fetchzip attrs; + hasNixpkgsPath = (builtins.tryEval ).success; hasThisAsNixpkgsPath = (builtins.tryEval ).success && == ./.; @@ -43,14 +57,22 @@ with rec (f: set: with builtins; listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))); + # borrowed from nixpkgs + functionArgs = f: f.__functionArgs or (builtins.functionArgs f); + callFunctionWith = autoArgs: f: args: + let auto = builtins.intersectAttrs (functionArgs f) autoArgs; + in f (auto // args); + getFetcher = spec: let fetcherName = if builtins.hasAttr "type" spec then builtins.getAttr "type" spec - else "tarball"; + else "builtin-tarball"; in builtins.getAttr fetcherName { - "tarball" = pkgs.fetchzip; + "tarball" = fetchzip; + "builtin-tarball" = builtins_fetchTarball; "file" = pkgs.fetchurl; + "builtin-url" = builtins_fetchurl; }; }; # NOTE: spec must _not_ have an "outPath" attribute @@ -62,6 +84,6 @@ mapAttrs (_: spec: if builtins.hasAttr "url" spec && builtins.hasAttr "sha256" spec then spec // - { outPath = getFetcher spec { inherit (spec) url sha256; } ; } + { outPath = callFunctionWith spec (getFetcher spec) { }; } else spec ) sources diff --git a/site/niv.svg b/site/niv.svg index 79fb047..2162944 100644 --- a/site/niv.svg +++ b/site/niv.svg @@ -1,10 +1,10 @@ - +