#!/bin/bash # Script para enlazar la configuración de Claude desde este repositorio a ~/.claude # Esto permite sincronizar comandos, templates, includes, skills y agents entre máquinas set -e REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CLAUDE_DIR="$HOME/.claude" # Carpetas a enlazar (configuración compartible) FOLDERS=("skills" "agents") echo "=== Instalando configuración de Claude ===" echo "Repositorio: $REPO_DIR/.claude" echo "Destino: $CLAUDE_DIR" echo "" # Crear ~/.claude si no existe if [ ! -d "$CLAUDE_DIR" ]; then echo "Creando $CLAUDE_DIR..." mkdir -p "$CLAUDE_DIR" fi for folder in "${FOLDERS[@]}"; do SOURCE="$REPO_DIR/.claude/$folder" TARGET="$CLAUDE_DIR/$folder" # Verificar que la carpeta existe en el repo if [ ! -d "$SOURCE" ]; then echo "WARN: $SOURCE no existe, saltando..." continue fi # Si ya es un symlink correcto, saltar if [ -L "$TARGET" ] && [ "$(readlink "$TARGET")" = "$SOURCE" ]; then echo "OK: $folder ya está enlazado correctamente" continue fi # Si existe (archivo, carpeta o symlink incorrecto), hacer backup if [ -e "$TARGET" ] || [ -L "$TARGET" ]; then BACKUP="$TARGET.backup.$(date +%Y%m%d_%H%M%S)" echo "Backup: $TARGET -> $BACKUP" mv "$TARGET" "$BACKUP" fi # Crear symlink ln -s "$SOURCE" "$TARGET" echo "Enlazado: $folder -> $SOURCE" done # === Archivos de configuración === echo "" echo "=== Instalando archivos de configuración ===" # 1. Status Line Script STATUSLINE_SOURCE="$REPO_DIR/.claude/statusline.sh" STATUSLINE_TARGET="$CLAUDE_DIR/statusline.sh" if [ -f "$STATUSLINE_SOURCE" ]; then if [ -f "$STATUSLINE_TARGET" ]; then BACKUP="$STATUSLINE_TARGET.backup.$(date +%Y%m%d_%H%M%S)" echo "Backup: statusline.sh -> $BACKUP" mv "$STATUSLINE_TARGET" "$BACKUP" fi cp "$STATUSLINE_SOURCE" "$STATUSLINE_TARGET" chmod +x "$STATUSLINE_TARGET" echo "Copiado: statusline.sh (ejecutable)" else echo "WARN: statusline.sh no encontrado en el repo" fi # 2. Settings.json (enlace simbólico) SETTINGS_SOURCE="$REPO_DIR/.claude/settings.json" SETTINGS_TARGET="$CLAUDE_DIR/settings.json" if [ -f "$SETTINGS_SOURCE" ]; then # Si ya es un symlink correcto, saltar if [ -L "$SETTINGS_TARGET" ] && [ "$(readlink "$SETTINGS_TARGET")" = "$SETTINGS_SOURCE" ]; then echo "OK: settings.json ya está enlazado correctamente" else # Si existe (archivo o symlink incorrecto), hacer backup if [ -e "$SETTINGS_TARGET" ] || [ -L "$SETTINGS_TARGET" ]; then BACKUP="$SETTINGS_TARGET.backup.$(date +%Y%m%d_%H%M%S)" echo "Backup: settings.json -> $BACKUP" mv "$SETTINGS_TARGET" "$BACKUP" fi # Crear symlink ln -s "$SETTINGS_SOURCE" "$SETTINGS_TARGET" echo "Enlazado: settings.json -> $SETTINGS_SOURCE" fi else echo "WARN: settings.json no encontrado en el repo" fi echo "" echo "=== Instalación completada ===" echo "Tus comandos y configuración ahora están sincronizados con el repositorio." echo "" echo "Configuración instalada:" echo " • Skills y Agents enlazados simbólicamente" echo " • Status Line configurada con vibecoding setup" echo " • Settings.json enlazado (compartido entre repos)" echo "" echo "Reinicia Claude Code para ver la nueva status line."