Cabal on NFS
Note to myself, like most other things in this site:
Suppose your home directory is on NFS or some such. Now suppose you’re sharing your
~/.cabal files with several machines across the network. Some of them are
x86, some are
x86\_64, etc. All of them are running the same version of RHEL or some such.
When this is the case, and when you hop from terminal to terminal, Cabal won’t be happy with the default configuration; and your finely tuned XMonad will break. You certainly don’t want to nuke your
~/.ghc and rebuild everything every time you use a different computer.
I asked the friendly folks in #haskell (this was a while ago, so memory lapses are all mine), and was pleased to learn that there is indeed a solution to this particular nerd-world problem: change the
~/.cabal/config slightly, like so:
install-dirs user prefix: /home/sajith/.cabal/$arch bindir: $prefix/bin libdir: $prefix/lib libsubdir: $pkgid/$compiler libexecdir: $prefix/libexec datadir: $prefix/share datasubdir: $pkgid docdir: $datadir/doc/$pkgid htmldir: $docdir/html haddockdir: $htmldir
prefix does the trick. I suppose you can also use
$compiler if you’re the kind of person that runs twelve different versions of GHC on your Amiga-based NetBSD Beowulf cluster.
If you want to find these variables quickly, do a
cabal help install or see Cabal docs.
If you use a non-hipster shell, adding this to
~/.profile might be useful:
if [ -d $HOME/.cabal/$(uname -m)/bin ]; then PATH=$HOME/.cabal/$(uname -m)/bin:$PATH fi export PATH
(On Debian, “
uname -i” and “
uname -p” prints “
unknown”, because, to cite
uname documentation, “the kernel does not make this information easily available, as is the case with Linux kernels”. Hey Linux kernel on Debian, behave yourself.)