GNU Stow löste zuletzt bei mir eine selbstgebaute zentrale Verwaltung von Konfigurations-Dateien ab. Etwas Kontext: Ich habe für viele Programme Konfigurationsdateien in meinem Home-Directory zu liegen. Diese Dateien - meist einfach Dotfiles genannt - möchte ich auf mehreren Rechnern synchron halten. Dies ermöglicht es, dass sich die damit konfigurierten Programme wie tmux, Vim oder auch Git überall gleich und vorhersagbar verhalten. Weitere Kandidaten neben reinen Konfigurationsdateien sind z. B. Shell-Skripte für die tägliche Arbeit.
Die erste Idee, die man haben würde: einfach ein Git-Repository[1] erstellen, in dem man die Konfigurations-Details verwaltet. Das unmittelbar auftauchende Problem: Man möchte/kann/soll kein VCS-Repository im Home-Verzeichnis haben, da dies eine ganze Menge Probleme mit sich bringt und schlicht nicht praktikabel ist.
Der nächste Schritt ist dann, alle diese Dateien in einem Unterverzeichnis zu sammeln und dieses mit einem VCS managen. Das Installieren der Dateien ins Home-Verzeichnis kann man dann mit einem simplen Shell-Skript oder auch mit einem Makefile erledigen. Diese Variante habe ich jetzt jahrelang erfolgreich im Einsatz gehabt. Sobald ich ein neues Dotfile benötigte, erstellte ich dieses zusammen mit einem Make-Target in meinem dotfiles
-Verzeichnis. Der simple Aufruf von make
kopierte die Datei dann ins Homeverzeichnis (bzw. erstellte dort einen Symlink).
Vor ein paar Tagen scrollte dann dieser Tweet an mir vorbei:
Relearning GNU stow to apply to dotfiles, as one does when @fink_ says to. (E.g. http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html …) — @jpmensDas klang interessant und wurde noch besser als ich den verlinkten Blogpost las. GNU Stow ermöglicht es auf einfachste Weise die Dotfiles zentral zu verwalten und mit simplen Befehlen die gewünschten Dateien ins Home-Verzeichnis zu linken. Die Einsparung gegenüber dem vorhandenen Makefile sieht im ersten Moment nicht allzu groß aus, aber wenn ich mir das Schreiben von Make-Targets sparen kann, dann kostet das zum Einen weniger Zeit und eliminiert zum Anderen natürlich mögliche Fehlerquellen.
Ich musste in meinem dotfiles
-Verzeichnis nur ein paar Sachen umbenennen bzw. verschieben und war innerhalb kürzester Zeit in der Lage meine Dotfiles mit Stow ins Home-Directory zu befördern.
Der im Tweet verlinkte Blog-Artikel erklärt sehr gut und abschließend, wie man seine Dotfiles Stow-kompatibel organisiert.
Bonus: Arbeitet man mit mehreren User-Accounts auf einer Maschine, reicht ein zentrales Dotfiles-Directory, aus welchem man dann mit der –target
-Option von Stow Symlinks auf die Config-Files in die verschiedenen Home-Directories platziert.
[1] Jede andere Versionsverwaltungs-Software ist ebenfalls geeignet.