#!/usr/bin/env bash # Restore Claude Code's custom skills, memory, and settings from dotfiles. # Run once on a fresh machine after cloning dotfiles. # # Idempotent: skips anything already in place. Safe to re-run. set -euo pipefail DOTFILES_CLAUDE="${HOME}/dotfiles/claude" CLAUDE_HOME="${HOME}/.claude" echo "Restoring Claude Code configuration from ${DOTFILES_CLAUDE}..." echo "" # Sanity check if [ ! -d "${DOTFILES_CLAUDE}" ]; then echo "Error: ${DOTFILES_CLAUDE} not found. Clone dotfiles first." exit 1 fi # 1. Ensure .claude structure exists mkdir -p "${CLAUDE_HOME}/skills" mkdir -p "${CLAUDE_HOME}/projects/-Users-davidglidden" # 2. Symlink custom skills echo "Linking custom skills..." for skill in audit symmetria vault-update-people wake-up wrap-up; do src="${DOTFILES_CLAUDE}/skills/${skill}" dst="${CLAUDE_HOME}/skills/${skill}" if [ ! -d "$src" ]; then echo " skip: ${skill} (not in dotfiles)" continue fi if [ -L "$dst" ]; then echo " skip: ${skill} (already a symlink)" continue fi if [ -e "$dst" ]; then echo " WARN: ${skill} exists at ${dst} and is not a symlink; leaving untouched" continue fi ln -s "$src" "$dst" echo " linked: ${dst} -> ${src}" done # 3. Symlink memory tree echo "" echo "Linking memory tree..." memory_src="${DOTFILES_CLAUDE}/memory" memory_dst="${CLAUDE_HOME}/projects/-Users-davidglidden/memory" if [ -L "$memory_dst" ]; then echo " skip: memory (already a symlink)" elif [ -e "$memory_dst" ]; then echo " WARN: ${memory_dst} exists and is not a symlink; leaving untouched" echo " If you want to merge: back up ${memory_dst}, remove it, then re-run." else ln -s "$memory_src" "$memory_dst" echo " linked: ${memory_dst} -> ${memory_src}" fi # 4. Copy settings.json (does not overwrite existing) echo "" echo "Restoring settings.json..." settings_src="${DOTFILES_CLAUDE}/settings/settings.json" settings_dst="${CLAUDE_HOME}/settings.json" if [ -e "$settings_dst" ]; then echo " skip: settings.json (already at ${settings_dst}; diff manually if you want to merge)" else cp "$settings_src" "$settings_dst" echo " copied: ${settings_dst}" fi # 5. Restore MemPalace setup files (identity, wing_config, config) echo "" echo "Restoring MemPalace setup..." MEMPALACE_HOME="${HOME}/.mempalace" mkdir -p "${MEMPALACE_HOME}" for f in config.json identity.txt wing_config.json; do src="${DOTFILES_CLAUDE}/mempalace/${f}" dst="${MEMPALACE_HOME}/${f}" if [ ! -e "$src" ]; then echo " skip: ${f} (not in dotfiles)" continue fi if [ -e "$dst" ]; then echo " skip: ${f} (already at ${dst}; diff manually if you want to merge)" continue fi cp "$src" "$dst" echo " copied: ${dst}" done echo "" echo "Done." echo "" echo "NOT restored by design:" echo " - settings.local.json (may contain secrets; restore manually from secure backup)" echo " - session transcripts (ephemeral)" echo " - marketplace-installed skills and agents (reinstall via plugin system)" echo " - caches, telemetry, runtime state (regenerate)" echo " - the MemPalace palace itself (~/_Dev/mempalace/.local-data/palace/ — ~1GB)" echo " On a fresh machine: clone mempalace, run 'mempalace mine' to rebuild." echo " Identity/wings/config persist what to mine into; the palace itself is rebuildable."