Setting up Agda via nix on osx, running hello world

Motivations

Setting up Agda on OSX is not straight-forward, some haskell modules are required and some agda modules are required.

We can of course install these globally, but this pollutes our global namespace.

Alternatively we can use nix-shell to give us a sandboxed environment to use agda.

Process

First install nix on OSX.

Next we want an environment with Agda.

We can use nix-shell for this.

We provide a shell.nix file that tells nix-shell what it needs to setup.

shell.nix should contain dependencies and Agda itself:

  • Agda
  • Agda standard library
  • Haskell ieee library

Looking them up via nixpkgs, their attributes are:

  • haskellPackages.Agda
  • haskellPackages.ieee
  • AgdaStdlib

We want agda available to us as a binary so we use mkShell:

pkgs.mkShell {
  name = "agda-with-stdlib";
  buildInputs = [ pkgs.haskellPackages.Agda];
  AGDA_DIR = agdaDir;
}

We also want ghc used in compiling agda programs to have ieee:

agdaGhc = pkgs.haskellPackages.ghcWithPackages (
  haskellPackages: [ pkgs.haskellPackages.ieee ]
);

The end result can be seen in this gist

References: @ryanrendorff - gist