diff --git a/.gitignore b/.gitignore index d254cd4..bd41507 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,9 @@ # Editor .vscode/ .idea/ +*.swp +*.swo +*~ # Personal configs (if needed) # personal-settings/ diff --git a/README.md b/README.md index 33e9ee5..be9a6ec 100644 --- a/README.md +++ b/README.md @@ -4,19 +4,21 @@ Mac 개발 환경을 자동으로 설정하는 스크립트입니다. ## 📦 설치 항목 +### 개발 도구 +- Homebrew +- Node.js +- iTerm2 +- Oh My Zsh (agnoster 멀티라인 테마) +- zsh-syntax-highlighting / zsh-autosuggestions +- **VSCode** + Claude 확장 +- **Claude Code CLI** +- Cursor (에디터) + ### 유틸리티 - **Stats**: 시스템 모니터 (CPU, Memory, Network 등) - **Rectangle**: 윈도우 관리 (무료 Magnet 대안) - **AppCleaner**: 앱 완전 삭제 도구 -### 개발 도구 -- Homebrew -- iTerm2 -- Oh My Zsh -- zsh-syntax-highlighting -- zsh-autosuggestions -- Cursor (에디터) - ### 폰트 - D2Coding - D2Coding Nerd Font @@ -62,13 +64,14 @@ chmod +x setup_mac.sh setup_mac/ ├── setup_mac.sh # 메인 설치 스크립트 ├── save_configs.sh # 설정 저장 스크립트 +├── .gitignore ├── iterm2-settings/ │ └── profile.json # iTerm2 프로파일 ├── stats-settings/ │ └── Stats.plist # Stats 설정 ├── rectangle-settings/ -│ └── com.knollsoft.Rectangle.plist -└── README.md # 이 파일 +│ └── RectangleConfig.json # Rectangle 설정 +└── README.md ``` ## ⚙️ 설정 내용 @@ -84,6 +87,11 @@ setup_mac/ - **테마**: agnoster (멀티라인) - **플러그인**: syntax-highlighting, autosuggestions +### Claude Code +- **CLI**: `npm install -g @anthropic-ai/claude-code` 로 자동 설치 +- **VSCode 확장**: `code --install-extension` 으로 자동 설치 +- 최초 실행 시 Anthropic API 키 설정 필요 + ### Stats 설정 - 자동으로 사용자 정의 설정 적용 - 메뉴바 위젯 자동 구성 @@ -154,6 +162,11 @@ git push - [ ] Syntax highlighting 작동 확인 - [ ] Autosuggestions 작동 확인 +### Claude Code 확인 +- [ ] `claude --version` → 버전 출력 확인 +- [ ] `claude` → 최초 실행 시 API 키 설정 +- [ ] VSCode Extensions (⌘⇧X) → Claude 확장 설치 확인 + ## 🛠️ 문제 해결 ### iTerm2 프로파일이 적용되지 않는 경우 @@ -186,6 +199,27 @@ cp ~/.zshrc.backup_YYYYMMDD_HHMMSS ~/.zshrc exec zsh ``` +### Claude Code CLI가 동작하지 않는 경우 +```bash +# Node.js 확인 +node --version + +# Claude Code 재설치 +npm install -g @anthropic-ai/claude-code + +# API 키 재설정 +claude config +``` + +### VSCode Claude 확장이 설치되지 않는 경우 +```bash +# code 명령 설치 (VSCode 실행 후) +# ⌘⇧P → 'Shell Command: Install code command in PATH' + +# 확장 수동 설치 +code --install-extension anthropic.claude-code +``` + ### 폰트가 표시되지 않는 경우 ```bash # 폰트 재설치 @@ -220,7 +254,10 @@ git pull - [Homebrew](https://brew.sh/) - [iTerm2](https://iterm2.com/) - [Oh My Zsh](https://ohmyz.sh/) +- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) +- [VSCode](https://code.visualstudio.com/) - [Stats](https://github.com/exelban/stats) +- [Rectangle](https://rectangleapp.com/) - [D2Coding Font](https://github.com/naver/d2codingfont) ## 💡 팁 @@ -239,11 +276,9 @@ chmod +x setup_mac.sh ### 정기적인 설정 백업 ```bash -# crontab으로 자동 백업 (선택사항) -crontab -e - -# 매주 일요일 오후 6시에 설정 백업 -0 18 * * 0 cd ~/workspace/nad4/setup_mac && cp ~/Library/Preferences/eu.exelban.Stats.plist stats-settings/Stats.plist && git add . && git commit -m "Auto backup: $(date)" && git push +# 매주 일요일 오후 6시에 설정 백업 (선택사항) +# crontab -e 후 아래 줄 추가: +0 18 * * 0 cd ~/workspace/nad4/setup_mac && ./save_configs.sh --auto ``` ## 📝 라이선스 diff --git a/save_configs.sh b/save_configs.sh index e1d8581..9d95ed4 100755 --- a/save_configs.sh +++ b/save_configs.sh @@ -7,6 +7,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ITERM_SETTINGS_DIR="$SCRIPT_DIR/iterm2-settings" STATS_SETTINGS_DIR="$SCRIPT_DIR/stats-settings" +RECTANGLE_SETTINGS_DIR="$SCRIPT_DIR/rectangle-settings" echo "📦 현재 설정을 저장합니다..." echo "" @@ -34,6 +35,7 @@ echo "" # Stats 설정 저장 if [ -f "$HOME/Library/Preferences/eu.exelban.Stats.plist" ]; then echo "📊 Stats 설정 저장 중..." + mkdir -p "$STATS_SETTINGS_DIR" cp "$HOME/Library/Preferences/eu.exelban.Stats.plist" \ "$STATS_SETTINGS_DIR/Stats.plist" echo "✅ Stats 설정 저장 완료" diff --git a/setup_mac.sh b/setup_mac.sh index 15f1047..6226dd2 100755 --- a/setup_mac.sh +++ b/setup_mac.sh @@ -3,7 +3,7 @@ # ============================================================================= # Mac 초기 개발 환경 설정 스크립트 # 작성자: NAD4 -# 설명: Homebrew, iTerm2, Oh My Zsh, 필수 앱 자동 설치 및 설정 +# 설명: Homebrew, iTerm2, Oh My Zsh, Claude Code, VSCode, 필수 앱 자동 설치 및 설정 # ============================================================================= set -e # 에러 발생 시 스크립트 중단 @@ -16,6 +16,7 @@ RECTANGLE_SETTINGS_DIR="$SCRIPT_DIR/rectangle-settings" ITERM_PROFILE_FILE="$ITERM_SETTINGS_DIR/profile.json" STATS_PLIST_FILE="$STATS_SETTINGS_DIR/Stats.plist" RECTANGLE_PLIST_FILE="$RECTANGLE_SETTINGS_DIR/com.knollsoft.Rectangle.plist" +RECTANGLE_JSON_FILE="$RECTANGLE_SETTINGS_DIR/RectangleConfig.json" echo "🚀 Mac 초기 개발 환경 설정을 시작합니다..." echo "📂 스크립트 위치: $SCRIPT_DIR" @@ -122,6 +123,7 @@ echo "🖥️ GUI 애플리케이션 설치 중..." # 설치할 앱 목록 APPS=( "tunnelblick" + "visual-studio-code" "cursor" "notion" "discord" @@ -146,7 +148,59 @@ done echo "" # ============================================================================= -# 7. .zshrc 설정 +# 7. Node.js & Claude Code CLI 설치 +# ============================================================================= +echo "🤖 Node.js & Claude Code 설치 중..." + +# Node.js +if brew list node &> /dev/null; then + echo "✅ Node.js 이미 설치됨" +else + brew install node + echo "✅ Node.js 설치 완료" +fi + +# Claude Code CLI +if command -v claude &> /dev/null; then + echo "✅ Claude Code CLI 이미 설치됨" +else + npm install -g @anthropic-ai/claude-code + echo "✅ Claude Code CLI 설치 완료" +fi + +echo "" + +# ============================================================================= +# 8. VSCode 확장 설치 +# ============================================================================= +echo "🔌 VSCode 확장 설치 중..." + +# VSCode code CLI 경로 확인 +CODE_CMD="" +if command -v code &> /dev/null; then + CODE_CMD="code" +elif [ -f "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code" ]; then + CODE_CMD="/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code" +fi + +if [ -n "$CODE_CMD" ]; then + # Claude for VSCode 확장 설치 + if "$CODE_CMD" --install-extension anthropic.claude-code 2>/dev/null; then + echo "✅ Claude for VSCode 확장 설치 완료" + else + echo "⚠️ Claude 확장 자동 설치 실패" + echo " VSCode에서 수동 설치: Extensions (⌘⇧X) → 'Claude' 검색" + fi +else + echo "⚠️ VSCode code 명령을 찾을 수 없습니다." + echo " VSCode 실행 후: ⌘⇧P → 'Shell Command: Install code command in PATH'" + echo " 이후 Extensions에서 'Claude' 확장을 수동 설치해주세요." +fi + +echo "" + +# ============================================================================= +# 9. .zshrc 설정 # ============================================================================= echo "🎨 ZSH 설정 파일 구성 중..." @@ -231,14 +285,16 @@ build_prompt() { EOF -# ZSH 플러그인 source 추가 (중복 체크) -SYNTAX_LINE='source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' -if ! grep -qxF "$SYNTAX_LINE" ~/.zshrc; then +# ZSH 플러그인 source 추가 (중복 체크, Apple Silicon/Intel 자동 감지) +BREW_PREFIX="$(brew --prefix)" + +SYNTAX_LINE="source $BREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" +if ! grep -q "zsh-syntax-highlighting.zsh" ~/.zshrc; then echo "$SYNTAX_LINE" >> ~/.zshrc fi -SUGGEST_LINE='source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh' -if ! grep -qxF "$SUGGEST_LINE" ~/.zshrc; then +SUGGEST_LINE="source $BREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh" +if ! grep -q "zsh-autosuggestions.zsh" ~/.zshrc; then echo "$SUGGEST_LINE" >> ~/.zshrc fi @@ -246,7 +302,7 @@ echo "✅ .zshrc 설정 완료" echo "" # ============================================================================= -# 8. iTerm2 프로파일 설정 +# 10. iTerm2 프로파일 설정 # ============================================================================= echo "⚙️ iTerm2 프로파일 설정 중..." @@ -265,27 +321,18 @@ mkdir -p "$ITERM_DYNAMIC_DIR" if [ -f "$ITERM_PROFILE_FILE" ]; then echo "✅ profile.json 발견" - # DynamicProfile 형식으로 변환하여 복사 - cat > "$ITERM_DYNAMIC_DIR/NAD4Profile.json" << 'DYNAMIC_WRAPPER' -{ - "Profiles": [ -DYNAMIC_WRAPPER - - # 기존 프로파일 내용 추가 (마지막 } 제거) - cat "$ITERM_PROFILE_FILE" | sed '$ d' >> "$ITERM_DYNAMIC_DIR/NAD4Profile.json" - - # 래퍼 종료 - cat >> "$ITERM_DYNAMIC_DIR/NAD4Profile.json" << 'DYNAMIC_WRAPPER' - } - ] -} -DYNAMIC_WRAPPER + # DynamicProfile 형식으로 변환하여 복사 (profile.json을 Profiles 배열로 래핑) + { + echo '{"Profiles": [' + cat "$ITERM_PROFILE_FILE" + echo ']}' + } > "$ITERM_DYNAMIC_DIR/NAD4Profile.json" echo "✅ iTerm2 Dynamic Profile 생성 완료" echo " 위치: $ITERM_DYNAMIC_DIR/NAD4Profile.json" - # profile.json에서 GUID 추출 - PROFILE_GUID=$(grep -o '"Guid" : "[^"]*"' "$ITERM_PROFILE_FILE" | sed 's/"Guid" : "\(.*\)"/\1/') + # profile.json에서 GUID 추출 (공백 유무 무관) + PROFILE_GUID=$(grep -o '"Guid"[[:space:]]*:[[:space:]]*"[^"]*"' "$ITERM_PROFILE_FILE" | head -1 | sed 's/.*:.*"\([^"]*\)"/\1/') if [ -n "$PROFILE_GUID" ]; then echo "✅ 프로파일 GUID: $PROFILE_GUID" @@ -302,18 +349,11 @@ else echo "⚠️ $ITERM_PROFILE_FILE 파일을 찾을 수 없습니다." fi -# iTerm2 재시작 (번들 ID 사용) +# iTerm2 재시작 echo "🔄 iTerm2 시작 중..." sleep 1 - -# iTerm2 실행 (여러 방법 시도) -if [ -d "/Applications/iTerm.app" ]; then - open -a /Applications/iTerm.app +if open -a iTerm 2>/dev/null; then echo "✅ iTerm2 시작 완료" -elif command -v open &> /dev/null; then - open -b com.googlecode.iterm2 2>/dev/null || \ - open /Applications/iTerm.app 2>/dev/null || \ - echo "⚠️ iTerm2를 수동으로 실행해주세요" else echo "⚠️ iTerm2를 수동으로 실행해주세요" fi @@ -321,7 +361,7 @@ fi echo "" # ============================================================================= -# 9. Stats 앱 설정 +# 11. Stats 앱 설정 # ============================================================================= echo "📊 Stats 앱 설정 중..." @@ -373,7 +413,7 @@ fi echo "" # ============================================================================= -# 10. Rectangle 앱 설정 +# 12. Rectangle 앱 설정 # ============================================================================= echo "📐 Rectangle 앱 설정 중..." @@ -388,43 +428,47 @@ if [ -d "/Applications/Rectangle.app" ]; then sleep 2 fi - # Rectangle 설정 파일 확인 - if [ -f "$RECTANGLE_PLIST_FILE" ]; then - echo "✅ Rectangle.plist 발견" - - # Rectangle 설정 파일 백업 - RECTANGLE_PREF_FILE="$HOME/Library/Preferences/com.knollsoft.Rectangle.plist" + # Rectangle 설정 파일 확인 (plist 우선, JSON 폴백) + RECTANGLE_PREF_FILE="$HOME/Library/Preferences/com.knollsoft.Rectangle.plist" + + if [ -f "$RECTANGLE_PLIST_FILE" ] || [ -f "$RECTANGLE_JSON_FILE" ]; then + # 기존 설정 백업 if [ -f "$RECTANGLE_PREF_FILE" ]; then RECTANGLE_BACKUP="$RECTANGLE_PREF_FILE.backup_$(date +%Y%m%d_%H%M%S)" cp "$RECTANGLE_PREF_FILE" "$RECTANGLE_BACKUP" echo "✅ 기존 Rectangle 설정 백업: $RECTANGLE_BACKUP" fi - - # 새 설정 적용 - cp "$RECTANGLE_PLIST_FILE" "$RECTANGLE_PREF_FILE" - echo "✅ Rectangle 설정 적용 완료" - - # 설정 파일 권한 설정 - chmod 644 "$RECTANGLE_PREF_FILE" - + + if [ -f "$RECTANGLE_PLIST_FILE" ]; then + # plist 파일이 있으면 직접 복사 + echo "✅ Rectangle.plist 발견" + cp "$RECTANGLE_PLIST_FILE" "$RECTANGLE_PREF_FILE" + chmod 644 "$RECTANGLE_PREF_FILE" + echo "✅ Rectangle 설정 적용 완료 (plist)" + elif [ -f "$RECTANGLE_JSON_FILE" ]; then + # JSON 파일만 있으면 plutil로 변환 후 적용 + echo "✅ RectangleConfig.json 발견" + if plutil -convert binary1 -o "$RECTANGLE_PREF_FILE" "$RECTANGLE_JSON_FILE" 2>/dev/null; then + chmod 644 "$RECTANGLE_PREF_FILE" + echo "✅ Rectangle 설정 적용 완료 (JSON → plist 변환)" + else + echo "⚠️ JSON 변환 실패. Rectangle을 실행 후 수동으로 설정을 import 해주세요." + echo " Rectangle > Preferences > Import (${RECTANGLE_JSON_FILE})" + fi + fi + # Rectangle 재시작 echo "🔄 Rectangle 재시작 중..." sleep 1 open -a Rectangle echo "✅ Rectangle 시작 완료" - + else - echo "⚠️ $RECTANGLE_PLIST_FILE 파일을 찾을 수 없습니다." + echo "⚠️ Rectangle 설정 파일을 찾을 수 없습니다." echo " Rectangle을 실행하고 설정을 구성해주세요." - echo "" - echo " Rectangle 기본 설정 생성 중..." - - # Rectangle 실행 (초기 설정 생성) open -a Rectangle sleep 3 - echo "✅ Rectangle 초기 실행 완료" - echo " Preferences에서 키보드 단축키를 설정하세요." fi else @@ -477,13 +521,23 @@ echo " ⌃⌥→ : 오른쪽 절반 ⌃⌥← : 왼쪽 절반" echo " ⌃⌥↑ : 최대화 ⌃⌥↓ : 하단 정렬" echo " ⌃⌥F : 전체 화면 ⌃⌥C : 가운데" echo "" -echo " 7️⃣ AppCleaner 사용법:" +echo " 7️⃣ Claude Code 확인:" +echo " claude --version # → 버전 확인" +echo " claude # → Claude Code 실행" +echo " ※ 최초 실행 시 API 키 설정 필요" +echo "" +echo " 8️⃣ VSCode Claude 확장 확인:" +echo " VSCode 실행 → Extensions (⌘⇧X) → 'Claude' 설치 확인" +echo "" +echo " 9️⃣ AppCleaner 사용법:" echo " - Applications 폴더에서 AppCleaner 실행" echo " - 앱 삭제 시 관련 파일까지 자동 정리" echo " - 추천: Dock에 추가하여 사용" echo "" echo "💡 설치된 앱 목록:" echo " ✅ iTerm2 (터미널)" +echo " ✅ VSCode + Claude 확장" +echo " ✅ Claude Code CLI" echo " ✅ Stats (시스템 모니터)" echo " ✅ Rectangle (윈도우 관리)" echo " ✅ AppCleaner (앱 제거 도구)"