How I Keep My Home Directory Clean

Author: Jake Bauer | Published: 2020-06-28

Note: I have stopped caring about keeping my home directory clean. While it might be nice to do an ls -a and see hardly anything, it just wasn't worth the continual effort to wrangle programs into behaving. Not to mention, many programs I use are old enough that they predate the XDG specification and therefore don't comply anyways.

Update: The name of the tool mentioned later in the post is rehome. Also added a screenshot showing the current state of my home directory.

I am one of those people who likes to keep files organized and directories clean. Unfortunately, it seems many software developers don’t care about this and like to dump their program’s configuration and state information into my home directory, rather than putting it in the proper XDG specified directories. I’ve gone through quite a bit of effort, mainly using the Arch Wiki’s page on the XDG Base Directory specification, to clean up my home directory from a lot of the cruft programs like to leave lying around.

The current state of my home directory. Only 12 items.

Most programs, if they don’t already recognize the XDG_CONFIG_HOME environment variable, have their own environment variables that they look at to find the location of configuration data. Some examples from my .profile are:

export XAUTHORITY="$XDG_CONFIG_HOME/X11/Xauthority"
export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc"

Which get rid of the .xinitrc and .Xauthority files which would normally sit in the home directory.

Some programs, however, don’t have environment variables but can still be told where to find configuration information using a command line switch. For example, in my .bashrc I have the aliases:

alias tmux='tmux -f "$XDG_CONFIG_HOME"/tmux/tmux.conf'
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'

Which tell tmux to find its configuration in a directory in the XDG_CONFIG_HOME directory, and wget to store its history in the XDG_CACHE_HOME directory.

Unfortunately, even with changes in .profile and aliases in .bashrc, there are still programs which are hardcoded to put files in the home directory. Programs like Firefox, SSH, and Vim (although NeoVim respects XDG), are so old and well-established that the developers are reluctant to change anything for fear of breaking things that expect the files to be there.

I have heard of a program designed to trick other programs into thinking the home is actually in the XDG directories so that they are, in a way, forced to respect the specification. However, I’m alright with a few programs here and there in my home directory as long as it doesn’t get needlessly cluttered. If you’re developing a brand new application there’s no excuse; please respect the XDG base directory specification!

This is my fifty-seventh post for the #100DaysToOffload challenge. You can learn more about this challenge over at