DEV Community

Christophe Colombier
Christophe Colombier

Posted on • Edited 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



~/.gitconfig
~/.tmux.conf
...
...


Enter fullscreen mode Exit fullscreen mode

you could have



~/.config/git/config
~/.config/tmux/tmux.conf
...


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 README.md 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.

xdg-ninja

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


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

xdg-ninja command output

When xdg-ninja encounters a file or directory it knows about, it will tell you whether it's possible to move it to the 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 crowdsourced by other users.

Installing

Manual Installation

Clone the repository, then run the ./xdg-ninja.sh script.

git clone https://github.com/b3nj5m1n/xdg-ninja
cd xdg-ninja
./xdg-ninja.sh
Enter fullscreen mode Exit fullscreen mode

This will run every test in the default configuration.

Nix

Turn on flakes, then run the following command:

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

Note

Due to how xdg-ninja is developed, releases are not cut, so Homebrew ships a stale version, therefore you have to install and upgrade xdg-ninja from the git HEAD. ref: #204

Homebrew will notโ€ฆ

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 ๐Ÿ  ๐Ÿ”ธ ๐Ÿ’ฅ

Pipeline

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.

Intro

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.

Installation

Arch Linux

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

Homebrew

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)

Collapse
 
muescha profile image
Michael • Edited

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

github.com/pi0/config-dir/discussi...

Collapse
 
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
Collapse
 
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.

Collapse
 
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