Keeping a Clean Home with XDG User Dirs

  • 30th Dec 2018
  • 2 min read

For my birthday last year, I decided that the time had come. Time for me to finally purchase a new laptop to replace my aging 2013 MacBook Air (RIP). Apple had slowly pushed me back to Linux, so I went with the excellent Lenovo X1 Carbon, whose 5th generation had come out earlier in 2017. It arrived nearly a month later. When the weekend came around, I flashed a USB drive with the latest Arch Linux Live image, rolled up my sleeves, and got to work.

As much as I want to regale you all with bountiful details of setting up a new Arch Linux installation, I'm here today with a specific purpose: to spread knowledge about XDG User Directories! I haven't found a specification explaining the standard, but as usual, the Arch Linux wiki comes to the rescue!

So, in setting up my laptop, I was trying to figure out how to best organize my home directory. I was used to macOS's default layout with Desktop, Documents, Downloads, and so on. But since I was ditching macOS and its tyranny, why not actually give this some thought. Eventually, I settled on the following:

~
❯ ls
build/  dev/  documents/  Dropbox/  music/  pictures/  public/  tmp/  videos/

I specifically wanted no Desktop directory, to rename the Downloads directory to tmp, and to use lower-case folders in my home directory to ease my life when typing them on the command line---where I live. Following the wiki, I filled my ~/.config/user-dirs.dirs with:

XDG_DESKTOP_DIR="$HOME/tmp/desktop"
XDG_DOWNLOAD_DIR="$HOME/tmp"
XDG_TEMPLATES_DIR="$HOME/documents/templates"
XDG_PUBLICSHARE_DIR="$HOME/public"
XDG_DOCUMENTS_DIR="$HOME/documents"
XDG_MUSIC_DIR="$HOME/music"
XDG_PICTURES_DIR="$HOME/pictures"
XDG_VIDEOS_DIR="$HOME/videos"

And voila! All applications that follow the XDG User Directories spec---all the well-behaved ones at least---will now use the configured directories instead of the defaults.

Hmm, now if only I could get Dropbox to fall in line with the whole lower-case thing 🤔.