Skip to content

Instantly share code, notes, and snippets.

@obadz
Created June 10, 2016 19:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save obadz/347fcf3ef0a86a9dbccbb7b04a80793b to your computer and use it in GitHub Desktop.
Save obadz/347fcf3ef0a86a9dbccbb7b04a80793b to your computer and use it in GitHub Desktop.
{ pkgs ? import <nixpkgs> { }
, haskell ? pkgs.haskell
}:
rec {
cabalHashes = pkgs.fetchFromGitHub {
owner = "commercialhaskell";
repo = "all-cabal-hashes";
rev = "54462f864070cbefd14ab74425da4d4339abbef9";
sha256 = "1msl4dnj2qksl9rk18jpg5bmclmwbzb1ygmcmx4rl3jrnkfpsgm8";
};
stackageLts = pkgs.fetchFromGitHub {
owner = "fpco";
repo = "lts-haskell";
rev = "1a80e0660e630f6dd98f34c3d82c23dc824ada01";
sha256 = "03f90mklvk8pkc1cvpry4508amacija1alib7qgyzmn4020fh2jf";
};
autoHackageSrc = pkgs.stdenv.mkDerivation {
name = "autoHackage";
src = cabalHashes;
phases = [ "installPhase" ];
buildInputs = with pkgs; with haskellPackages; [ jq cabal2nix ];
installPhase = ''
mkdir -p "$out"
pushd "$src" > /dev/null
echo "{" > "$out/default.nix"
# Only build a few just to see
for package in ab*
do
[ -d "$package" ] || continue
pushd "$package" > /dev/null
echo -n "$package:"
firstletter="$(echo "$package" | cut -c 1)"
mkdir -p "$out/$firstletter"
packageFile="$out/$firstletter/$package.nix"
echo "{" > "$packageFile"
for version in *
do
[ -d "$version" ] || continue
pushd "$version" > /dev/null
echo -n " $version"
success=yes
hash="$(jq .\"package-hashes\".SHA256 < "$package".json)" || success=no
cabal2nixOutput="$(cabal2nix . 2>/dev/null)" || success=no
# cabal2nix --sha256 doesn't seem to do what I think it does
cabal2nixWithHash="$(echo "$cabal2nixOutput" | sed "s,src = ./.,sha256 = $hash,")"
if [ "$success" = "yes" ]
then
version_="$(echo "$version" | sed s,\\.,_,g)"
echo "\"v$version_\" = $cabal2nixWithHash;" >> "$packageFile"
else
echo -n "←Error"
fi
popd > /dev/null
done
echo "}" >> "$packageFile"
echo " \"$package\" = import ./$firstletter/$package.nix;" >> "$out/default.nix"
echo
popd > /dev/null
done
echo "}" >> "$out/default.nix"
popd > /dev/null
'';
};
autoHackage = import autoHackageSrc;
test-abstract-deque = pkgs.haskellPackages.callPackage autoHackage.abstract-deque.v0_2_2_1 { };
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment