Wie man seine .dotfiles mit GNU Stow Schritt für Schritt verwaltet

Letzte Aktualisierung: 17/12/2025
Autor: Holger
  • Mit GNU Stow können Sie Dotfiles in einem einzigen Repository zentralisieren und sie auf saubere und reversible Weise über Symlinks mit dem System verknüpfen.
  • Es gibt zwei Hauptorganisationsmodelle: ein einheitliches Repository und einen paketbasierten Ansatz, jeweils mit unterschiedlichem Modularitätsgrad.
  • Die Kombination von Stow und Git vereinfacht das Versionieren, Sichern und Replizieren von Konfigurationen auf mehreren Rechnern mit nur wenigen Schritten. Befehle.
  • Gute Vorgehensweisen wie die Verwendung von .stow-local-ignore, die Beachtung der Verzeichnisstruktur und die Vermeidung der Vermischung von echten Dateien und symbolischen Links gewährleisten einen robusten Workflow.

Punktdateien mit GNU Stow verwalten

Und usa Linux, macOS oder Termux auf Android Jeden Tag, früher oder später, sammeln sich unzählige Konfigurationsdateien an, die über Ihr gesamtes System verstreut sind. Home-Verzeichnis: .zshrc, .bashrc, .config, nvim, Hyprland usw. Wenn man nur einen Computer hat, kann man überleben, aber sobald man mit mehreren Computern oder Servern arbeitet, ist es eine ganz andere Geschichte, all diese auf dem neuesten Stand zu halten.

In diesem Zusammenhang kommt Folgendes zum Tragen. GNU Stow, ein symbolischer Linkmanager Dies hat sich zu einer der saubersten, einfachsten und reversibelsten Methoden zur Verwaltung von Dotfiles entwickelt. Es ist nicht die einzige Möglichkeit (es gibt Alternativen wie Git Bare Repositories, yadm, Chezmoi, Dotbot usw.), aber seine minimalistische Philosophie ist ideal, wenn man eine leistungsstarke Lösung ohne großen Aufwand sucht.

automatisierte Bereitstellung mit wl --import
Verwandte Artikel:
Automatisierte Bereitstellung mit WSL –import: von Null auf Produktion

Was genau ist GNU Stow und warum ist es nützlich für die Verwaltung von .dotfiles?

GNU Stow ist ursprünglich ein „Symlink-Farm-Manager“.Ein Tool, das entwickelt wurde, um mehrere Dateipakete an einem Ort zu organisieren und sie mithilfe symbolischer Links in einem anderen Verzeichnis zugänglich zu machen. Obwohl es ursprünglich für die Verwaltung lokaler Softwareinstallationen konzipiert wurde, hat es sich in der Community schnell auch für die Bearbeitung von Punktdateien durchgesetzt, da es perfekt dafür geeignet ist.

Die Grundidee ist ganz einfach: Sie speichern alle Ihre Einstellungen in einer einzigen Datei. zentrales Repository (z. B. ~/dotfiles)Diese Dateien sind so strukturiert, als würden sie sich in Ihrem Home-Verzeichnis befinden, und Stow erstellt automatisch symbolische Links von Ihrem Home-Verzeichnis zu diesen Dateien. Dadurch können Sie sie mit Git versionieren, auf mehreren Rechnern klonen und Ihre Umgebung mit wenigen Befehlen reproduzieren.

Etwas Wichtiges: Stow ist im engeren Sinne kein „Dotfile-Tool“.Es speichert keinen eigenen Zustand, verwaltet keine Datenbank, verwendet keine Vorlagen und keine Verschlüsselung. Es erstellt und löscht lediglich symbolische Links entlang einer Verzeichnisstruktur. Genau deshalb ist es so leicht verständlich und rückgängig zu machen.

Diese minimalistische Philosophie steht im Gegensatz zu komplexeren Lösungen wie Chezmoi, die Vorlagen, Geheimnisverwaltung, Integration mit Passwortmanagern und einen stärker automatisierten Arbeitsablauf bieten. Mit Stow haben Sie die Kontrolle: Alles befindet sich im Dateisystem und in Ihrem Git-Repository., ohne Zwischenschichten.

Vorteile der Verwendung von Stow im Vergleich zu anderen Methoden zur Verwaltung von Dotfiles

Bevor Stow populär wurde, verwalteten viele Leute ihre Dotfiles mit den Befehlen "cp" und "mv".Konfigurationen wurden entweder manuell zwischen Computern kopiert oder in einem Repository verwaltet, das ständig aktualisiert werden musste. So kam es leicht vor, dass mehrere Versionen derselben Datei existierten und man nicht mehr wusste, welche tatsächlich verwendet wurde.

Bei Stow befinden sich alle „echten“ Dateien in Ihrem Dotfiles-Verzeichnis und Ihr $HOME-Verzeichnis enthält nur symbolische LinksDas bedeutet, dass Sie beim Bearbeiten von beispielsweise ~/.zshrc die Datei direkt im Repository ändern. Es gibt keine Duplikate, keine Desynchronisierung und Sie müssen sich nicht merken, was wohin kopiert werden soll.

Ein weiterer klarer Vorteil ist die Reversibilität: Wenn Sie die von Stow vorgenommenen Änderungen rückgängig machen möchten, führen Sie einfach „stow -D package“ aus. Löschen Sie im Ordner „dotfiles“ alle symbolischen Links, die für dieses Paket erstellt wurden. Dadurch werden Ihre eigentlichen Konfigurationen nicht gelöscht (diese bleiben im Repository erhalten), sondern nur die symbolischen Links zum Zielpaket entfernt.

Darüber hinaus funktioniert Stow sehr gut mit Git: Sie können ~/dotfiles wie ein normales Repository versionieren.Sie können Commits durchführen, Branches erstellen, GitHub oder GitLab als Backup verwenden usw. Stow ignoriert beim Generieren von Links automatisch den .git-Ordner, sodass Sie nicht Gefahr laufen, Ihr $HOME-Verzeichnis mit internen Git-Dateien zu füllen.

Und schließlich, im Gegensatz zu anderen, schwereren Werkzeugen, Stow ist üblicherweise auf jeder Linux-Distribution und sogar auf macOS über Homebrew verfügbar.Es ist im Grunde ein Skript Geschrieben in Perm mit sehr wenigen Abhängigkeiten und funktioniert in jeder Umgebung UNIX.

Gängige Alternativen: Git bare, yadm, Chezmoi, Dotbot…

Wenn man die Verwaltung von Punktdateien ernst nimmt, erscheint üblicherweise dieselbe Liste von Optionen: Git-Repository „bare“, yadm, Dotbot, Chezmoi und StowJeder Ansatz hat seinen eigenen Stil und sein eigenes Publikum, daher ist es wichtig, Stow in dieses Ökosystem einzuordnen.

  SteamOS 3.7.15: Alle neuen Funktionen und warum sie wichtig sind

Die Methode von leeres Git-Repository Dabei wird ein Repository ohne zugehöriges Arbeitsverzeichnis initialisiert und Git-Aliase verwendet, sodass $HOME selbst als Arbeitsverzeichnis dient. Vorteile: Es gibt keine symbolischen Links, Git arbeitet direkt mit den Dateien, und der Befehlsablauf ist sehr einfach. Viele Benutzer berichten, dass sie überrascht waren, wie leicht es war, einem Tutorial im „DT“-Stil zu folgen und es ohne Änderungen an symbolischen Links zum Laufen zu bringen.

Außerdem Chezmoi konzentriert sich ausschließlich auf die fortgeschrittene Dotfile-Verwaltung.Zu den Funktionen gehören: Vorlagen für den Umgang mit Unterschieden zwischen verschiedenen Systemen, Integration mit Passwortmanagern, Dateiverschlüsselung mit GPG oder AGE, Hooks zum Ausführen von Skripten während der Installation, umfassende plattformübergreifende Unterstützung und vieles mehr. Es ist ideal, wenn Sie Folgendes benötigen: Geheimnisse verwalten, viele verschiedene Systeme unterstützen oder komplexe Installationen automatisieren.

Stow steht am anderen Extrem: Er weiß nichts über Geheimnisse, Vorlagen oder Skripte.Es erstellt einfach saubere symbolische Links. Für viele Benutzer ist das ein Vorteil: weniger Lernaufwand, weniger „magisches“ Verhalten und mehr Transparenz. Benötigen Sie komplexe bedingte Logik, ist Chezmoi wahrscheinlich besser geeignet; möchten Sie Ihre Konfigurationen einfach nur unkompliziert organisieren, ist Stow ein sehr zuverlässiger Klassiker.

Es gibt auch Tools wie Yadm oder Dotbot automatisieren unzählige Aufgaben (einschließlich der Ausführung von Nachinstallationsskripten, dem Klonen von Repositories, der Installation von Paketen usw.). Trotzdem bevorzugen viele Entwickler weiterhin Stow, da es einfach zu überprüfen ist, sich gut in bestehende Git-Workflows integriert und sich nahtlos sowohl an minimalistische Setups als auch an anspruchsvollere Desktop-Umgebungen anpasst.

Organisationsansätze: einheitliches Repository vs. paketbasiertes Repository

Wenn Sie Stow verwenden, müssen Sie unter anderem folgende Entscheidungen treffen: Wie Sie Ihr Dotfiles-Repository strukturierenIm Großen und Ganzen gibt es zwei gängige Vorgehensweisen: den einheitlichen Ansatz und den paketbasierten Ansatz.

Im einheitlichen Modell hat Ihr Dotfiles-Repository praktisch die gleiche Form wie Ihr $HOME-Verzeichnis: Dateien wie .bashrc oder .zshrc im Stammverzeichnis und Ordner wie .config/nvim oder .config/lazygit innerhalbEtwa so:

dotfiles-unified/
├── .bash_aliases
├── .bash_completion/
│ └── alacritty.bash
├── .bashrc
└── .config/
├── lazygit/config.yml
└── nvim/…

Bei diesem Design wechseln Sie in den Repository-Ordner und führen folgende Befehle aus: verstauen. und plötzlich Alle Ihre Einstellungen sind mit Ihrem $HOME-Verzeichnis verknüpft.Es ist ungemein praktisch, wenn man seine gesamte Umgebung mit einem einzigen Befehl auf einen neuen Rechner klonen möchte und keine großen Unterschiede zwischen den Systemen benötigt.

Der paketbasierte Ansatz funktioniert anders: Sie erstellen ein Unterverzeichnis pro „Modul“ oder Anwendung.Zum Beispiel eines für Bash, eines für nvim, eines für LazyGit, eines für Zsh, eines für Hyprland usw. Jedes Verzeichnis enthält die Dateien mit dem vollständigen Pfad, den sie in Ihrem $HOME-Verzeichnis hätten. Etwa so:

dotfiles-packages/
├── bash/
│ ├── .bash_aliases
│ ├── .bash_completion/alacritty.bash
│ └── .bashrc
├── lazygit/.config/lazygit/config.yml
└── nvim/.config/nvim/…

Mit diesem Schema können Sie festlegen, welche Pakete auf den einzelnen Maschinen "aktiviert" werden sollen: Auf einem Rechner führt man „stow bash nvim lazygit“ aus, auf einem anderen vielleicht „stow zsh nvim“.Dies ist sehr nützlich, wenn Sie mit mehreren Distributionen arbeiten (zum Beispiel Arch auf einem PC und Fedora auf einem anderen) oder mit verschiedenen Shells (fish auf einem Rechner, bash auf einem anderen) und Sie alles in einem einzigen Repository speichern, aber auswählen möchten, was in welcher Umgebung angewendet werden soll.

Der Haken? Es ist etwas komplexer: „Verstauen“ reicht nicht mehr aus. Und das ist alles; Sie müssen sich nur noch merken, welche Pakete Sie benötigen.Alternativ lässt sich für jeden Rechner ein kleines Skript erstellen, das Stow mit der entsprechenden Kombination aufruft. Viele Benutzer bevorzugen jedoch diese detaillierte Steuerung, insbesondere wenn auf jedem Rechner hochspezifische Software installiert ist.

So funktioniert Stow intern: das Konzept des Verzeichnis-„Mirrorings“

Der Schlüssel zum Verständnis von Stow liegt in seinem System von Spiegelung von VerzeichnisstrukturenStow errät keine Pfade; es schaut sich einfach an, wie die Dateien innerhalb des "Pakets" organisiert sind und platziert die entsprechenden symbolischen Links im Zielverzeichnis.

Wenn eine Anwendung beispielsweise ihre Konfiguration in folgendem Format erwartet:

~/.config/ghostty/

Ihr Modul innerhalb von ~/dotfiles sollte genau diesen relativen Pfad haben:

~/dotfiles/ghostty/.config/ghostty/

Alles, was Sie dort ablegen (z. B. eine Datei namens „config“), wird von Stow mit dem korrekten Speicherort verknüpft. Dadurch liest Ghostty seine Konfiguration weiterhin aus ~/.config/ghostty/config, diese Datei verweist aber tatsächlich auf die in Ihrem Repository gespeicherte Konfiguration.

  Was ist das Salt in einem Linux-Passwort-Hash und warum ist es wichtig?

Dieses Muster wiederholt sich für jedes Werkzeug: Waybar hätte etwa eine Konfigurationsdatei wie ~/dotfiles/waybar/.config/waybar/, Neovim hingegen ~/dotfiles/nvim/.config/nvim/.Und so weiter. Der Prozess ist extrem einheitlich, wodurch die Skalierung auf weitere Programme nahezu mechanisch wird.

Für Konfigurationsdateien, die sich direkt in $HOME befinden (wie z. B. ~/.gitconfig oder ~/.zshrc), ist die Logik identisch: Innerhalb des Git-Pakets befindet sich eine .gitconfig-Datei im Stammverzeichnis.Stow erstellt dann den Link in Ihrem Home-Verzeichnis, wenn Sie „stow git“ ausführen.

Schritt für Schritt: Einrichten eines Dotfiles-Repositorys mit Stow

Der typische Arbeitsablauf mit Stow ist einfach und lässt sich sowohl unter Linux als auch unter macOS in wenigen klar definierten Schritten zusammenfassen. Wichtig ist, sich daran zu gewöhnen, dass die "echten" Dateien immer im Repository liegen. und nicht in Ihrem gesamten Zuhause verstreut.

Erstellen Sie zunächst das Verzeichnis, in dem Ihre Konfigurationsdateien gespeichert werden sollen. Viele verwenden dazu … ~/.dotfiles oder ~/dotfilesDer Name ist das Unwichtigste:

mkdir -p ~/.dotfiles
cd ~/.dotfiles

Dann Verschieben Sie Ihre aktuellen Konfigurationsdateien in das Repository.Wenn Sie beispielsweise eine .bashrc-Datei in Ihrem Home-Verzeichnis haben und diese mit Stow verwalten möchten, könnten Sie Folgendes tun:

mv ~/.bashrc ~/.dotfiles/.bashrc

Wenn Sie den paketbasierten Ansatz bevorzugen, würden Sie die Datei nicht im Stammverzeichnis des Repositorys belassen, sondern in einem Ordner namens „bash“ ablegen und dabei den vollständigen Pfad beibehalten:

mkdir -p ~/.dotfiles/bash
mv ~/.bashrc ~/.dotfiles/bash/.bashrc

Die Vorgehensweise bei Konfigurationen innerhalb der Datei .config ist analog: Sie replizieren die Verzeichnisstruktur innerhalb des Repos.Für Neovim könnte man beispielsweise Folgendes haben:

mkdir -p ~/.dotfiles/nvim/.config/nvim
mv ~/.config/nvim/* ~/.dotfiles/nvim/.config/nvim/

Sobald die Dateien in Ihrem Repository vorliegen, empfiehlt es sich, die Originaldateien in $HOME zu löschen oder umzubenennen, um Konflikte zu vermeiden. Stow erstellt später die symbolischen Links in den Pfaden neu, in denen Anwendungen ihre Konfigurationsdateien erwarten.

GNU Stow auf verschiedenen Plattformen installieren

Die Installation von Stow variiert je nach Plattform geringfügig, ist aber im Großen und Ganzen äußerst unkompliziert. Unter macOS ist die Verwendung von Homebrew üblich., der am weitesten verbreitete Paketmanager auf diesem System:

brew install stow

Bei Linux-Distributionen wie Debian oder Ubuntu ist es üblich, apt zu verwenden.:

sudo apt install stow

En Arch Linux und Derivate davon finden Sie in den offiziellen Repositories und es wird installiert mit pacman ohne viel Geheimnis:

sudo pacman -S stow

Nach der Installation befindet sich der Befehl "stow" in Ihrem PATH. Es gibt keine Daemons oder Hintergrunddienste, nur eine Binärdatei, die bei Bedarf ausgeführt wird.Mit dem Befehl „stow --version“ können Sie überprüfen, ob alles korrekt funktioniert, und damit ist alles erledigt.

Auf Systemen, auf denen Sie bereits Tools wie Oh My Zsh verwenden, fügt sich Stow sehr gut ein: Sie können sowohl die .zshrc-Datei als auch die Konfiguration von Plugins und Themes in Ihrem zentralen Repository speichern und alles mit wenigen Befehlen anwenden. Viele Nutzer mit mehreren Download Mac Oder, so sagen sie, durch die Verwendung einer Mischung aus Linux und macOS, dass sie auf diese Weise überall die gleiche Shell und die gleiche Eingabeaufforderung haben..

Unerwünschte Dateien können mit .stow-local-ignore ignoriert werden.

Eine der feinen Details von Stow ist das Ignoriersystem. Standardmäßig ignoriert Stow bereits bestimmte typische Versionskontrolldateien. wie z. B. .git, .gitignore, .gitmodules, CVS-Verzeichnisse, RCS usw. Es gibt jedoch Situationen, in denen eine spezifischere Kontrolle erforderlich ist, beispielsweise unter macOS mit dem berüchtigten .DS_Store.

Mit Stow können Sie eine Datei erstellen namens .stow-local-ignore In dem Verzeichnis, aus dem Sie den Befehl ausführen, befindet sich eine Datei, die definiert, welche Muster lokal ignoriert werden sollen. Sobald Sie diese Datei erstellt haben, wird die Standard-Ignorierliste nicht mehr verwendet. Sie müssen die Muster daher selbst hinzufügen und alle zusätzlichen Muster angeben.

Ein typisches Beispiel für den Inhalt von .stow-local-ignore wären Kommentare und Muster für CVS-Konflikte, Emacs-Backups, Versionskontrolldateien und am Ende .DS_Store damit Stow keine Fehlermeldung ausgibt oder versucht, die vom Finder erzeugten Dateien zu verknüpfen:

# Comentarios y líneas en blanco permitidas
RCS
.+,v
CVS
\.#.+
\.cvsignore
\.svn
_darcs
\.hg
\.git
\.gitignore
\.gitmodules
.+~
\#.*\#
^/README.*
^/LICENSE.*
^/COPYING
.DS_Store

Dadurch wird verhindert, dass Stow versucht, völlig irrelevante Dateiverknüpfungen zu erstellen, und Sie vermeiden lästige Fehler beim Ein- und Auspacken von PaketenDies ist besonders nützlich, wenn Sie Ihr Repository häufig über grafische Oberflächen durchsuchen, die Hilfsdateien erzeugen.

  Omarchy: DHHs Engagement für ein fein abgestimmtes Arch + Hyprland

Beachten Sie, dass Stows Ignorierliste unabhängig von der .gitignore-Datei ist, die Sie in Ihrem Repository verwenden: Die erste Regel steuert, was verlinkt wird, die zweite, was versioniert wird.Mithilfe dieser beiden Tools lässt sich das Verhalten von Stow und Git präzise anpassen.

Grundlegende Stow-Nutzung: Verknüpfen und Aufheben der Verknüpfung von Konfigurationspaketen

Da alles vorbereitet ist, gestaltet sich der Arbeitsalltag bei Stow sehr effizient. Stow sollte immer aus dem Verzeichnis Ihres Dotfiles-Repositorys ausgeführt werden.nicht von Ihrem $HOME-Verzeichnis oder von beliebigen Routen, damit die generierten relativen Routen Sinn ergeben.

Angenommen, Sie haben bereits ein Modul namens „ghostty“ mit Ihrer Konfigurationsdatei in ~/dotfiles/ghostty/.config/ghostty. Sobald es sich im Repository befindet, können Sie es wie folgt speichern:

cd ~/dotfiles
stow ghostty

Dieser Befehl bewirkt, dass auf Ihrem System symbolische Links von ~/.config/ghostty zu den Dateien in ~/dotfiles/ghostty/.config/ghostty erstellt werden. Wenn Sie „ls -l ~/.config/ghostty“ ausführen, sehen Sie Pilze (->), die das Ziel jedes symbolischen Links anzeigen.Bestätigung, dass alles korrekt verlinkt ist.

Wenn Sie sich für einen einheitlichen Ansatz entscheiden und alles gleichzeitig verknüpfen möchten, Sie können „stow .“ im Stammverzeichnis des Repos ausführen.Stow interpretiert jedes Unterverzeichnis als Paket oder arbeitet direkt mit der Struktur, wenn diese flach ist, und erstellt symbolische Links für alles, was hineinpasst.

Um ein bestimmtes Paket rückgängig zu machen, rufen Sie Stow einfach mit der Option -D (für „Löschen“ in der Terminologie des Tools) auf. Zum Beispiel:

cd ~/dotfiles
stow -D ghostty

Dadurch werden die von mir für dieses Modul erstellten symbolischen Links entfernt, ohne die Originaldateien, die sich noch im Repository befinden, anzutasten. Es ist eine sehr saubere Methode, Konfigurationen von einem bestimmten Rechner zu "deinstallieren". ohne sie vollständig zu verlieren.

Es ist entscheidend, einen sehr häufigen Fehler zu vermeiden: Führen Sie Stow nicht aus dem $HOME-Verzeichnis oder aus anderen Ordnern außerhalb des Repositorys aus.Wenn Sie so vorgehen, riskieren Sie, Verknüpfungen an unerwarteten Stellen zu erstellen und Ihr Home-Verzeichnis mit unerwünschten Dateien zu überladen. Wechseln Sie daher immer mit `cd` in das Repository und fügen Sie dort `stow` hinzu.

Integrieren Sie Git und GitHub mit Stow in Ihren Dotfile-Workflow.

Das Schöne an diesem ganzen Setup ist die Kombination von Stow und Git, so dass Ihr Die Konfigurationsdateien sind versioniert, werden remote gesichert und lassen sich problemlos auf anderen Rechnern replizieren.Der Prozess ist sehr unkompliziert und unterscheidet sich nicht von anderen Projekten, die Sie mit Git verwalten.

Initialisieren Sie im Ordner „dotfiles“ ein neues Repository, falls Sie dies noch nicht getan haben:

cd ~/dotfiles
git init

Von dort aus können Sie Ihre Dateien hinzufügen, Commits durchführen und wie gewohnt mit Branches arbeiten. Ein mögliches Starten könnte sein:

git add .
git commit -m "Primer commit de mis dotfiles"

Der nächste Schritt besteht üblicherweise darin, ein Repository auf GitHub, GitLab oder einem anderen Dienst zu erstellen und es als Remote hinzuzufügen. Etwa so:

git remote add origin git@github.com:tuusuario/dotfiles.git
git push -u origin main

Man sollte bedenken, dass manche Leute ihre Dotfiles zwar in öffentlichen Repositories veröffentlichen, Die umsichtigste Vorgehensweise ist die Verwendung privater Repositories, wenn Sie sensible Daten verarbeiten. oder Routen, die zu viele persönliche Informationen preisgeben könnten. In jedem Fall können Sie dies bei Bedarf durch eine externe Verschlüsselung Ihrer Geheimnisse ergänzen.

Um genauer festzulegen, was versioniert wird, ist es außerdem ratsam, eine .gitignore-Datei im Repository zu haben, in der Sie beispielsweise .DS_Store oder andere Dateien hinzufügen, die Sie nicht hochladen möchten. Stow ignoriert .git bereits von sich aus, aber Git weiß nichts von .stow-local-ignore.Daher dienen die beiden Dateien unterschiedlichen Zwecken und ergänzen sich gut.

Der Tagesablauf ist sehr klar: Sie klonen Ihr Dotfiles-Repository auf einen neuen Rechner, installieren Stow, führen „stow .“ oder „stow Paket1 Paket2…“ aus und schon haben Sie Ihre replizierte Umgebung.Wenn Sie später Ihre Neovim-Konfiguration oder Ihre .zshrc-Datei ändern, führen Sie einen Commit und Push durch. Auf den anderen Rechnern genügt dann ein einfaches git pull gefolgt von stow, um die Links zu aktualisieren, falls Sie neue Dateien oder Pakete hinzugefügt haben.