in config

Configbestanden in je Linux home-directory

Werking

Op Linux worden persoonlijke instellingen van programma's opgeslagen in je home-directory, dus in /home/gebruikersnaam (vaak afgekort als ~). Het idee is simpel: elk programma onthoudt jouw voorkeuren ergens in die map. Maar waar precies, dat is een ander verhaal. Er is namelijk geen echt afgedwongen standaard, en dat merk je vrij snel als je eens rondkijkt in je eigen home-map.

De klassieke aanpak is de dotfile. Dat is een bestand of map die met een punt begint, zoals .bashrc, .vimrc of .gitconfig. Door die punt blijven ze normaal verborgen in je bestandsbeheerder of bij een gewone ls. Decennialang gooiden programma's gewoon alles los in je home-directory neer op deze manier. Het nadeel is dat je home-map daardoor een rommeltje wordt: tientallen losse dotfiles en dotmappen door elkaar.

Om daar wat orde in te scheppen is er de XDG Base Directory Specification. Dat is een poging van freedesktop.org om af te spreken waar dingen horen te staan. Volgens die afspraak komt configuratie in ~/.config, komen gegevens die een programma zelf beheert in ~/.local/share, staat cache in ~/.cache en horen runtime-bestanden in /run/user/UID. Een programma dat zich netjes aan XDG houdt, zet zijn instellingen dus in een eigen submap onder ~/.config, bijvoorbeeld ~/.config/kde of ~/.config/git. Dat oogt een stuk overzichtelijker.

Het probleem is alleen dat dit een aanbeveling is en geen wet. Niemand dwingt een ontwikkelaar om zich eraan te houden. Het gevolg is dat de praktijk een mengelmoes is. Sommige programma's volgen XDG keurig, andere blijven hardnekkig hun oude dotfile in de home-map gebruiken, en weer andere doen het allebei tegelijk of half. Git is een bekend voorbeeld: dat leest zowel ~/.gitconfig als ~/.config/git/config. Sommige tools lezen wel uit ~/.config maar schrijven nog steeds naar de oude locatie, of andersom.

Daar komt bij dat de scheiding tussen configuratie, data en cache in de praktijk vaak vervaagt. In theorie is config iets wat jij instelt, data iets wat het programma genereert en cache iets wat je zonder problemen kunt weggooien. Maar lang niet elke applicatie houdt zich daaraan. Je vindt regelmatig echte instellingen terug in ~/.local/share, of juist databestanden die in ~/.config staan. Voor een gebruiker is het dan niet altijd helder of een bepaald bestand veilig verwijderd kan worden of dat je daarmee je instellingen kwijtraakt.

Monitoring tool fmon

Het komt er dus op neer dat je voor configuratie meestal op drie plekken moet kijken: losse dotfiles direct in ~, de submappen in ~/.config, en soms ook ~/.local . Welke plek voor een specifieke applicatie geldt, ontdek je vaak pas door wat te zoeken of door de documentatie erop na te slaan. Een eenvoudige manier om erachter te komen waar een programma schrijft, is kijken welke bestanden recent zijn gewijzigd nadat je een instelling hebt aangepast.

Wil je het wat gerichter aanpakken, dan kun je een tool gebruiken die ik zelf heb geschreven, fmon. Daarmee houd je in de gaten wat er in een map gebeurt. Je begint bijvoorbeeld breed door heel ~ te bekijken, en vervolgens kun je met de opties van de tool steeds gerichter inzoomen en rapporteren waar de wijzigingen precies plaatsvinden.

Conclusie

de standaardmappen bestaan op papier wel, maar de werkelijkheid op een doorsnee Linux-systeem is rommeliger dan de specificatie suggereert. Het is goed om te beseffen dat je nooit honderd procent zeker kunt zijn dat een applicatie zich aan de afspraken houdt, en dat het lonen kan om zelf even te controleren waar jouw instellingen terechtkomen.

kdelinuxxdg