Haskell: experiment with importing a generated hackage-packages.nix file

+90
+90
pkgs/development/haskell-modules/generate-hackage-package-set.nix
··· 1 + { pkgs ? (import <nixpkgs> {}).pkgs 2 + , lib ? pkgs.lib 3 + , stdenv ? pkgs.stdenv 4 + }: 5 + 6 + let 7 + 8 + nixpkgs = pkgs.fetchFromGitHub { 9 + owner = "peti"; 10 + repo = "nixpkgs"; 11 + rev = "b558bfa7d1e820904ff9d7bbc1f02ad51f690e34"; 12 + sha256 = "1n1hicnn5mybd9cm7s2my5ayphsy0hhjv6bc4xcb1v9rpcm8pm16"; 13 + }; 14 + 15 + cabal2nix = pkgs.fetchFromGitHub { 16 + owner = "NixOS"; 17 + repo = "cabal2nix"; 18 + rev = "116145753cbf05572c127e00d8616385f8faa378"; 19 + sha256 = "16zvxs2hjv7wvl1hmwq3v272rc9r6ind2vlcvdx29f3risxpjzkp"; 20 + }; 21 + 22 + hackage = pkgs.fetchFromGitHub { 23 + owner = "commercialhaskell"; 24 + repo = "all-cabal-hashes"; 25 + rev = "85f28bd0d000706c29f78275100dddd7c1c6c2f6"; 26 + sha256 = "0w41lzkjvndcpscn5lyb8vvxpvq0kbg5ggdsk31167psa1g32hrz"; 27 + }; 28 + 29 + lts-haskell = pkgs.fetchFromGitHub { 30 + owner = "fpco"; 31 + repo = "lts-haskell"; 32 + rev = "89c3b45370ec1742d9e029ff4e5271316031b84b"; 33 + sha256 = "0w3cz19g0h8dfxjpwf28rzj0xska11cbn5in5835ss2ypmbr2lwr"; 34 + }; 35 + 36 + stackage-nightly = pkgs.fetchFromGitHub { 37 + owner = "fpco"; 38 + repo = "stackage-nightly"; 39 + rev = "98e337bf6bf8efb772babe252e3f0027d8b6f859"; 40 + sha256 = "1dmc8y72np2np3zrvdl61x539yw3qi4fpyyswib29j0h90pwj93p"; 41 + }; 42 + 43 + haskellPackages = pkgs.haskell.packages.bootstrap.override { 44 + overrides = self: super: { 45 + distribution-nixpkgs = super.distribution-nixpkgs.overrideDerivation (old: { src = cabal2nix; }); 46 + cabal2nix = super.cabal2nix.overrideDerivation (old: { src = cabal2nix; }); 47 + hackage2nix = super.hackage2nix.overrideDerivation (old: { src = cabal2nix; }); 48 + }; 49 + }; 50 + 51 + in 52 + 53 + stdenv.mkDerivation { 54 + name = "haskell-update-0"; 55 + buildInputs = [ haskellPackages.hackage2nix pkgs.nix ]; 56 + src = [ nixpkgs ]; 57 + buildPhase = '' 58 + # Processing Hackage requires UTF-8 support. 59 + export LANG="en_US.UTF-8" 60 + ${lib.optionalString stdenv.isLinux ''export LOCALE_ARCHIVE="${pkgs.glibcLocales}/lib/locale/locale-archive"''} 61 + 62 + # hackage2nix runs nix-env to determine the set of visible package names. 63 + export NIX_STORE_DIR="$TMPDIR/nix/store" NIX_STATE_DIR="$TMPDIR/nix/var" 64 + 65 + # Build the preferred-versions file. 66 + for i in "${hackage}/"*/preferred-versions; do 67 + cat >>$TMPDIR/preferred-versions "$i" 68 + echo >>$TMPDIR/preferred-versions 69 + done 70 + 71 + # Generate the updated Haskell package set and LTS configuration files. 72 + hackage2nix +RTS -M6G -RTS \ 73 + --nixpkgs="$PWD" --preferred-versions="$TMPDIR/preferred-versions" \ 74 + --hackage="${hackage}" --lts-haskell="${lts-haskell}" \ 75 + --stackage-nightly="${stackage-nightly}" 76 + ''; 77 + 78 + doCheck = true; 79 + checkPhase = '' 80 + # Verify that all Haskell packages still evaluate properly. 81 + nix-env -qaP -f "$PWD" -A haskellPackages >/dev/null 82 + ''; 83 + 84 + installPhase = '' 85 + mkdir -p "$out" 86 + cp pkgs/development/haskell-modules/hackage-packages.nix "$out/" 87 + cp pkgs/development/haskell-modules/configuration-lts-*.nix "$out/" 88 + ''; 89 + 90 + }