Cover Image

Vor einigen Jahren habe ich versucht meine lokalen Konfiguration irgendwie zu versionieren. Das hat den Vorteil, dass man seine Einstellungen wieder rückgängig machen kann. Auch lassen sich die Einstellungen dann zwischen verschiedenen Maschinen teilen. Eine Idee von damals war, dass man seine Dotfiles in einem Verzeichnis ablegt und dort ein GIT Repository einrichtet. Wie kommen dann die Konfigurationen an den korrekten Platz? Mit Symlinks war dann oft die Antwort. Das klappt in den meisten Fällen gut, aber es gibt ein paar Einschränkungen.

Dotfiles in Gitea

Mein Dotfiles Repository in meinem eigenen Gitea Server.

Symlinks funktionieren nicht über mehrere Festplatten hinweg. Einige Programme lösen Symlinks falsch auf, was dann zu Problemen führt. Die Wartungsarbeit ist auch da. Man muss dann manuell die Konfigurationsdatei eines Programm verschieben und manuell einen Symlink erzeugen.

GIT Bare Repository

Ein Kollege hatte mir damals einen Artikel aus dem Atlassian Blog gezeigt. Die Idee aus dem Blogartikel war super genial. Man legt sich mit GIT ein sogenanntes Bare Repository an. Die Idee dahinter ist, dass die Datenhaltung (das Verzeichnis in dem GIT seine Objekte ablegt) vom Arbeitsverzeichnis getrennt ist. Dann nutzt man git und gibt diesem den Pfad zum Bare-Repository mit und den Pfad zum Arbeitsverzeichnis. Und jetzt kommt der Clou. Als Arbeitsverzeichnis definiert man sein gesamtes Home-Dir! Das ist einfach und gleichzeitig genial.

Damit kann man jetzt beliebige Dateien, auch Konfigurationsdateien, in sein GIT Repository aufnehmen. Das kann man dann wieder an ein Repo-Repository schicken. Und schon ist das Problem gelöst. In Artikel gibt es noch den Tipp, dass man sich am besten ein Alias config anlegt unda dann damit arbeitet. Super Sache. Das habe ich ein paar Jahre gemacht. Bis ich dann yadm entdeckt hatte.

Yet Another Dotfiles Manager

Was macht yadm anders als die vorher genannte Technologie? Die kurze Antwort: Nichts. Das Prinzip von yadm ist genau das Gleiche. Nur mit dem Unterschied, dass ich keine eigenen Scripte warten und pflegen muss und viele Dinge bereits für mich gelöst sind. Ein klassischer Fall von don’t reinvent the wheel. Yadm lässt sich bequem installieren1.

MacOS

brew install yadm

Arch Linux

sudo pacman -S yadm

Ubuntu

sudo apt-get install yadm

Nach der Installation wird yadm einfach initalisiert.

yadm init

Das legt dann ebenfalls das Bare Repository an. Man kann dann alles machen, was man mit dem git CLI Befehl auch macht. Anstatt git nutzt man dann eben den Befehl yadm.

Will ich z.B. meine .bashrc Datei versionieren, dann reicht ein einfaches yadm add .gitignore. Danach noch yadm commit und die Datei ist lokal versioniert.

Mit anderen Rechnern die Konfiguration teilen

Ein Remote-Repository lässt sich analog zu git mit yadm remote add origin <url> hinzufügen.

Wenn ihr dann mit yadm push -u origin main euer Repository zu einem Remote-Server übertragen habt, könnt ihr die gleiche Konfiguration dann auf einem anderen Rechner bereitstellen.

yadm clone <remote-url>

Das klont dann alle Dateien und schiebt diese dann auch an die entsprechenden Stellen. Sollten auf dem System bereits Dateien an genannten Stellen liegen, gibt es in GIT natürlich einen Konflikt. Diese lässt man sich dann mit yadm status anzeigen und behebt diese. So wie bei jedem anderen GIT Projekt auch.

Ich selbst habe mir auf meinem Rechner noch ein “update-all.sh” Script gemacht, dass je nach Betriebssystem die entsprechenden Aktualisierungsroutinen startet. Als ersten Befehl auf allen meinen Systemen, lass ich dann immer ein yadm pull ausführen um Konflikte zu vermeiden.

Weitere Funktionen

yadm kann noch ein paar andere nette Dinge. Am besten lest ihr euch ein wenig ein. Der Befehl yadm, ohne Argumente abgeschickt, zeigt auch eine gute Übersicht an. Auch ein man yadm ist hilfreich.

man yadm

Zu nennen ist hier vorallem die Möglichkeit zu haben, dass man Dateien verschlüsselt ablegen kann. Siehe dazu: https://yadm.io/docs/encryption

Das war es für den Anfang. Ich hoffe ihr könnt aus dem Blogartikel etwas mitnehmen. Für mich selbst ist das ein Vorgehen, was ich nie wieder missen möchte. Gerade, wenn man einen Rechner neu aufsetzen muss ist das Vorgehen echt Gold wert!