Cabal, or more precisely cabal-install
which is mostly known to Haskellers as the cabal
command line program, recently merged a pull request that makes cabal
support the XDG Basedir Specification. Previously, cabal
would put all of its files in the ~/.cabal
directory. Now the files are spread over multiple directories:
-
$XDG_CONFIG_HOME/cabal
for the main configuration file. On Unix, this defaults to~/.config/cabal
. -
$XDG_CACHE_HOME/cabal
for downloaded packages and script executables. Defaults to~/.cache/cabal
on Unix. -
$XDG_STATE_HOME/cabal
for compiled libraries and other stateful artifacts. Defaults to~/.local/state/cabal
on Unix. -
~/.local/bin
for executables installed withcabal install
.
The advantage is mostly that cabal
now behaves slightly more like other modern Unix tools. For example, it is easier to put all configuration files under version control if they’re all in the same subdirectory, and it is easier to delete all program caches when you’re low on disk space.
This is obviously a rather invasive change. Does it mean that the next version of cabal
will break your workflow? Maybe! But if so, it is not intentional. This change comes with what I hope is rather thorough backwards compatibility behaviour. Basically, if ~/.cabal
exists, or $CABAL_DIR
is set, the old behaviour of using a single unified directory will be maintained. And of course, most paths can
still be configured manually in the configuration file.
Still, because of the delicacy of a change like this, we’d like some external confirmation that cabal
is still usable. This requires human trials. Therefore, if you are a human who uses cabal
, please
try installing the latest development version and see if it still works for you. If you want to try out the new XDG future, you can delete your ~/.cabal
directory (possibly copying ~/.cabal/config
to ~/.config/cabal/config
first). I’ve been dogfooding this support for a few months, but I have no illusions about my usage covering the full feature space.
Beyond whether cabal
remains at all functional, I am personally curious whether the XDG simulacrum that is implemented on Windows is at all useful for Windows users, or whether it would be better for
cabal
to retain a single unified directory on that platform.