dotfix
Hält mehrere Macs auf demselben Stand — Homebrew-Pakete, Shell-Konfiguration und Config-Dateien, gruppiert in Sets, die jede Maschine einzeln aktiviert. Ändert nichts ohne Rückfrage und überschreibt handgeschriebene Dateien nie still.
Worum es geht
Der zweite Mac fängt als Woche voller Kleinigkeiten an: das Paket, das man zu installieren vergessen hat, das Alias, das es nur auf dem anderen Rechner gibt, die Konfigurationsdatei, die man einmal angepasst und nie übertragen hat.
dotfix geht den umgekehrten Weg: Du beschreibst, was eine Maschine haben soll — dotfix meldet, was abweicht, und ändert nur, was du bestätigst. Nichts passiert hinter deinem Rücken, und eine von Hand bearbeitete Datei wird nie stillschweigend überschrieben. Es gibt dotfix als Kommandozeilen-Werkzeug und als Menüleisten-App; beide führen dieselben Schritte aus.
Highlights
- Sets statt einer großen Konfiguration — ein Set bündelt Paketliste, Shell-Fragmente und verwaltete Dateien. Jede Maschine aktiviert nur die Sets, die sie braucht.
- Erzeugte Shell-Konfiguration — die
.zshrcwird aus den Fragmenten der aktiven Sets generiert. Ein Set abschalten entfernt seine Zeilen wieder, statt Reste zu hinterlassen. Maschinenspezifisches bleibt in einer eigenen Datei, die am Ende eingebunden wird. - Dateien als Vorlagen — Pfade und Werte werden beim Schreiben eingesetzt, damit nichts an einen einzelnen Rechner gebunden ist.
- Erkennt, wer was geändert hat — dotfix vergleicht drei Stände: was das Repository will, was auf der Maschine liegt, und was dotfix selbst zuletzt geschrieben hat. Erst der dritte macht den Unterschied zwischen „ein anderer Mac hat das hinzugefügt” und „ich habe das hier absichtlich entfernt”.
- Nichts ohne Bestätigung — jede Abweichung wird gemeldet und erklärt, Überschreibungen bekommen vorher ein Backup, und ein auseinandergelaufenes Repository wird gemeldet statt zusammengeführt.
- Zugangsdaten bleiben draußen — ein Set verweist nur auf einen logischen Namen; wo der liegt, entscheidet die Maschine (macOS-Schlüsselbund, 1Password oder eine verschlüsselte Datei). Dateien mit aufgelöstem Geheimnis werden restriktiv angelegt, Werte in allen Ausgaben geschwärzt, und das Übernehmen von Dateien, die nach Zugangsdaten aussehen, verweigert dotfix mit dem Vorschlag, stattdessen eine Vorlage anzulegen.
- Stündliche Prüfung im Hintergrund — ein Hintergrunddienst schreibt eine einzelne Statuszeile, die deine Shell beim Start ausgibt. Gibt es nichts zu tun, gibt sie nichts aus; das Auslesen ist ein Dateizugriff und kostet pro Terminal-Tab nichts.
- Deine Daten, dein Repository — die Konfiguration liegt in einem privaten Git-Repository, das dir gehört. dotfix selbst speichert nichts über dich.
Tech-Stack
- Rust (Edition 2024) als Cargo-Workspace: Kern, Kommandozeile und App-Backend
- Tauri 2 mit React 19, TypeScript und Tailwind CSS 4 für die Menüleisten-App
- Die gesamte Abgleich-Logik im Kern spricht mit Homebrew, Dateisystem und Git nur über Schnittstellen — dadurch ist sie vollständig gegen Attrappen testbar
- macOS-Builds signiert und notarisiert; die Veröffentlichung bricht ab, wenn eine Signatur fehlt, statt eine Warnung beim ersten Start in Kauf zu nehmen
Installation
brew tap NoiXdev/tap
brew install dotfix
Die Menüleisten-App ist optional: das DMG aus dem Latest Release öffnen und dotfix nach „Programme” ziehen.
Danach die Einrichtung — von der Seite, die dir lieber ist, beide tun dasselbe:
dotfix init --set-up-new # erste Maschine: Repository aus diesem Mac aufbauen
dotfix init # jede weitere: klonen und anwenden
Der Alltag läuft über dotfix status (zeigt nur an, schreibt nie), dotfix apply,
dotfix adopt für lokal Gewachsenes und dotfix doctor zum Prüfen der Einrichtung.
Für Entwickler
git clone https://github.com/NoiXdev/dotfix.git
cd dotfix
cargo test --workspace
Status
dotfix ist LIVE (v1.0.x) und wird aktiv weiterentwickelt. Issues und PRs sind willkommen — github.com/NoiXdev/dotfix.