Skip to content

Instantly share code, notes, and snippets.

@louispan
Last active June 20, 2022 05:00
Show Gist options
  • Save louispan/a0e11360e600602638c0a23c77307a33 to your computer and use it in GitHub Desktop.
Save louispan/a0e11360e600602638c0a23c77307a33 to your computer and use it in GitHub Desktop.
Install Cabal, GHC, or GHCJS with one Nix command
# install nix (5.5 mins)
curl https://nixos.org/nix/install | sh
# open a new shell to source nix
bash
# query available haskell compilers
nix-env -qaP -A nixpkgs.haskell.compiler [QUERY]
# install ghc (2.5 mins, cached binary)
nix-env -iA nixpkgs.haskell.compiler.ghc865
# ghc is now in your PATH
ghc --version
# query cabal install version
nix-env -qaP -A nixpkgs.haskellPackages.cabal-install
# install cabal install (0.5 mins, cached binary)
nix-env -iA nixpkgs.haskellPackages.cabal-install
# cabal is now in your PATH
cabal --version
# Install ghcjs (take one sleep, build from source, with `-j1`)
# https://github.com/NixOS/nixpkgs/blob/67e07308236bb7a9fa11f3b599838384db650ecb/pkgs/development/compilers/ghcjs-ng/default.nix#L96
# It will appear to hang at places like 'Preprocessing library for unix-2.7.2.2..'
# Use `ps -ef | grep nix` to check it is still doing work.
nix-env -iA nixpkgs.haskell.compiler.ghcjs
# ghcjc is now in your PATH
ghcjs --version
# cleanup disk space from unused nix stuff
nix-collect-garbage -d
# uninstall everything
sudo rm -rf /nix
@louispan
Copy link
Author

More nix commands, only if you want to use nix to install packages for reproducible releases.
Otherwise, just use cabal to build packages

query haskell packages

nix-env -qaP -A nixpkgs.haskellPackages [QUERY]

list pre-built packages for a specific compiler

nix-env -qaP -A nixpkgs.haskell.packages.ghc865 [QUERY]

The first segment of a package can be replaced with -f NAMESPACE

nix-env -qaP -A nixpkgs.haskell.packages.ghc865 [QUERY]
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc865 [QUERY]

@louispan
Copy link
Author

louispan commented Oct 11, 2019

To build ghcjs faster, you can git clone [email protected]:NixOS/nixpkgs.git, remove the -j1, (the -j1 flag is used to prevent an intermittent panic which might have been fixed) and then install the modified pkg

nix-env -f /path/to/cloned/nixpkgs -iA haskell.compiler.ghcjs

@MurakamiKennzo
Copy link

Thanks, I did it.😘

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment