| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #!/usr/bin/env bash
- # ============================================================
- # Claude Code — Bootstrap installer
- # Installs Claude Code CLI, authenticates, then sets up
- # symlinks and plugins for the claude-config repo.
- # ============================================================
- set -euo pipefail
- RED='\033[0;31m'; GREEN='\033[0;32m'
- YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
- ok() { echo -e "${GREEN}✓${NC} $1"; }
- warn() { echo -e "${YELLOW}⚠${NC} $1"; }
- info() { echo -e "${BLUE}→${NC} $1"; }
- err() { echo -e "${RED}✗${NC} $1"; exit 1; }
- REPO="$(cd "$(dirname "$0")" && pwd)"
- echo ""
- echo "═══ claude-config bootstrap installer ═══"
- echo ""
- # ── 1. Check prerequisites ──
- echo "── Checking prerequisites..."
- if ! command -v node &>/dev/null; then
- err "Node.js not found. Install it first: https://nodejs.org"
- fi
- NODE_MAJOR=$(node -v | sed 's/v//' | cut -d. -f1)
- if [ "$NODE_MAJOR" -lt 18 ]; then
- err "Node.js >= 18 required (found $(node -v))"
- fi
- ok "Node.js $(node -v)"
- if ! command -v npm &>/dev/null; then
- err "npm not found"
- fi
- ok "npm $(npm -v)"
- # ── 2. Install Claude Code CLI ──
- echo ""
- echo "── Installing Claude Code (latest)..."
- if npm install -g @anthropic-ai/claude-code@latest; then
- ok "Claude Code installed: $(claude --version 2>/dev/null || echo 'unknown')"
- else
- err "Claude Code installation failed"
- fi
- # ── 3. Authenticate ──
- echo ""
- echo "── Authentication"
- echo ""
- echo " You need to log in to Claude Code."
- echo " This will open an interactive session."
- echo ""
- printf " Press Enter to launch 'claude login'... "
- read -r
- if claude login; then
- ok "Authenticated"
- else
- warn "Login exited with non-zero status"
- warn "You can retry later with: claude login"
- fi
- # ── 4. Init git submodules ──
- echo ""
- echo "── Initializing submodules..."
- cd "$REPO"
- if git submodule update --init 2>/dev/null; then
- ok "Submodules initialized"
- else
- warn "Submodule init failed — some plugins may be unavailable"
- fi
- # ── 5. Symlink config into ~/.claude/ ──
- echo ""
- echo "── Setting up symlinks..."
- bash "$REPO/link.sh"
- # ── 6. Install plugins ──
- echo ""
- echo "── Installing plugins..."
- bash "$REPO/install-plugins.sh"
- # ── Done ──
- echo ""
- echo "═══════════════════════════════════════════"
- echo ""
- ok "Bootstrap complete!"
- echo ""
- echo " Start Claude Code in any project with:"
- echo " claude"
- echo ""
|