on af5998f help sign in

A fork of haskell.nix with a more efficient GHCJS 8.10 compiler

git clone ssh://git.iko.soy/haskell.nix
#+STARTUP: showall hidestars

** :warning: Please use [[https://iohk.cachix.org][iohk.cachix.org]] instead of [[https://nix-tools.cachix.org][nix-tools.cachix.org]] :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 (import from derivation)
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
let 
  # Fetch the latest haskell.nix and import its default.nix
  haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {};
  # haskell.nix provides access to the nixpkgs pins which are used by our CI, hence
  # you will be more likely to get cache hits when using these.
  # But you can also just use your own, e.g. '<nixpkgs>'
  nixpkgsSrc = haskellNix.sources.nixpkgs-1909;
  # haskell.nix provides some arguments to be passed to nixpkgs, including some patches
  # and also the haskell.nix functionality itself as an overlay.
  nixpkgsArgs = haskellNix.nixpkgsArgs;
in
{ pkgs ? import nixpkgsSrc nixpkgsArgs
, haskellCompiler ? "ghc865"
}:
# 'cabalProject' generates a package set based on a cabal.project (and the corresponding .cabal files)
pkgs.haskell-nix.cabalProject {
  # 'cleanGit' cleans a source directory based on the files known by git
  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
let 
  haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {};
  nixpkgsSrc = haskellNix.sources.nixpkgs-1909;
  nixpkgsArgs = haskellNix.nixpkgsArgs;
in
{ pkgs ? import nixpkgsSrc nixpkgsArgs
}:
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://iohk.cachix.org][iohk 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=.