Files
dotfiles/README.md

6.9 KiB

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.yaml definiert
  • 🚀 Ein Skript für alles: Nur noch ein einziges dotfiles Kommando
  • 🎯 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 Daten
  • machines/*/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

  1. Datei manuell kopieren:

    mkdir -p shared/tmux
    cp ~/.tmux.conf shared/tmux/tmux.conf
    
  2. config.yaml erweitern:

    • Symlink-Definition zu symlinks -> shared hinzufügen
    • Push-Definition zu push_sources -> shared hinzufügen
  3. Testen und sichern:

    ./dotfiles install    # Test der neuen Symlinks
    ./dotfiles push       # Änderungen sichern
    

Konfiguration entfernen

  1. Aus config.yaml entfernen (entsprechende Zeilen löschen)
  2. Symlink entfernen: rm ~/.tmux.conf
  3. Aus Repository entfernen: rm -rf shared/tmux/
  4. 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'))"
# 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

  1. config.yaml ist der Schlüssel: Alle Änderungen werden dort definiert
  2. Backup: Existierende Dateien werden automatisch gesichert
  3. KISS-Prinzip: Ein Skript, eine Konfigurationsdatei - einfach!
  4. 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.