#!/usr/bin/env bash # setup-claude-profiles.sh # Richtet zwei getrennte Claude-Code-Profile ein (priv/work) # Verwendung: bash setup-claude-profiles.sh set -euo pipefail # ── Farben ────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' ok() { echo -e "${GREEN}[OK] $*${NC}"; } warn() { echo -e "${YELLOW}[!!] $*${NC}"; } fail() { echo -e "${RED}[FAIL] $*${NC}"; } MARKER="claude-profiles-start" ZSHRC="$HOME/.zshrc" echo "" echo "============================================" echo " Claude-Code Multi-Profile Setup" echo "============================================" # ── Claude Code installiert? ──────────────────────────────────────────── if ! command -v claude &>/dev/null; then warn "claude nicht gefunden - bitte zuerst installieren (npm install -g @anthropic-ai/claude-code)" fi # ── Bestehende ~/.claude migrieren ────────────────────────────────────── echo -e "\n=== Migration ===" if [[ -d "$HOME/.claude" && ! -d "$HOME/.claude-priv" ]]; then mv "$HOME/.claude" "$HOME/.claude-priv" ok "~/.claude nach ~/.claude-priv verschoben" elif [[ -d "$HOME/.claude" && -d "$HOME/.claude-priv" ]]; then warn "~/.claude und ~/.claude-priv existieren beide - manuelle Migration noetig" else ok "Nichts zu migrieren" fi # ── Config-Verzeichnisse anlegen ──────────────────────────────────────── echo -e "\n=== Verzeichnisse ===" mkdir -p "$HOME/.claude-priv" "$HOME/.claude-work" ok "~/.claude-priv angelegt (mail@motocamp.de)" ok "~/.claude-work angelegt (rene@rm202.de)" # ── Shared Data: work verlinkt auf priv ─────────────────────────────── echo -e "\n=== Symlinks (geteilte Daten) ===" for item in projects settings.json; do target="$HOME/.claude-priv/$item" link="$HOME/.claude-work/$item" if [[ -L "$link" ]]; then ok "$link -> $(readlink "$link") (bereits verlinkt)" elif [[ -e "$link" ]]; then warn "$link existiert bereits und ist kein Symlink - uebersprungen" else # Sicherstellen dass das Ziel existiert if [[ "$item" == "projects" ]]; then mkdir -p "$target" elif [[ ! -f "$target" ]]; then echo '{}' > "$target" fi ln -s "$target" "$link" ok "$link -> $target" fi done # ── Aliases in .zshrc ────────────────────────────────────────────────── echo -e "\n=== Shell-Aliases ===" if [[ ! -f "$ZSHRC" ]]; then fail "$ZSHRC existiert nicht" exit 1 fi if grep -qF "$MARKER" "$ZSHRC"; then warn "$ZSHRC - Aliases bereits vorhanden" else { echo "" echo "# claude-profiles-start" echo "alias claude-priv='CLAUDE_CONFIG_DIR=~/.claude-priv command claude' # mail@motocamp.de" echo "alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work command claude' # rene@rm202.de" echo 'alias claude='"'"'echo "Bitte claude-priv oder claude-work verwenden."'"'"'' cat << 'FUNC' claude-account() { local profile="$1" if [[ "$profile" != "priv" && "$profile" != "work" ]]; then echo "Verwendung: claude-account priv|work" return 1 fi local config_dir="$HOME/.claude-${profile}" echo "==> Claude Code abmelden (${profile})..." CLAUDE_CONFIG_DIR="$config_dir" command claude /logout echo "" echo "==> Browser oeffnen - bitte ab- und neu anmelden..." open "https://console.anthropic.com" read -r "?Wenn im Browser fertig, Enter druecken..." echo "" echo "==> Claude Code anmelden (${profile})..." CLAUDE_CONFIG_DIR="$config_dir" command claude /login } FUNC echo "# claude-profiles-end" } >> "$ZSHRC" ok "$ZSHRC - Aliases eingefuegt" fi # ── Zusammenfassung ───────────────────────────────────────────────────── echo "" echo "============================================" echo " Fertig! Profil-Zuordnung:" echo " claude-priv -> mail@motocamp.de" echo " claude-work -> rene@rm202.de" echo "============================================" echo "" echo "Naechste Schritte:" echo " 1. source ~/.zshrc" echo " 2. claude-priv (mit mail@motocamp.de einloggen)" echo " 3. claude-work (mit rene@rm202.de einloggen)" echo "" echo "Account wechseln: claude-account priv oder claude-account work" echo ""