diff --git a/micro/install-micro-dotfiles.sh b/micro/install-micro-dotfiles.sh new file mode 100755 index 0000000..131a797 --- /dev/null +++ b/micro/install-micro-dotfiles.sh @@ -0,0 +1,157 @@ +#!/bin/bash +# ---------------------------------------------------------- +# Micro + dotfiles-rene Setup-Skript (Mac & Linux/Pi) +# - Installiert micro (apt oder brew) +# - Stellt ~/git-projekte/dotfiles-rene sicher +# - Git-Repo klonen oder aktualisieren (git pull) +# - Symlinks für micro-Konfiguration setzen +# +# Dieses Skript ist dafür gedacht, IM Repo zu liegen: +# dotfiles-rene/micro/install-micro-dotfiles.sh +# ---------------------------------------------------------- + +set -e + +REPO_URL="https://dsm.motocamp.de:3051/rene/dotfiles-rene.git" +BASE_DIR="$HOME/git-projekte" +REPO_NAME="dotfiles-rene" +REPO_DIR="$BASE_DIR/$REPO_NAME" +MICRO_CONFIG_DIR="$HOME/.config/micro" + +echo "🚀 Starte Setup für micro + dotfiles-rene" +echo "Benutzer: $(whoami)" +echo "Home: $HOME" +echo + +# ---------------------------------------------------------- +# 0) OS-Erkennung +# ---------------------------------------------------------- +OS="$(uname -s)" +case "$OS" in + Linux) + OS_TYPE="linux" + ;; + Darwin) + OS_TYPE="mac" + ;; + *) + OS_TYPE="unknown" + ;; +esac + +echo "🧬 erkanntes System: $OS ($OS_TYPE)" +echo + +# ---------------------------------------------------------- +# 1) micro installieren (falls noch nicht vorhanden) +# ---------------------------------------------------------- +if command -v micro >/dev/null 2>&1; then + echo "✅ micro ist bereits installiert: $(command -v micro)" +else + echo "📦 micro ist nicht installiert, versuche Installation..." + + if [[ "$OS_TYPE" == "linux" ]]; then + if command -v apt >/dev/null 2>&1; then + echo " → Linux mit apt erkannt, installiere micro über apt" + sudo apt update + sudo apt install -y micro + else + echo "❌ apt wurde nicht gefunden. Bitte micro manuell installieren." + exit 1 + fi + elif [[ "$OS_TYPE" == "mac" ]]; then + if command -v brew >/dev/null 2>&1; then + echo " → macOS mit Homebrew erkannt, installiere micro über brew" + brew install micro + else + echo "❌ Homebrew wurde nicht gefunden. Bitte zuerst Brew installieren:" + echo " https://brew.sh/" + exit 1 + fi + else + echo "❌ Unbekanntes OS, kann micro nicht automatisch installieren." + exit 1 + fi +fi + +echo + +# ---------------------------------------------------------- +# 2) Verzeichnis für Git-Projekte anlegen +# ---------------------------------------------------------- +echo "📁 Stelle Verzeichnisstruktur sicher: $BASE_DIR" +mkdir -p "$BASE_DIR" +echo + +# ---------------------------------------------------------- +# 3) Repo klonen oder aktualisieren +# ---------------------------------------------------------- +if [[ -d "$REPO_DIR/.git" ]]; then + echo "🔄 Repo existiert bereits, aktualisiere: $REPO_DIR" + cd "$REPO_DIR" + # Hier werden Benutzername/Passwort (oder Token) bei HTTPS von git abgefragt + git pull --rebase +else + echo "⬇️ Klone Repo nach: $REPO_DIR" + cd "$BASE_DIR" + git clone "$REPO_URL" "$REPO_NAME" + cd "$REPO_DIR" +fi + +# Kurzer Check +if [[ ! -d "$REPO_DIR/micro" ]]; then + echo "❌ Fehler: Verzeichnis $REPO_DIR/micro existiert nicht!" + exit 1 +fi + +if [[ ! -f "$REPO_DIR/micro/settings.json" || ! -f "$REPO_DIR/micro/bindings.json" ]]; then + echo "❌ Fehler: micro/settings.json oder micro/bindings.json im Repo nicht gefunden!" + exit 1 +fi + +echo + +# ---------------------------------------------------------- +# 4) micro-Konfig-Verzeichnis anlegen +# ---------------------------------------------------------- +echo "📁 Stelle micro-Konfigverzeichnis sicher: $MICRO_CONFIG_DIR" +mkdir -p "$MICRO_CONFIG_DIR" +echo + +# ---------------------------------------------------------- +# 5) Hilfsfunktion: Symlink setzen mit Backup bei vorhandener Datei +# ---------------------------------------------------------- +link_file() { + local target="$1" # Ziel in ~/.config/micro/... + local source="$2" # Datei im Repo + local name="$3" # Name für Log + + if [[ -L "$target" ]]; then + echo "🔁 Entferne bestehenden Symlink für $name: $target" + rm "$target" + elif [[ -f "$target" ]]; then + local backup="${target}.bak-$(date +%Y%m%d-%H%M%S)" + echo "💾 Datei $target existiert, sichere nach: $backup" + mv "$target" "$backup" + fi + + echo "🔗 Setze Symlink: $target -> $source" + ln -s "$source" "$target" +} + +# ---------------------------------------------------------- +# 6) Symlinks für settings.json & bindings.json setzen +# ---------------------------------------------------------- +echo "🔗 Setze Symlinks für micro-Konfiguration..." + +link_file "$MICRO_CONFIG_DIR/settings.json" "$REPO_DIR/micro/settings.json" "settings.json" +link_file "$MICRO_CONFIG_DIR/bindings.json" "$REPO_DIR/micro/bindings.json" "bindings.json" + +echo +echo "✅ Setup abgeschlossen!" +echo " Repo: $REPO_DIR" +echo " Config: $MICRO_CONFIG_DIR" +echo +echo "Tipp: Teste micro mit:" +echo " micro ~/test.sh" +echo "und probiere z.B. Ctrl+K zum Kommentieren."