DTDEV

Dotfiles Management einfach halten

Veröffentlicht am 7.1.2025.
tl;dr
Statt chezmoi, stow etc. nutze ich ein einfaches Shell-Script, um mein dotfiles Repository mit den korrespondierenden Daten und Verzeichnissen zu verknüpfen.

Nachdem ich mittlerweile fast ausschließlich im Terminal arbeite, nutze ich auch überwiegend Tools, die eine Konfiguration über Dotfiles ermöglichen. Damit sind die Konfigurationsdateien gemeint, die mit einem Punkt beginnen und sich im Home-Verzeichnis des Benutzers befinden. Beispiele sind .bashrc, .zshrc, .vimrc, .gitconfig und viele mehr. Weil ich durch meinen Job und meine Projekte auf verschiedenen Rechnern arbeite, möchte ich meine Dotfiles einfach verwalten und auf jedem Rechner synchron halten. So bleibt meine Arbeitsumgebung konsistent und ich kann schnell zwischen verschiedenen Rechnern wechseln.

Wenn man sich mit Dotfile Management beschäftigt, werden einem schnell Lösungen wie chezmoi oder GNU Stow empfohlen. Diese Tools sind sehr mächtig und bieten viele Funktionen, die ich persönlich nicht benötige. Ich habe mich deshalb für eine einfachere Lösung entschieden, die ich hier vorstellen möchte.

Ich halte meine Dotfiles in einem Git-Repository. Damit habe ich nicht nur eine sichere Versionierung, sondern habe eben auch die Verteilung auf verschiedene Systeme gelöst. Um die Konfigurationsdateien und -Ordner aus meinem geclonten Repository an die richtige Stelle im Home-Verzeichnis zu verlinken, nutze ich ein einfaches Shell-Script, dass Symlinks erstellt. Das Script ist in meinem Dotfiles-Repository enthalten und wird bei Bedarf ausgeführt. Es spielt auch keine Rolle, ob die Links bereits existieren oder nicht, das Script aktualisiert sie einfach. Andere Lösungen können sicher mehr, aber für mich reicht genau das hier vollkommen aus aktuell. Eine einfache Lösung mit maximaler Kontrolle.

Mein Script sieht so aus:

#!/bin/sh

# Description: Creates / Updates symbolic links for my dotfiles

BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)"

# Links

## Wezterm
ln -sfn "$BASE_DIR/wezterm/wezterm.lua" ~/.wezterm.lua
## Fish
ln -sfn "$BASE_DIR/fish/" ~/.config/fish
## Starship
ln -sfn "$BASE_DIR/starship/starship.toml" ~/.config/starship.toml
## NeoVim
ln -sfn "$BASE_DIR/nvim/" ~/.config/nvim

# Confirm
echo "Symbolic links created."

Das Script ist sehr einfach gehalten und verlinkt nur die Ordner und Dateien, die ich benötige. Neue Tools oder Toolset-Komponenten wie bspw. später TMUX füge ich hier einfach hinzu und starte im Anschluss das Script erneut.

Meine Struktur im Dotfiles Repository sieht aktuell so aus (einzelne Dateien überwiegend ausgeblendet hier):

.
├── README.md
├── fish
│   ├── completions
│   ├── conf.d
│   ├── config.fish
│   ├── fish_plugins
│   ├── fish_variables
│   ├── functions
│   └── themes
├── nvim
│   └── lua
│       ├── plugins
├── starship
├── utils
│   └── create_symlinks.sh
└── wezterm
└── wezterm.lua