ghcide/shell.nix
2020-09-03 22:37:16 +05:30

108 lines
2.7 KiB
Nix

# This shell.nix file is designed for use with cabal build
# It aims to leverage the nix cache in as much as possible
# while reducing Nix maintenance costs.
# It does **not** aim to replace Cabal/Stack with Nix
# Maintaining this file:
#
# - Dealing with broken nix-shell
#
# 1. Bump the nixpkgs version using `niv update nixpkgs`
# 2. Comment out any remaining failing packages
#
# - Dealing with broken cabal build inside nix-shell:
#
# If my understanding of cabal new-build is correct this should never happen,
# assuming that cabal new-build does succeed outside nix-shell
{ sources ? import nix/sources.nix,
nixpkgs ? import sources.nixpkgs {},
compiler ? "default",
hoogle ? false
}:
with nixpkgs;
let defaultCompiler = "ghc" + lib.replaceStrings ["."] [""] haskellPackages.ghc.version;
haskellPackagesForProject = p:
if compiler == "default" || compiler == defaultCompiler
then if hoogle
then haskellPackages.ghcWithHoogle p
else haskellPackages.ghcWithPackages p
# for all other compilers there is no Nix cache so dont bother building deps
else if hoogle
then haskell.packages.${compiler}.ghcWithHoogle (_: [])
else haskell.packages.${compiler}.ghcWithPackages (_: []);
compilerWithPackages = haskellPackagesForProject(p:
with p;
[ aeson
async
base16-bytestring
Chart
Chart-diagrams
cryptohash-sha1
data-default
diagrams
diagrams-svg
extra
fuzzy
ghc-check
gitrev
happy
haskell-lsp
haskell-lsp-types
hie-bios
hslogger
lens
lsp-test
network
optparse-applicative
QuickCheck
quickcheck-instances
prettyprinter
prettyprinter-ansi-terminal
regex-tdfa
rope-utf16-splay
safe
safe-exceptions
shake
sorted-list
stm
syb
tasty
tasty-expected-failure
tasty-hunit
tasty-rerun
tasty-quickcheck
temporary
text
time
transformers
typed-process
unordered-containers
utf8-string
yaml
]);
in
stdenv.mkDerivation {
name = "ghcide";
buildInputs = [
gmp
zlib
ncurses
haskellPackages.cabal-install
haskellPackages.hlint
haskellPackages.ormolu
haskellPackages.stylish-haskell
compilerWithPackages
];
src = null;
shellHook = ''
export LD_LIBRARY_PATH=${gmp}/lib:${zlib}/lib:${ncurses}/lib
export PATH=$PATH:$HOME/.local/bin
'';
}