diff --git a/nix/sources.nix b/nix/sources.nix index c0941e9..051faaf 100644 --- a/nix/sources.nix +++ b/nix/sources.nix @@ -1,20 +1,58 @@ +# This file has been generated by Niv. + # A record, from name to path, of the third-party packages -with +with rec { + pkgs = + if hasNixpkgsPath + then + if hasThisAsNixpkgsPath + then import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {} + else import {} + else + import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) {}; + + sources_nixpkgs = + if builtins.hasAttr "nixpkgs" sources + then sources.nixpkgs + else abort + '' + Please specify either (through -I or NIX_PATH=nixpkgs=...) or + add a package called "nixpkgs" to your sources.json. + ''; + + builtins_fetchTarball = + # fetchTarball version that is compatible between all the versions of + # Nix + { url, sha256 }@attrs: + let + inherit (builtins) lessThan nixVersion fetchTarball; + in + if lessThan nixVersion "1.12" then + fetchTarball { inherit url; } + else + fetchTarball attrs; + + hasNixpkgsPath = (builtins.tryEval ).success; + hasThisAsNixpkgsPath = + (builtins.tryEval ).success && == ./.; + sources = builtins.fromJSON (builtins.readFile ./sources.json); - # fetchTarball version that is compatible between all the sources of Nix - fetchTarball = - { url, sha256 }: - if builtins.lessThan builtins.nixVersion "1.12" then - builtins.fetchTarball { inherit url; } - else - builtins.fetchTarball { inherit url sha256; }; mapAttrs = builtins.mapAttrs or (f: set: with builtins; listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))); -}; + getFetcher = spec: + let fetcherName = + if builtins.hasAttr "type" spec + then builtins.getAttr "type" spec + else "tarball"; + in builtins.getAttr fetcherName { + "tarball" = pkgs.fetchzip; + "file" = pkgs.fetchurl; + }; +}; # NOTE: spec must _not_ have an "outPath" attribute mapAttrs (_: spec: if builtins.hasAttr "outPath" spec @@ -24,6 +62,6 @@ mapAttrs (_: spec: if builtins.hasAttr "url" spec && builtins.hasAttr "sha256" spec then spec // - { outPath = fetchTarball { inherit (spec) url sha256; } ; } + { outPath = getFetcher spec { inherit (spec) url sha256; } ; } else spec ) sources