From 83827d131275a9fe4a46f7c05d97a291fbf29c9f Mon Sep 17 00:00:00 2001 From: nad4 Date: Wed, 30 Sep 2026 22:53:12 +0900 Subject: [PATCH] Fix iTerm2 theme application and install Orca --- README.md | 23 +++++++----- apply_iterm2.sh | 31 ++++++++++++++++ iterm2-settings/profile.json | 1 + setup_mac.sh | 68 ++++-------------------------------- 4 files changed, 54 insertions(+), 69 deletions(-) create mode 100644 apply_iterm2.sh diff --git a/README.md b/README.md index 06be18c..ee65527 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Mac 개발 환경을 자동으로 설정하는 스크립트입니다. - Node.js - iTerm2 - **cmux** + CLI 링크 +- **Orca** (AI agent 개발 환경) - Oh My Zsh (agnoster 멀티라인 테마) - zsh-syntax-highlighting / zsh-autosuggestions - **VSCode** + Claude 확장 @@ -70,6 +71,7 @@ chmod +x setup_mac.sh ``` setup_mac/ ├── setup_mac.sh # 메인 설치 스크립트 +├── apply_iterm2.sh # iTerm2 프로파일만 재적용 ├── save_configs.sh # 설정 저장 스크립트 ├── .gitignore ├── iterm2-settings/ @@ -86,7 +88,8 @@ setup_mac/ ### iTerm2 프로파일 - **이름**: nad4-profile - **폰트**: D2Coding 13pt -- **색상**: 다크 테마 +- **색상**: 다크 테마 (macOS 라이트/다크 모드와 무관하게 유지) +- **기본 프로파일**: 자동 설정, 기존 세션은 유지하며 새 창부터 적용 - **Status Bar**: CPU, 메모리, 네트워크, 배터리, 호스트명 - **크기**: 100 columns × 25 rows @@ -104,6 +107,11 @@ setup_mac/ - **CLI**: `/Applications/cmux.app/Contents/Resources/bin/cmux` 를 Homebrew bin 경로에 링크 - cmux 외부 터미널에서도 `cmux` 명령을 사용할 수 있도록 구성 +### Orca +- **앱**: [공식 설치 안내](https://www.onorca.dev/docs/install)의 `brew install --cask stablyai/orca/orca` 사용 +- Homebrew 기본 저장소의 동명 Plotly 앱과 구분하기 위해 전체 cask 경로 사용 +- 최초 실행 후 작업 저장소와 Claude Code/Codex 환경을 선택 + ### Docker Desktop - **앱**: `brew install --cask docker-desktop` 으로 자동 설치 - **CLI**: Docker Desktop이 제공하는 `docker`, `docker compose` 사용 @@ -182,8 +190,7 @@ git push ### iTerm2 설정 - [ ] iTerm2 > Settings > Profiles -- [ ] 'nad4-profile' 선택 -- [ ] Other Actions... > Set as Default +- [ ] 'nad4-profile'이 기본 프로파일인지 확인 - [ ] 새 창 열어서 설정 확인 ### Stats 설정 @@ -227,12 +234,12 @@ git push ### iTerm2 프로파일이 적용되지 않는 경우 ```bash -# 1. 프로파일 파일 확인 -ls -la ~/Library/Application\ Support/iTerm2/DynamicProfiles/ +# 앱 재설치 없이 저장소의 프로파일과 기본값만 적용 +cd ~/workspace/setup_mac +bash apply_iterm2.sh -# 2. iTerm2 재시작 -killall iTerm2 -open -a iTerm2 +# iTerm2에서 ⌘N으로 새 창 열기 +# 기존 창/탭은 이전 세션 설정을 유지할 수 있습니다. ``` ### Stats 설정이 적용되지 않는 경우 diff --git a/apply_iterm2.sh b/apply_iterm2.sh new file mode 100644 index 0000000..9c483f4 --- /dev/null +++ b/apply_iterm2.sh @@ -0,0 +1,31 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROFILE_FILE="$SCRIPT_DIR/iterm2-settings/profile.json" +DYNAMIC_DIR="$HOME/Library/Application Support/iTerm2/DynamicProfiles" +TARGET_FILE="$DYNAMIC_DIR/NAD4Profile.json" + +# Validate before replacing the active profile. Backups belong outside DynamicProfiles. +plutil -convert xml1 -o /dev/null "$PROFILE_FILE" +PROFILE_GUID=$(plutil -extract Guid raw -o - "$PROFILE_FILE") +PROFILE_NAME=$(plutil -extract Name raw -o - "$PROFILE_FILE") +[ -n "$PROFILE_GUID" ] && [ -n "$PROFILE_NAME" ] +mkdir -p "$DYNAMIC_DIR" +if [ -f "$TARGET_FILE" ]; then + BACKUP_DIR="$HOME/Library/Application Support/iTerm2/ProfileBackups" + mkdir -p "$BACKUP_DIR" + cp "$TARGET_FILE" "$BACKUP_DIR/NAD4Profile.$(date +%Y%m%d_%H%M%S).json" +fi +TEMP_FILE=$(mktemp "${TMPDIR:-/tmp}/nad4-iterm.XXXXXX") +trap 'rm -f "$TEMP_FILE"' EXIT +{ + printf '{"Profiles": [' + cat "$PROFILE_FILE" + printf ']}\n' +} > "$TEMP_FILE" +plutil -convert xml1 -o /dev/null "$TEMP_FILE" +cp "$TEMP_FILE" "$TARGET_FILE" +defaults write com.googlecode.iterm2 "Default Bookmark Guid" -string "$PROFILE_GUID" +echo "✅ iTerm2 기본 프로파일 적용: $PROFILE_NAME" +echo " 기존 세션은 유지됩니다. 새 창(⌘N)에서 테마와 폰트를 확인하세요." diff --git a/iterm2-settings/profile.json b/iterm2-settings/profile.json index 143a5e0..d48dd3e 100644 --- a/iterm2-settings/profile.json +++ b/iterm2-settings/profile.json @@ -302,6 +302,7 @@ "Red Component" : 0.89803921568627454 }, "Use Non-ASCII Font" : false, + "Use Separate Colors for Light and Dark Mode" : false, "Has Hotkey" : false, "Ansi 8 Color" : { "Green Component" : 0.31372550129890442, diff --git a/setup_mac.sh b/setup_mac.sh index 78e2c64..c6e5abd 100755 --- a/setup_mac.sh +++ b/setup_mac.sh @@ -16,7 +16,6 @@ CODEX_REPO_DIR="${WORKSPACE_ROOT}/codex" ITERM_SETTINGS_DIR="$SCRIPT_DIR/iterm2-settings" STATS_SETTINGS_DIR="$SCRIPT_DIR/stats-settings" 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" @@ -152,6 +151,7 @@ APPS=( "rectangle" "appcleaner" "cmux" + "stablyai/orca/orca" ) for app in "${APPS[@]}"; do @@ -359,6 +359,7 @@ prompt_newline() { fi echo -n "%{%f%}" CURRENT_BG='' + printf '\n❯' } # 프롬프트 빌드 (멀티라인 적용) @@ -400,57 +401,7 @@ echo "" # ============================================================================= echo "⚙️ iTerm2 프로파일 설정 중..." -# iTerm2가 실행 중이면 종료 -if pgrep -x "iTerm2" > /dev/null; then - echo "⚠️ iTerm2가 실행 중입니다. 종료합니다..." - killall iTerm 2>/dev/null || killall iTerm2 2>/dev/null || true - sleep 2 -fi - -# iTerm2 DynamicProfiles 디렉토리 생성 -ITERM_DYNAMIC_DIR="$HOME/Library/Application Support/iTerm2/DynamicProfiles" -mkdir -p "$ITERM_DYNAMIC_DIR" - -# 프로파일 파일 확인 -if [ -f "$ITERM_PROFILE_FILE" ]; then - echo "✅ profile.json 발견" - - # 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"[[:space:]]*:[[:space:]]*"[^"]*"' "$ITERM_PROFILE_FILE" | head -1 | sed 's/.*:.*"\([^"]*\)"/\1/') - - if [ -n "$PROFILE_GUID" ]; then - echo "✅ 프로파일 GUID: $PROFILE_GUID" - - # iTerm2 환경설정에 기본 프로파일 GUID만 설정 - defaults write com.googlecode.iterm2 "Default Bookmark Guid" "$PROFILE_GUID" - - echo "✅ iTerm2 기본 프로파일 GUID 설정 완료" - else - echo "⚠️ 프로파일 GUID를 찾을 수 없습니다" - fi - -else - echo "⚠️ $ITERM_PROFILE_FILE 파일을 찾을 수 없습니다." -fi - -# iTerm2 재시작 -echo "🔄 iTerm2 시작 중..." -sleep 1 -if open -a iTerm 2>/dev/null; then - echo "✅ iTerm2 시작 완료" -else - echo "⚠️ iTerm2를 수동으로 실행해주세요" -fi +bash "$SCRIPT_DIR/apply_iterm2.sh" echo "" @@ -582,16 +533,10 @@ echo "" echo "📋 다음 단계:" echo "" echo " 1️⃣ iTerm2 실행 확인" -echo " → iTerm이 자동으로 열렸는지 확인" +echo " → iTerm2 실행 후 새 창(⌘N) 열기" echo "" -echo " 2️⃣ iTerm2에서 프로파일 설정 (필수 - 30초):" -echo " ┌──────────────────────────────────────────┐" -echo " │ iTerm2 > Settings (⌘,) │" -echo " │ → Profiles 탭 │" -echo " │ → 왼쪽에서 'nad4-profile' 선택 │" -echo " │ → 하단 'Other Actions...' 클릭 │" -echo " │ → 'Set as Default' 선택 │" -echo " └──────────────────────────────────────────┘" +echo " 2️⃣ nad4-profile이 기본 프로파일로 자동 설정됨" +echo " → 기존 세션은 유지됩니다. 새 창(⌘N)에서 확인하세요." echo "" echo " 3️⃣ 새 창 열어서 프로파일 확인 (⌘N)" echo " ✓ 어두운 배경" @@ -653,6 +598,7 @@ echo "" echo "💡 설치된 앱 목록:" echo " ✅ iTerm2 (터미널)" echo " ✅ cmux (AI agent 멀티 터미널)" +echo " ✅ Orca (AI agent 개발 환경)" echo " ✅ VSCode + Claude 확장" echo " ✅ Claude Code CLI" echo " ✅ Codex CLI"