termonad-1.2.0.0: shell.nix
# Running `nix-shell` in the same directory as this file will enter an
# environment in which you can easily hack on or build termonad. It provides:
# * Termonad's system dependencies.
# * GHC with all of termonad's haskell dependencies.
# * Local haddocks for those dependencies.
# * Hoogle with an index generated from those haddocks.
# * Cabal.
# * ghcid.
# * open-haddock.
#
# In this environment you should be able to e.g.
# * Build termonad:
# $ cabal new-build
# * Open a repl with access to the termonad libraries:
# $ cabal new-repl
# * Use `ghcid`:
# $ ghcid --command='cabal new-repl'
# * Open local haddocks for e.g. GI.Vte.Objects.Terminal:
# $ open-haddock GI.Vte.Objects.Terminal
# or for the gi-gtk package:
# $ open-haddock gi-gtk
#
# If you pass nix-shell the arguments `--arg indexTermonad true`, then hoogle
# will also index the Termonad libraries, however this will mean the environment
# will need to be rebuilt every time the termonad source changes.
{ compiler ? null, indexTermonad ? false, nixpkgs ? null, additionalOverlays ? [] }:
with (import .nix-helpers/nixpkgs.nix { inherit compiler nixpkgs additionalOverlays; });
let
# A Haskell package set for a version of GHC that is known working.
haskPkgSet = termonadKnownWorkingHaskellPkgSet;
# Nix-shell environment for hacking on termonad.
termonadEnv = haskPkgSet.termonad.env;
# Haskell build tools that are nice to have. It is okay to get these from
# any Haskell package set, since they do not depend on the GHC version we are
# using. We get these from the normal haskellPackages pkg set because then
# they don't have to be compiled from scratch.
nativeBuildTools = with haskellPackages; [ cabal-install ghcid ];
in
if indexTermonad
then
termonadEnv.overrideAttrs (oldAttrs: {
nativeBuildInputs =
let
ghcEnvWithTermonad =
haskPkgSet.ghcWithHoogle (hpkgs: [ hpkgs.termonad ]);
in
oldAttrs.nativeBuildInputs ++ nativeBuildTools ++ [ ghcEnvWithTermonad ];
})
else
haskPkgSet.shellFor {
withHoogle = true;
packages = hpkgs: [ hpkgs.termonad ];
nativeBuildInputs = termonadEnv.nativeBuildInputs ++ nativeBuildTools;
}