generated | ||
nixpkgsForGhc | ||
overrides | ||
src | ||
.envrc | ||
.gitattributes | ||
.gitignore | ||
all-hies.cabal | ||
check-cache.sh | ||
default.nix | ||
Design.org | ||
nixpkgs.nix | ||
Readme.org | ||
shell.nix | ||
update.nix |
Cached Haskell IDE Engine Nix builds for all GHC versions
This repository provides cached Nix builds for the latest stable Haskell IDE Engine (HIE) for all supported GHC versions. It is intended to be a successor to hie-nix, which only provides a changing subset of versions. This project solves the problem of having mismatched HIE and project GHC versions, which is almost impossible to avoid if you use a globally installed HIE and have many projects.
Installation
Cached builds
If you wish to use prebuilt binaries, available on both Linux and macOS, configure the all-hies
cache with these instructions, or if you have cachix installed already:
cachix use all-hies
Note: Due to an issue with cachix you might have to restart the nix daemon for this to take effect, refer to this issue.
Building without cached builds
On Linux and some versions of macOS, building HIE yourself is also possible and is in fact the default if you don't configure cachix as specified above. The build has a lot of dependencies however, so be prepared to wait a while for it to finish.
The only known macOS version to succeed in building all HIE versions is High Sierra, which was used to build the caches. MacOS Mojave specifically doesn't work for some HIE versions.
NixOS installation
Add this to the start of your configuration.nix
:
let
all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") {};
in
{
# ...
}
Then depending on your needs, add the versions you need to environment.systemPackages
:
For the latest supported GHC version only (which is 8.6.4 right now):
{
environment.systemPackages = [ all-hies.latest ];
}
For a specific version of GHC (warning: If you need multiple versions, use the approach after this one instead):
{
environment.systemPackages = [ all-hies.versions.ghc864 ];
}
For a specific set of GHC versions (note: The hie
/ hie-wrapper
binaries will both be a HIE wrapper that chooses the correct version out of the given ones):
{
environment.systemPackages = [
(all-hies.selection { selector = p: { inherit (p) ghc864 ghc863 ghc843; }; })
];
}
For all supported GHC versions (warning: requires ~30GB (or <10GB with compression) of space for all 9 versions):
{
environment.systemPackages = [
(all-hies.selection { selector = p: p; })
];
}
nix-env
installation
For the latest supported GHC version only (which is 8.6.4 right now):
nix-env -iA latest -f https://github.com/infinisil/all-hies/tarball/master
For a specific version of GHC (warning: If you need multiple versions, use the approach after this one instead):
nix-env -iA versions.ghc864 -f https://github.com/infinisil/all-hies/tarball/master
For a specific set of GHC versions (note: The hie
/ hie-wrapper
binaries will both be a HIE wrapper that chooses the correct version out of the given ones):
nix-env -iA selection --arg selector 'p: { inherit (p) ghc864 ghc863 ghc843; }' -f https://github.com/infinisil/all-hies/tarball/master
For all supported GHC versions (warning: requires ~30GB (or <10GB with compression) of space for all 9 versions):
nix-env -iA selection --arg selector 'p: p' -f https://github.com/infinisil/all-hies/tarball/master
Updating this repository
This section is only for all-hies developers and not intended for end users.
If a new stable HIE version has been released, the following commands can be used to update the repository with it and build all versions
nix-build update.nix
result/bin/update
nix-build -A versions -k
Or if you wish to use a different hie revision like master:
result/bin/update master
This will take a long time, but these commands do a lot of intermediate caching and are idempotent, so they can be interrupted and resumed at any time. If builds fail for some reason, the overrides
directory can be used to add GHC-specific Haskell overrides.
Depending on the amount of RAM you have, the above nix-build
command can lead to a lot of thrashing, because Nix interleaves all dependencies from all different GHC versions, which means its working memory is about $number-of-versions * $size-of-ghc. To avoid this, build each version in a series of commands instead (or only k versions at a time). Because there's a lot of dependencies, you might also want to use `–max-jobs auto –cores 1`, in order to approximate maximal processor usage and minimize build time.