6b4f19c2dc57c645ed3e43635bd3a0fb12c56908
Dotfiles - Multi-Machine Configuration Management
Ein einfaches und sicheres System zur Verwaltung von Konfigurationsdateien (Dotfiles) über mehrere Rechner hinweg. Nach dem KISS-Prinzip: Keep It Simple, Stupid.
✨ Features
- 🖥️ Multi-Machine Support: Separate Konfigurationen für Desktop, Laptop, Server
- 🔗 Symlink-basiert: Keine Kopien, direkte Verknüpfungen zu deinen Configs
- 🔐 Sichere Verschlüsselung: Sensible Daten mit transcrypt verschlüsselt
- ⚙️ Konfigurationsgesteuert: Alles wird über
config.yamldefiniert - 🚀 Ein Skript für alles: Nur noch ein einziges
dotfilesKommando - 🎯 Automatische Erkennung: Maschinenerkennung ohne manuelle Konfiguration
📂 Struktur
configs/
├── machines/ # Maschinenspezifische Konfigurationen
│ ├── desktop/ # Desktop-Computer Configs
│ ├── laptop/ # Laptop/Notebook Configs
│ └── server/ # Server-System Configs
├── shared/ # Geteilte Konfigurationen
│ ├── shell/ # Shell-Configs (bash, zsh, etc.)
│ ├── vim/ # Vim-Konfiguration
│ ├── git/ # Git-Konfiguration
│ └── ssh/ # SSH-Konfiguration (öffentlich)
├── sensitive/ # Verschlüsselte sensible Daten
├── dotfiles # ⭐ DAS zentrale Management-Skript
├── config.yaml # ⚙️ Zentrale Konfiguration (definiert alles!)
└── README.md # Diese Dokumentation
🚀 Schnellstart
1. Repository klonen
git clone <your-dotfiles-repo-url> ~/.dotfiles
cd ~/.dotfiles
2. Dotfiles installieren
./dotfiles install
3. Aktuelle Configs sichern
./dotfiles push
4. Verschlüsselung einrichten (optional)
./dotfiles setup-transcrypt
📋 Alle Befehle
Installation und Management
./dotfiles install # Installiere alle Dotfiles (Symlinks)
./dotfiles push # Sammle und committe aktuelle Configs
./dotfiles push --push # Sammle, committe und push zu Remote
./dotfiles list # Zeige installierte Konfigurationen
Verschlüsselung
./dotfiles setup-transcrypt # Interaktive Transcrypt-Einrichtung
./dotfiles setup-transcrypt --auto-password # Mit automatischem Passwort
./dotfiles setup-transcrypt --force # Erneut konfigurieren
Hilfe
./dotfiles help # Zeige alle verfügbaren Befehle
⚙️ Konfiguration über config.yaml
Das Herzstück: Alle Symlinks, Push-Quellen und Einstellungen werden in config.yaml definiert!
Neue Konfiguration hinzufügen
Bearbeite config.yaml und füge hinzu:
# In der symlinks -> shared Sektion:
- src: "shared/tmux/tmux.conf"
dest: "~/.tmux.conf"
description: "Tmux-Konfiguration"
# In der push_sources -> shared Sektion:
- src: "~/.tmux.conf"
dest: "shared/tmux/tmux.conf"
description: "Tmux-Konfiguration"
Maschinenspezifische Configs
# Für Desktop-spezifische Konfigurationen:
- src: "machines/{machine}/i3_config"
dest: "~/.config/i3/config"
description: "i3-Konfiguration"
Vordefinierte Konfigurationen
config.yaml enthält bereits Definitionen für:
- tmux
- neovim
- vscode
- i3
🔐 Sichere Daten
Automatische Verschlüsselung
Alle Dateien in folgenden Orten werden automatisch verschlüsselt:
sensitive/- Allgemeine sensible Datenmachines/*/secrets/- Maschinenspezifische Geheimnisse- Dateien mit Namen wie
*secret*,*.key,*.pem - SSH private keys (
id_rsa,id_ed25519, etc.)
Sensible Dateien hinzufügen
# Einfach in die entsprechenden Verzeichnisse kopieren
cp ~/.ssh/id_rsa sensitive/ssh/id_rsa # Wird automatisch verschlüsselt
cp ~/.env sensitive/env/myproject.env # Wird automatisch verschlüsselt
echo "API_KEY=secret123" > sensitive/api_keys.txt # Wird automatisch verschlüsselt
🔧 Konfigurationen hinzufügen/entfernen
Neue Konfiguration hinzufügen
-
Datei manuell kopieren:
mkdir -p shared/tmux cp ~/.tmux.conf shared/tmux/tmux.conf -
config.yaml erweitern:
- Symlink-Definition zu
symlinks -> sharedhinzufügen - Push-Definition zu
push_sources -> sharedhinzufügen
- Symlink-Definition zu
-
Testen und sichern:
./dotfiles install # Test der neuen Symlinks ./dotfiles push # Änderungen sichern
Konfiguration entfernen
- Aus config.yaml entfernen (entsprechende Zeilen löschen)
- Symlink entfernen:
rm ~/.tmux.conf - Aus Repository entfernen:
rm -rf shared/tmux/ - Backup wiederherstellen (falls vorhanden):
mv ~/.tmux.conf.backup.* ~/.tmux.conf
📚 Beispiel-Workflows
Neuer Computer einrichten
# 1. Repository klonen
git clone git@github.com:username/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 2. Transcrypt entschlüsseln (falls vorhanden)
transcrypt -y
# 3. Dotfiles installieren
./dotfiles install
# 4. Shell neu starten
exec $SHELL
Konfiguration ändern und teilen
# 1. Lokale Änderungen machen
vim ~/.vimrc
# 2. Ins Repository sichern und pushen
./dotfiles push --push
# 3. Auf anderen Maschinen updaten
git pull
./dotfiles install # Falls neue Dateien hinzugekommen sind
Neue Anwendung hinzufügen (Beispiel: Tmux)
# 1. Konfiguration ins Repository kopieren
mkdir -p shared/tmux
cp ~/.tmux.conf shared/tmux/tmux.conf
# 2. config.yaml bearbeiten (Definitionen hinzufügen)
vim config.yaml
# 3. Testen
./dotfiles install
# 4. Sichern
./dotfiles push
🔍 Troubleshooting
Problem: "YAML-Parser-Fehler"
# Prüfe YAML-Syntax
python3 -c "import yaml; yaml.safe_load(open('config.yaml'))"
Problem: "Symlink funktioniert nicht"
# Prüfe Symlink-Ziel
readlink ~/.vimrc
# Liste installierte Symlinks
./dotfiles list
Problem: "Transcrypt-Fehler"
# Status prüfen
transcrypt --display
# Neu konfigurieren
./dotfiles setup-transcrypt --force
⚠️ Wichtige Hinweise
- config.yaml ist der Schlüssel: Alle Änderungen werden dort definiert
- Backup: Existierende Dateien werden automatisch gesichert
- KISS-Prinzip: Ein Skript, eine Konfigurationsdatei - einfach!
- Transcrypt-Passwort: Sicher aufbewahren!
🎯 Migration von alten Dotfiles-Systemen
Falls du von einem anderen Dotfiles-System migrierst:
# 1. Aktuelle Symlinks entfernen
find ~ -maxdepth 2 -type l -delete
# 2. Konfigurationen ins neue System kopieren
cp ~/.vimrc shared/vim/vimrc
cp ~/.gitconfig shared/git/gitconfig
# ... weitere Dateien
# 3. config.yaml entsprechend anpassen
# 4. Neu installieren
./dotfiles install
Das war's! Ein Skript, eine Konfigurationsdatei - dotfiles management kann so einfach sein! 🚀
Nach dem KISS-Prinzip: Keep It Simple, Stupid. ✨
Languages
Python
86.4%
Shell
8.1%
Jinja
5.5%