I also often hear it's confusing and hard to follow correctly (which is true) so I'll make it simple: if you are an app author now, please don't use dot files in $HOME. Instead:
* ${XDG_CONFIG_HOME:-~/.config}/<appname>/ for your app's configuration directory
* ${XDG_CACHE_HOME:-~/.cache}/<appname>/ for your app's cache directory (in other words, all files which are safe to delete at any time without impact)
* ${XDG_DATA_HOME:-~/.local/share}/<appname>/ for your app's data files directory. If you're confused about what this is, just use the former two, no big deal.
ZDOTDIR="${XDG_CONFIG_HOME}/zsh"
in `/etc/zshrc`, then moving all miscellaneous files to the same place: # ~/.config/zsh/.zshenv
export HISTFILE="${ZDOTDIR}/history"
# ~/.config/.zshrc
compinit -d ${ZDOTDIR}/zcompdump
zstyle ':completion:*' cache-path "${ZDOTDIR}/cache"
## separate files for easier and quicker editing:
for file in $ext_files; do
[[ -f ${ZDOTDIR}/${file} ]] && source ${ZDOTDIR}/${file}
done
This method removed quite a few files (history, compdump, cache, zkbd, zshrc, zshenv, zprofile, zlogin, etc.) from my home dir.I'm sure bash has something similar, but like you said, it would be nice if programs didn't junk up $HOME by default.
ZDOTDIR="${XDG_CONFIG_HOME}/zsh"
Congratulations, you have just broken your zsh configuration.
$XDG_CONFIG_HOME may not be set (e.g. when logging with SSH or in console, and
even not always in X11).I guess I assumed people would not read my post and then start editing a system-wide shell config file unless they knew what they were doing.
But if someone did manage to "break" their shell this way, recovery would be trivial because they will still be able to login and the shell will still run, they just might not have all of their configs loaded.
Whereas classical Unix applications simply have one easy to identify dotfile in ~/.
It may be subjective. I don't like the XDG specs. Have you peeked in to OS X $HOME/Library? That's what you end up having. (Let's not talk about windows registries, but I guess systemd people like it.) Is that any better than dot files under $HOME? Hardly so.
Please application developers, follow the XDG Base Directory spec (or the equivalent in Windows and Mac OS X).
See https://specifications.freedesktop.org/basedir-spec/basedir-... and https://wiki.archlinux.org/index.php/XDG_Base_Directory_supp...