# `builtins.fetchTarball` only accepts a `sha256` argument in Nix version 1.12 # or later, so here we provide a function that can provide a compatible interface # to Nix 1.11 or Nix 1.12 # # TODO FIXME: remove this sometime after Nix 1.12 goes stable { url # URL of the nixpkgs tarball to download , rev # The Git revision of nixpkgs to fetch , sha256 # The SHA256 of the downloaded data , system ? builtins.currentSystem # This is overridable if necessary }: with { ifThenElse = { bool, thenValue, elseValue }: ( if bool then thenValue else elseValue); }; ifThenElse { bool = (0 <= builtins.compareVersions builtins.nixVersion "1.12"); # In Nix 1.12, we can just give a `sha256` to `builtins.fetchTarball`. thenValue = (builtins.fetchTarball { inherit url sha256; }); # This hack should at least work for Nix 1.11 elseValue = ( (rec { tarball = import { inherit url sha256; }; builtin-paths = import ; script = builtins.toFile "nixpkgs-unpacker" '' "$coreutils/mkdir" "$out" cd "$out" "$gzip" --decompress < "$tarball" | "$tar" -x --strip-components=1 ''; nixpkgs = builtins.derivation { name = "nixpkgs-${builtins.substring 0 6 rev}"; builder = builtins.storePath builtin-paths.shell; args = [ script ]; inherit tarball system; tar = builtins.storePath builtin-paths.tar; gzip = builtins.storePath builtin-paths.gzip; coreutils = builtins.storePath builtin-paths.coreutils; }; }).nixpkgs); }