DEV Community

Christophe Colombier
Christophe Colombier

Posted on • Updated on

Clean your home folder ! discover XDG

Today, I would like to talk about XDG base directory specification

You can read the article, but the idea is a guidance for people creating and maintaining software programs.

What is all about ?

You should have noticed there are a lot of files starting with . in your home directory. Some are configuration files, some are cache, some are runtime data.

What is the problem ?

Well, it's a mess. Having all these files in your home folder is a bit strange, also not easy to follow if you have a dotfiles strategy.

Before/After effect

Instead of having

Enter fullscreen mode Exit fullscreen mode

you could have

Enter fullscreen mode Exit fullscreen mode

This specification is progressively adopted, you will see a lot of files in ~/.config/ or ~/.cache folders. These two are the most commonly used by the programs.

So right now, a lot of programs started to support XDG base directory specifications, some made the choice to use directly the ~/.config to store config files, some simply argues they don't want to support them 🀦.

You can imagine the amount of mess

What are the benefits of using XDG

  • it's cleaner
  • you have one folder per program
  • you can add a file in each folder to take notes or to share information when sharing dotfiles on GitHub.

How to start ?

You can do it manually, by reading every program man files... or ... you can use tools that will report you the things you can migrate.

Here are my favorites:

GitHub logo b3nj5m1n / xdg-ninja

A shell script which checks your $HOME for unwanted files and directories.


Because you wouldn't let just anyone into your $HOME

A shell script which checks your $HOME for unwanted files and directories.

When it encounters a file it knows about, it will tell you whether it's possible to move this file to an appropriate location, and how to do it.

The configurations are from the arch wiki page on XDG_BASE_DIR, antidot (thanks to Scr0nch for writing a conversion tool), and contributed by other users.


Using nix

If you're using nix and have flakes turned on, you can just run the following command:

nix run github:b3nj5m1n/xdg-ninja
Enter fullscreen mode Exit fullscreen mode

Cloning Manually

Clone the repository somewhere, then run the ./ script.

This will run every test in the default configuration.

Installing with Homebrew

To install xdg-ninja with Homebrew, run brew install xdg-ninja to install the script and all of its dependencies, then run the xdg-ninja command.


  • your favorite POSIX-compliant shell (…

The first one is only about reporting current status about each dotfile. It also reports a status for files that are currently unsupported, or when developers declined to support XDG.

It provides you information on how to migrate them.

This one is very cool, because it will never simply make no change to your dotfiles.

GitHub logo doron-cohen / antidot

Cleans up your $HOME from those pesky dotfiles

antidot 🏠 πŸ”Έ πŸ’₯


Cleans up your $HOME from those pesky dotfiles.

Migration from Pre 0.6.0 Versions

Please backup your environment variable and aliases files (in $XDG_DATA_HOME/antidot/{env,alias}.*). After version 0.6.0 antidot stores env exports and alias definitions in a JSON file and generates from it shell definition files.


For years I stood by and saw how countless applications populate my home dir with dotfiles.

No more! antidot is a tool to automatically detect and remove dotfiles from $HOME without any risks. It will move files to more appropriate locations (based on XDG base directory specifications). It will also set environment variables, declare aliases and use symlinks to ensure apps can find their files.


Arch Linux

yay -Sy antidot-bin
Enter fullscreen mode Exit fullscreen mode


brew install doron-cohen/tap/antidot
Enter fullscreen mode Exit fullscreen mode

Go to the releases section and grab the one that fits your OS.

After installing run antidot update to download the latest rules file…

This one is about listing them, it reports a bit less results.
But it can help you to migrate them automatically.

Top comments (4)

muescha profile image
Michael • Edited

here are similar movement with .dotfiles on macOS - I added a link to your article:

sanixdarker profile image
darker • Edited

Thanks for sharing this, didn't know about xdg-ninja !
it's true am handling everything in my ~/.config dir manually except for tmux.conf and gitconfig, am lazy ya know...πŸ™ˆ... but i will definetlly change that !

$ tree -L 1 ~/.config/
   β”œβ”€β”€ alacritty
   β”œβ”€β”€ i3
   β”œβ”€β”€ mpv
   β”œβ”€β”€ neofetch
   β”œβ”€β”€ neomutt
   β”œβ”€β”€ nvim
   β”œβ”€β”€ pypoetry
   β”œβ”€β”€ ranger
   β”œβ”€β”€ rofi
   β”œβ”€β”€ thefuck
   β”œβ”€β”€ wireshark
   β”œβ”€β”€ yarn
Enter fullscreen mode Exit fullscreen mode
efdev profile image
Eric F πŸ‡ΊπŸ‡¦

πŸ‘ Will definitely look it to the .config/git There's also the --system location /etc/gitconfig. Making things really global, and just keep personal stuff/info in the other one.

ccoveille profile image
Christophe Colombier

Yes, it's possible to have clean config files and home folder. It's just a pity that's not the default behavior