ToolTamer – Systemkonfiguration und Pakete maschinenübergreifend synchronisieren
Wer auf mehreren Rechnern arbeitet, kennt das Spiel: Die .zshrc auf dem Laptop unterscheidet sich vom Desktop, auf einem Rechner fehlt ripgrep, auf einem anderen liegen noch ein halbes Dutzend Tools herum, die man einmal ausprobiert und nie aufgeräumt hat. Am besten über macOS und Linux hinweg.
Ich habe verschiedene Ansätze probiert, bevor ich ToolTamer gebaut habe.
Warum nicht Nix, chezmoi & Co.?
- Nix / Home Manager: Klingt in der Theorie perfekt — deklaratives Systemmanagement. In der Praxis: langsam, schwer zu debuggen, und in Kombination mit nix-darwin nach jedem macOS-Update mehr oder weniger kaputt. Auf reinem Linux besser, aber der Wartungsaufwand ist erheblich.
- Dotfile-Manager (chezmoi, stow, yadm): Die verwalten nur Konfigurationsdateien. Aber was nützt eine synchronisierte
.zshrc, die Tools referenziert, die auf dem Rechner gar nicht installiert sind? - Ansible: Overkill für eine persönliche Workstation. Ich will keine YAML-Playbooks pflegen, nur um
fzfzu installieren.
Was ich brauchte: Ein Tool, das beides kann — Pakete und Dateien, über macOS und Linux hinweg, ohne einen eigenen Paketmanager mitzubringen.
Was ToolTamer macht
ToolTamer ist ein Bash-Tool, das den vorhandenen Paketmanager nutzt — Homebrew auf macOS, apt oder pacman auf Linux. Die gesamte Konfiguration liegt in einem Git-Repository, das man auf allen Rechnern auscheckt.
Paketverwaltung
Einfache Textdateien definieren, was installiert sein soll:
fzf
ripgrep
lazygit
node
neovim
ToolTamer installiert fehlende Pakete und bietet an, nicht aufgelistete zu entfernen — abhängigkeitsbewusst, das heißt es deinstalliert niemals Pakete, die Abhängigkeiten anderer sind. Das hält das System sauber: Ein Tool ausprobieren, sich dagegen entscheiden, und ToolTamer räumt beim nächsten Lauf auf.
Dateisynchronisation
Konfigurationsdateien werden per SHA256-Prüfsumme verglichen, nicht zeilenweise. Eine files.conf definiert das Mapping:
kitty.conf:.config/kitty/kitty.conf
starship.toml:.config/starship.toml
Links steht der Dateiname in ToolTamers Verzeichnis, rechts das Ziel relativ zum Home-Verzeichnis. Wenn die Prüfsummen abweichen, fragt ToolTamer, was zu tun ist: Die Systemversion übernehmen, ToolTamers Version wiederherstellen, oder überspringen.
Hierarchische Konfiguration
Das Kernkonzept ist die Konfigurationshierarchie:
├── common/ # Basis für alle Rechner
├── common_mac/ # macOS-spezifisch
└── myMacBook/ # Nur dieser konkrete Rechner
└── includes.conf → enthält: common_mac
Auflösungsreihenfolge: common → Includes → Host. Spezifischere Konfigurationen gewinnen. So hat man eine gemeinsame Basis (Vim-Konfiguration, Shell-Aliase) und kann pro Rechner oder Plattform ergänzen oder überschreiben.
Interaktive Menüs
ToolTamer bietet fzf-gesteuerte Menüs (mit numerischem Fallback, falls fzf nicht installiert ist):
1. Update System - full system update
2. Files only - update only files
3. Snapshot System
4. Admin
5. Quit
Das Admin-Menü bietet zusätzlich: Dateien zwischen Konfigurationen verschieben, Diffs anzeigen, Duplikate bereinigen und eine integrierte lazygit-Ansicht des Konfig-Repos.
Typischer Workflow
- Ersten Rechner einrichten: ToolTamer installieren,
ttausführen, Konfiguration erstellen oder auf bestehendes Git-Repo verweisen. - Snapshot: "Snapshot System" erfasst den aktuellen Stand — installierte Pakete und konfigurierte Dateien.
- Git push: Über das Admin-Menü oder direkt auf der Kommandozeile.
- Zweiter Rechner: ToolTamer installieren, Git-Repo-URL angeben, "Update System" — fertig.
- Laufend: Änderungen auf einem Rechner → Snapshot → Push → Pull → Update auf den anderen.
CLI für Automatisierung
Neben dem interaktiven Menü gibt es direkte CLI-Befehle:
tt --syncFilesOnly # Nur Dateien
tt --updateToolTamer # Paket-Snapshot
tt --updateToolTamerFiles # Paket- + Datei-Snapshot
Damit lässt sich ToolTamer auch in Skripten oder Cron-Jobs einsetzen.
Dokumentation
Vollständige Dokumentation mit Installationsanleitung, Konfigurationsreferenz und How-tos:
sboesebeck.github.io/toolTamer
Quellcode
ToolTamer ist Open Source auf GitHub:
github.com/sboesebeck/toolTamer
Fazit
ToolTamer löst ein konkretes Problem: Mehrere Rechner über verschiedene Plattformen hinweg konsistent halten, ohne ein komplexes System wie Nix zu benötigen. Es nutzt die vorhandenen Paketmanager, speichert alles in Git, und ist am Ende ein paar hundert Zeilen Bash. Kein Framework, keine Abhängigkeiten, einfach ein Tool, das seinen Job macht.