A fork of haskell.nix with a more efficient GHCJS 8.10 compiler
#+STARTUP: showall hidestars
** :warning: The Overlay branch #261 was merged. haskell.nix is now an overlay and the dependency on iohk-nix was dropped. Please see the updated documentation! Once any remaining issues are resolved, this will mark the 1.0 release of haskell.nix. :warning:
* Alternative Haskell Infrastructure for Nixpkgs
[[https://buildkite.com/input-output-hk/haskell-dot-nix][https://badge.buildkite.com/d453edcd29bd2f8f3f3b32c9b7d6777a33773d9671c37a6ccc.svg?branch=master]]
[[https://buildkite.com/input-output-hk/haskell-dot-nix-nightly-updates][https://img.shields.io/buildkite/c8d5a20d3ff0f440f82adb9190b43c16c91e5e47e8adfa867a/master.svg?label=nightly%20updates]]
=haskell.nix= is an experimental new builder for Haskell packages.
It works by automatically translating your Cabal or Stack project and
its dependencies into Nix code. It provides IFD (imports from derviation)
functions that can minimize the amount of nix code you need to add.
For the documentation, see https://input-output-hk.github.io/haskell.nix/.
** Quickstart
For =cabal.project= project add a =default.nix=:
#+begin_src sh
{ pkgs ? import <nixpkgs> (import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz))
, haskellCompiler ? "ghc865"
}:
pkgs.haskell-nix.cabalProject {
src = pkgs.haskell-nix.haskellLib.cleanGit { src = ./.; };
ghc = pkgs.buildPackages.pkgs.haskell-nix.compiler.${haskellCompiler};
}
#+end_src
Note that you'll need to add a comment specifying the expected sha256
output for your =source-repository-packages= in your =cabal.project=
file:
#+begin_src sh
source-repository-package
type: git
location: https://github.com/input-output-hk/iohk-monitoring-framework
subdir: plugins/backend-editor
tag: 4956b32f039579a0e7e4fd10793f65b4c77d9044
--sha256: 03lyb2m4i6p7rpjqarnhsx21nx48fwk6rzsrx15k6274a4bv0pix
#+end_src
For a =stack.yaml= project add a =default.nix=:
#+begin_src sh
{ pkgs ? import <nixpkgs> (import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz))
}:
pkgs.haskell-nix.stackProject {
src = pkgs.haskell-nix.haskellLib.cleanGit { src = ./.; };
}
#+end_src
To build the library component of a package in the project run:
#+begin_src sh
nix build -f . your-package-name.components.library
#+end_src
To build an executable:
#+begin_src sh
nix build -f . your-package-name.components.exes.your-exe-name
#+end_src
To open a shell for use with `cabal` run:
#+begin_src sh
nix-shell -A shellFor
cabal new-build your-package-name
cabal new-repl your-package-name:library:your-package-name
#+end_src
** Cache
CI pushes to [[https://cachix.org][cachix]] so you can benefit from the cache
if you pin a combination of =haskell.nix= and =nixpkgs= built by CI.
You'll need to configure the [[https://nix-tools.cachix.org][nix-tools cachix]]
as a =substituter= for =nix= and add the public key found at the url to
=trusted-public-keys=.
** Related repos
The =haskell.nix= repository contains the runtime system for building
Haskell packages in Nix. It depends on other repos, which are:
- [[https://github.com/input-output-hk/nix-tools][nix-tools]] โ provides the programs for generating Nix expressions from
Haskell projects.
- [[https://github.com/input-output-hk/hackage.nix][hackage.nix]] โ the latest contents of the [[https://hackage.haskell.org/][Hackage]] databases,
converted to Nix expressions.
- [[https://github.com/input-output-hk/stackage.nix][stackage.nix]] โ all of the [[https://www.stackage.org/][Stackage]] snapshots, converted to Nix
expressions.
** IRC Channel
Join the [[https://www.irccloud.com/invite?channel=%23haskell.nix&hostname=irc.freenode.net&port=6697&ssl=1][#haskell.nix]] channel on [[https://freenode.net/][irc.freenode.net]] to get help or discuss
the development of =haskell.nix= and =nix-tools=.