ryoblog/src/blog/stop-stuffing-home/index.md

3.8 KiB

title: Stop stuffing $HOME!! XDG standards exist for a reason!! author: 寮 date: 2022-07-18 11:00:00 tags:technology,linux,bsd threadid: ALbLO9pMm5FCov9B9U

While cleaning up my home directory, I finally got it clean again...according to file managers.
Then I looked for all the dot files on my system, and my jaw dropped.\

$ ls .
zsh: do you wish to see all 150 possibilities (50 lines)?

150 files and directories hidden from file managers!
What do I have then?
.zshrc, .profile, .config, .cache, .ssh, .local, .zsh_history, .gitconfig, .Xresources, and .xinitrc, these files and directories are OK to have in the home directory, they're supposed to be there, so OK.

What do I have more?
Dot folders from nearly every single browser ever made, with the only exceptions of QuteBrowser, Lynx, Otter Browser, Lagrange, and NetSurf (which by the way are the only good web browsers in current year anyway, and they are all XDG compliant), dot files for every single crypto wallet except for Monero (it lives in the home directory, but not as a dot directory for whatever reason), .rtorrent.rc (my Torrent downloader), .putty (what the fuck is that even!?), .yarn, .npm, .node-gyp (all JavaScript garbage, should remove that as I don't even make anything using soyware anyway), .password-store (GNU Pass, even Stallman-san doesn't comply with XDG standards, shame on you!), .duck (for S3 storage, had to have it for 1 project which is long done), .fehbg (I use sxiv these days, so delete!), .fzf and .fzf.zsh (for search stuff), .cxoffice (again, I don't use it, so burn it), .steam (I don't have Steam since a very long time ago, so burn), .emacs and .emacs.d, .vim, .vim-bookmarks, and .viminfo (both editors aren't XDG compliant, shame!), .gnuplot_history (sounds dangerous, but the file is empty, so burn), .claws-mail (I'm almost fully switched to NeoMutt, so I'll burn you soon), .minetest (a FOSS alternative to Minecraft), and on and on it goes.
And I have no idea what the fuck is wrong with these developers!
The most annoying thing about that is when you're looking for a file using "ls -al", you're dealing with so much clutter that you can't find the thing you're looking for.

The biggest reason for XDG standards is exactly to prevent this mess from happening.
Even Gnome and KDE are seemingly not compliant.
And the worst offender is Pale Meme which even adds a space in the folder name (.moonchild productions), which is a big middle finger towards Unix and Unix-like users.

The basics are as follows:

  • .cache is for, you guessed it, cache.
  • .config is for all the user-specific config files (global config files exist in /etc).
  • .local/bin is for user-only binaries (global ones are in /usr/bin or /usr/local/bin).
  • .local/lib is for user-only libraries (global ones are in /usr/lib, /usr/lib64, /usr/local/lib, or /usr/local/lib64).
  • .local/share is for application-specific data specific to the logged in user only.

And I also have a .local/opt which I created for stuff like Chromium extensions or other shit that are in my home directory but shouldn't be there.

Luckily, most software make use of something that's called environment variables, which makes it possible to move everything to where they're supposed to be, but that also means my .zshrc file is fully spammed with export commands (for example, export GOPATH="~/.local/opt/go").
And some soyware, despite making use of environment variables, unfortunately still ignore the exports and act as if their paths were hardcoded.

So if you're a developer reading this, please make sure you make your stuff XDG compliant, you'll do all users of Unix or Unix-like systems a massive favor with that (so that means everyone except for WinDOS, FreeDOS, Haiku, RISC OS, and ReactOS users, of which only FreeDOS is a worthy OS anyway, while WinDOS is literally malware, and the other 3 are still in early alpha stage after decades).