68 lines
1.8 KiB
Nix
68 lines
1.8 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
cfg = config.sydnix.users.crumb.haskell;
|
|
in {
|
|
options.sydnix.users.crumb.haskell.enable =
|
|
lib.mkEnableOption "Haskell, à la crumb";
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
# Convenient shorthand for quickly opening Haskell REPLs.
|
|
programs.bash.profileExtra = ''
|
|
# Start a GHCi REPL with the given packages made available.
|
|
ghci-with-packages () {
|
|
packages=""
|
|
while getopts 'p:h' opt; do
|
|
case "$opt" in
|
|
p)
|
|
packages="''${OPTARG}"
|
|
;;
|
|
?|h)
|
|
echo >&2 "Usage: $(basename $0) [-p packages] [-- ghci-options]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift "$(($OPTIND -1))"
|
|
|
|
nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [ $packages ])" \
|
|
--run "ghci $@"
|
|
}
|
|
export -f ghci-with-packages
|
|
|
|
# Run GHC with the given packages made available.
|
|
ghc-with-packages () {
|
|
packages=""
|
|
while getopts 'p:h' opt; do
|
|
case "$opt" in
|
|
p)
|
|
packages="''${OPTARG}"
|
|
;;
|
|
?|h)
|
|
echo >&2 "Usage: $(basename $0) [-p packages] [-- ghc-options]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift "$(($OPTIND -1))"
|
|
|
|
nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [ $packages ])" \
|
|
--run "ghc $@"
|
|
}
|
|
export -f ghc-with-packages
|
|
'';
|
|
|
|
sydnix.impermanence.cache.directories =
|
|
let xdg-cache-dir =
|
|
config.home.cacheHome
|
|
or "${config.home.homeDirectory}/.cache";
|
|
in [
|
|
# We don't want to rebuild Hackage simply due to a reboot, do we? }:)
|
|
(lib.removePrefix "${config.home.homeDirectory}/"
|
|
"${xdg-cache-dir}/cabal")
|
|
".stack"
|
|
];
|
|
};
|
|
}
|
|
|