From abadf377725178445d4bb677744507a93a2e32bd Mon Sep 17 00:00:00 2001 From: csbae Date: Tue, 25 Nov 2025 23:07:16 +0900 Subject: [PATCH] rectangle, appcleaner ADD --- .README.md.swp | Bin 0 -> 12288 bytes README.md | 12 +- rectangle-settings/RectangleConfig.json | 344 ++++++++++++++++++++++++ save_configs.sh | 14 + setup_mac.sh | 129 +++++++-- 5 files changed, 479 insertions(+), 20 deletions(-) create mode 100644 .README.md.swp create mode 100644 rectangle-settings/RectangleConfig.json diff --git a/.README.md.swp b/.README.md.swp new file mode 100644 index 0000000000000000000000000000000000000000..591136657ab10cc32f7ded02122ca39574ee78be GIT binary patch literal 12288 zcmeI2O-vI(6o3cMqDHPBMjI1oV2fy?awCN(hc<-2lL_4}Ls`1rX?C|7FUn6%8cM=} zV!$l1C?SdvOHz{>FJAR-;=#m(i?KURIC)gxE^PrxxNsuAO~20W%)B>mzfBL#PPBcv zH$-ns?F5bs?$_R7#tBi(sLW~|$F$zOl-j0qi>0Een51z<){X`|@+Jlza3gLeWrYQF zdGtoWWL7FUl8}`^e@|C;s7FeS9u37FG=K(9Y@l)IddD^Ir|!FQnKoSCFEWs6c6wJYybbt=Lz`8}024 zchP2NepxI{i5Yj=oRiOpm7;iBY=QARoP!q{95;A^K{6k8-j+Vm zctPcY?G$Y4%%`DVH_-3zN+yFElXYhJ{hd@SZd0+G7Wp(4(_126pX*MoKU8m~oq;ss zS%H>|lg|1k-1278c{xWza!h9yb>=3;V#Y1R@Asak7nHTd>{{gsq}_PsWHXg?fi?&G zhFWQeCAjghm4=z+Zmp-z!gkBvecJg-wgd}QvY>a*{W=xtHSvClRu;FMjo0KauaRY- literal 0 HcmV?d00001 diff --git a/README.md b/README.md index c59f390..33e9ee5 100644 --- a/README.md +++ b/README.md @@ -4,28 +4,32 @@ Mac 개발 환경을 자동으로 설정하는 스크립트입니다. ## 📦 설치 항목 +### 유틸리티 +- **Stats**: 시스템 모니터 (CPU, Memory, Network 등) +- **Rectangle**: 윈도우 관리 (무료 Magnet 대안) +- **AppCleaner**: 앱 완전 삭제 도구 + ### 개발 도구 - Homebrew - iTerm2 - Oh My Zsh - zsh-syntax-highlighting - zsh-autosuggestions +- Cursor (에디터) ### 폰트 - D2Coding - D2Coding Nerd Font ### 애플리케이션 -- Cursor (에디터) - Notion - Discord - Slack - Google Chrome - Telegram - IINA (동영상 플레이어) -- KakaoTalk - Tunnelblick (VPN) -- Stats (시스템 모니터) + ## 🚀 사용 방법 @@ -62,6 +66,8 @@ setup_mac/ │ └── profile.json # iTerm2 프로파일 ├── stats-settings/ │ └── Stats.plist # Stats 설정 +├── rectangle-settings/ +│ └── com.knollsoft.Rectangle.plist └── README.md # 이 파일 ``` diff --git a/rectangle-settings/RectangleConfig.json b/rectangle-settings/RectangleConfig.json new file mode 100644 index 0000000..6c3dcee --- /dev/null +++ b/rectangle-settings/RectangleConfig.json @@ -0,0 +1,344 @@ +{ + "bundleId" : "com.knollsoft.Rectangle", + "defaults" : { + "allowAnyShortcut" : { + "bool" : true + }, + "almostMaximizeHeight" : { + "float" : 0 + }, + "almostMaximizeWidth" : { + "float" : 0 + }, + "alternateDefaultShortcuts" : { + "bool" : true + }, + "altThirdCycle" : { + "int" : 0 + }, + "alwaysAccountForStage" : { + "int" : 0 + }, + "applyGapsToMaximize" : { + "int" : 0 + }, + "applyGapsToMaximizeHeight" : { + "int" : 0 + }, + "attemptMatchOnNextPrevDisplay" : { + "int" : 0 + }, + "autoMaximize" : { + "int" : 0 + }, + "cascadeAllDeltaSize" : { + "float" : 30 + }, + "centeredDirectionalMove" : { + "int" : 0 + }, + "centerHalfCycles" : { + "int" : 0 + }, + "cornerSnapAreaSize" : { + "float" : 20 + }, + "curtainChangeSize" : { + "int" : 0 + }, + "cycleSizesIsChanged" : { + "bool" : false + }, + "disabledApps" : { + + }, + "doubleClickTitleBar" : { + "int" : 0 + }, + "doubleClickTitleBarIgnoredApps" : { + + }, + "doubleClickTitleBarRestore" : { + "int" : 0 + }, + "dragFromStage" : { + "int" : 0 + }, + "enhancedUI" : { + "int" : 1 + }, + "footprintAlpha" : { + "float" : 0.3 + }, + "footprintAnimationDurationMultiplier" : { + "float" : 0 + }, + "footprintBorderWidth" : { + "float" : 2 + }, + "footprintColor" : { + + }, + "footprintFade" : { + "int" : 0 + }, + "fullIgnoreBundleIds" : { + + }, + "gapSize" : { + "float" : 0 + }, + "hapticFeedbackOnSnap" : { + "int" : 0 + }, + "hideMenubarIcon" : { + "bool" : true + }, + "ignoreDragSnapToo" : { + "int" : 0 + }, + "ignoredSnapAreas" : { + "int" : 0 + }, + "landscapeSnapAreas" : { + + }, + "launchOnLogin" : { + "bool" : true + }, + "minimumWindowHeight" : { + "float" : 0 + }, + "minimumWindowWidth" : { + "float" : 0 + }, + "missionControlDragging" : { + "int" : 0 + }, + "missionControlDraggingAllowedOffscreenDistance" : { + "float" : 25 + }, + "missionControlDraggingDisallowedDuration" : { + "int" : 250 + }, + "moveCursor" : { + "int" : 0 + }, + "moveCursorAcrossDisplays" : { + "int" : 0 + }, + "notifiedOfProblemApps" : { + "bool" : false + }, + "obtainWindowOnClick" : { + "int" : 0 + }, + "portraitSnapAreas" : { + + }, + "relaunchOpensMenu" : { + "bool" : false + }, + "resizeOnDirectionalMove" : { + "bool" : false + }, + "screenEdgeGapBottom" : { + "float" : 0 + }, + "screenEdgeGapLeft" : { + "float" : 0 + }, + "screenEdgeGapRight" : { + "float" : 0 + }, + "screenEdgeGapsOnMainScreenOnly" : { + "bool" : false + }, + "screenEdgeGapTop" : { + "float" : 0 + }, + "screenEdgeGapTopNotch" : { + "float" : 0 + }, + "screensOrderedByX" : { + "int" : 0 + }, + "selectedCycleSizes" : { + "int" : 0 + }, + "shortEdgeSnapAreaSize" : { + "float" : 145 + }, + "showAllActionsInMenu" : { + "int" : 0 + }, + "sixthsSnapArea" : { + "int" : 0 + }, + "sizeOffset" : { + "float" : 0 + }, + "snapEdgeMarginBottom" : { + "float" : 5 + }, + "snapEdgeMarginLeft" : { + "float" : 5 + }, + "snapEdgeMarginRight" : { + "float" : 5 + }, + "snapEdgeMarginTop" : { + "float" : 5 + }, + "snapModifiers" : { + "int" : 0 + }, + "specifiedHeight" : { + "float" : 1050 + }, + "specifiedWidth" : { + "float" : 1680 + }, + "stageSize" : { + "float" : 180.57555 + }, + "subsequentExecutionMode" : { + "int" : 1 + }, + "SUEnableAutomaticChecks" : { + "bool" : false + }, + "systemWideMouseDown" : { + "int" : 0 + }, + "systemWideMouseDownApps" : { + + }, + "todo" : { + "int" : 0 + }, + "todoApplication" : { + + }, + "todoMode" : { + "bool" : false + }, + "todoSidebarSide" : { + "int" : 1 + }, + "todoSidebarWidth" : { + "float" : 400 + }, + "traverseSingleScreen" : { + "int" : 0 + }, + "unsnapRestore" : { + "int" : 0 + }, + "widthStepSize" : { + "float" : 30 + }, + "windowSnapping" : { + "int" : 0 + } + }, + "shortcuts" : { + "bottomHalf" : { + "keyCode" : 125, + "modifierFlags" : 786432 + }, + "bottomLeft" : { + "keyCode" : 38, + "modifierFlags" : 786432 + }, + "bottomRight" : { + "keyCode" : 40, + "modifierFlags" : 786432 + }, + "center" : { + "keyCode" : 8, + "modifierFlags" : 786432 + }, + "centerThird" : { + "keyCode" : 3, + "modifierFlags" : 786432 + }, + "centerTwoThirds" : { + "keyCode" : 15, + "modifierFlags" : 786432 + }, + "firstThird" : { + "keyCode" : 2, + "modifierFlags" : 786432 + }, + "firstTwoThirds" : { + "keyCode" : 14, + "modifierFlags" : 786432 + }, + "larger" : { + "keyCode" : 24, + "modifierFlags" : 786432 + }, + "lastThird" : { + "keyCode" : 5, + "modifierFlags" : 786432 + }, + "lastTwoThirds" : { + "keyCode" : 17, + "modifierFlags" : 786432 + }, + "leftHalf" : { + "keyCode" : 123, + "modifierFlags" : 786432 + }, + "maximize" : { + "keyCode" : 36, + "modifierFlags" : 786432 + }, + "maximizeHeight" : { + "keyCode" : 126, + "modifierFlags" : 917504 + }, + "nextDisplay" : { + "keyCode" : 124, + "modifierFlags" : 1835008 + }, + "previousDisplay" : { + "keyCode" : 123, + "modifierFlags" : 1835008 + }, + "reflowTodo" : { + "keyCode" : 45, + "modifierFlags" : 786432 + }, + "restore" : { + "keyCode" : 51, + "modifierFlags" : 786432 + }, + "rightHalf" : { + "keyCode" : 124, + "modifierFlags" : 786432 + }, + "smaller" : { + "keyCode" : 27, + "modifierFlags" : 786432 + }, + "toggleTodo" : { + "keyCode" : 11, + "modifierFlags" : 786432 + }, + "topHalf" : { + "keyCode" : 126, + "modifierFlags" : 786432 + }, + "topLeft" : { + "keyCode" : 32, + "modifierFlags" : 786432 + }, + "topRight" : { + "keyCode" : 34, + "modifierFlags" : 786432 + } + }, + "version" : "98" +} \ No newline at end of file diff --git a/save_configs.sh b/save_configs.sh index 29dca89..e1d8581 100755 --- a/save_configs.sh +++ b/save_configs.sh @@ -44,6 +44,20 @@ fi echo "" +# Rectangle 설정 저장 +if [ -f "$HOME/Library/Preferences/com.knollsoft.Rectangle.plist" ]; then + echo "📐 Rectangle 설정 저장 중..." + mkdir -p "$RECTANGLE_SETTINGS_DIR" + cp "$HOME/Library/Preferences/com.knollsoft.Rectangle.plist" \ + "$RECTANGLE_SETTINGS_DIR/com.knollsoft.Rectangle.plist" + echo "✅ Rectangle 설정 저장 완료" + git add "$RECTANGLE_SETTINGS_DIR/com.knollsoft.Rectangle.plist" +else + echo "⚠️ Rectangle 설정 파일을 찾을 수 없습니다" +fi + +echo "" + # Git 상태 확인 cd "$SCRIPT_DIR" echo "📂 변경된 파일:" diff --git a/setup_mac.sh b/setup_mac.sh index e712933..15f1047 100755 --- a/setup_mac.sh +++ b/setup_mac.sh @@ -12,8 +12,10 @@ set -e # 에러 발생 시 스크립트 중단 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" 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" echo "🚀 Mac 초기 개발 환경 설정을 시작합니다..." echo "📂 스크립트 위치: $SCRIPT_DIR" @@ -128,6 +130,8 @@ APPS=( "slack" "google-chrome" "stats" + "rectangle" + "appcleaner" ) for app in "${APPS[@]}"; do @@ -164,6 +168,19 @@ if [ ! -f ~/.zshrc ]; then cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc fi +# Homebrew PATH 설정 확인 및 추가 +if ! grep -q "brew shellenv" ~/.zshrc; then + echo "🔧 Homebrew PATH 설정 추가..." + + if [[ $(uname -m) == "arm64" ]]; then + echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc + echo "✅ Homebrew PATH 설정 추가 (Apple Silicon)" + else + echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc + echo "✅ Homebrew PATH 설정 추가 (Intel)" + fi +fi + # ZSH_THEME 설정 if grep -q "^ZSH_THEME=" ~/.zshrc; then sed -i '' 's/^ZSH_THEME=.*/ZSH_THEME="agnoster"/' ~/.zshrc @@ -233,7 +250,7 @@ echo "" # ============================================================================= echo "⚙️ iTerm2 프로파일 설정 중..." -# iTerm2가 실행 중이면 종료 (정확한 프로세스 이름 사용) +# iTerm2가 실행 중이면 종료 if pgrep -x "iTerm2" > /dev/null; then echo "⚠️ iTerm2가 실행 중입니다. 종료합니다..." killall iTerm 2>/dev/null || killall iTerm2 2>/dev/null || true @@ -308,7 +325,8 @@ echo "" # ============================================================================= echo "📊 Stats 앱 설정 중..." -if brew list --cask stats &> /dev/null; then +# Stats 설치 확인 (파일 시스템 기반) +if [ -d "/Applications/Stats.app" ]; then echo "✅ Stats 설치됨" # Stats가 실행 중이면 종료 @@ -354,6 +372,68 @@ fi echo "" +# ============================================================================= +# 10. Rectangle 앱 설정 +# ============================================================================= +echo "📐 Rectangle 앱 설정 중..." + +# Rectangle 설치 확인 (파일 시스템 기반) +if [ -d "/Applications/Rectangle.app" ]; then + echo "✅ Rectangle 설치됨" + + # Rectangle이 실행 중이면 종료 + if pgrep -x "Rectangle" > /dev/null; then + echo "⚠️ Rectangle이 실행 중입니다. Rectangle을 종료합니다..." + killall Rectangle 2>/dev/null || true + sleep 2 + fi + + # Rectangle 설정 파일 확인 + if [ -f "$RECTANGLE_PLIST_FILE" ]; then + echo "✅ Rectangle.plist 발견" + + # Rectangle 설정 파일 백업 + RECTANGLE_PREF_FILE="$HOME/Library/Preferences/com.knollsoft.Rectangle.plist" + 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" + + # Rectangle 재시작 + echo "🔄 Rectangle 재시작 중..." + sleep 1 + open -a Rectangle + echo "✅ Rectangle 시작 완료" + + else + echo "⚠️ $RECTANGLE_PLIST_FILE 파일을 찾을 수 없습니다." + echo " Rectangle을 실행하고 설정을 구성해주세요." + echo "" + echo " Rectangle 기본 설정 생성 중..." + + # Rectangle 실행 (초기 설정 생성) + open -a Rectangle + sleep 3 + + echo "✅ Rectangle 초기 실행 완료" + echo " Preferences에서 키보드 단축키를 설정하세요." + fi + +else + echo "⚠️ Rectangle이 설치되지 않았습니다." + echo " brew install --cask rectangle 명령으로 수동 설치하세요." +fi + +echo "" + # ============================================================================= # 완료 메시지 # ============================================================================= @@ -365,7 +445,6 @@ echo "📋 다음 단계:" echo "" echo " 1️⃣ iTerm2 실행 확인" echo " → iTerm이 자동으로 열렸는지 확인" -echo " → 열리지 않았다면: Spotlight (⌘Space) → 'iTerm' 검색" echo "" echo " 2️⃣ iTerm2에서 프로파일 설정 (필수 - 30초):" echo " ┌──────────────────────────────────────────┐" @@ -377,28 +456,44 @@ echo " │ → 'Set as Default' 선택 │" echo " └──────────────────────────────────────────┘" echo "" echo " 3️⃣ 새 창 열어서 프로파일 확인 (⌘N)" -echo " ✓ 어두운 배경 (#1F1F1F)" -echo " ✓ D2Coding 13pt 폰트" -echo " ✓ 하단 Status Bar (CPU, Memory, Network, Battery, Host)" -echo " ✓ 100 columns × 25 rows" +echo " ✓ 어두운 배경" +echo " ✓ D2Coding 폰트" +echo " ✓ 하단 Status Bar (CPU, Memory 등)" echo "" echo " 4️⃣ ZSH 테마 확인 (새 터미널에서):" echo " echo \$ZSH_THEME # → agnoster" echo " type build_prompt # → function 확인" echo "" echo " 5️⃣ Stats 메뉴바 위젯 확인" -echo " → 메뉴바 오른쪽에 시스템 모니터 표시" echo "" -echo "💡 참고:" -echo " - Dynamic Profile: ✅ 생성 완료" -echo " - 기본 GUID 설정: ✅ 완료" -echo " - Stats 설정: ✅ 적용 완료" -echo " - 최종 단계: 2단계 프로파일 설정만 진행하면 끝!" +echo " 6️⃣ Rectangle 윈도우 관리 설정 (선택사항 - 3분):" +echo " a. System Settings > Privacy & Security > Accessibility" +echo " → Rectangle 체크 (필수)" +echo " b. Rectangle Preferences (⌘,)" +echo " → 키보드 단축키 확인/변경" +echo "" +echo " 기본 단축키:" +echo " ⌃⌥→ : 오른쪽 절반 ⌃⌥← : 왼쪽 절반" +echo " ⌃⌥↑ : 최대화 ⌃⌥↓ : 하단 정렬" +echo " ⌃⌥F : 전체 화면 ⌃⌥C : 가운데" +echo "" +echo " 7️⃣ AppCleaner 사용법:" +echo " - Applications 폴더에서 AppCleaner 실행" +echo " - 앱 삭제 시 관련 파일까지 자동 정리" +echo " - 추천: Dock에 추가하여 사용" +echo "" +echo "💡 설치된 앱 목록:" +echo " ✅ iTerm2 (터미널)" +echo " ✅ Stats (시스템 모니터)" +echo " ✅ Rectangle (윈도우 관리)" +echo " ✅ AppCleaner (앱 제거 도구)" +echo " ✅ Cursor, Notion, Discord, Slack" +echo " ✅ IINA, Telegram, Chrome" +echo " ✅ Tunnelblick (VPN)" echo "" echo "🔧 문제 발생 시:" -echo " - iTerm2가 실행 안 되면: Spotlight에서 'iTerm' 검색 후 실행" -echo " - 프로파일 목록에 nad4-profile 없으면:" -echo " Settings > Profiles > Other Actions > Import JSON" -echo " → iterm2-settings/profile.json 선택" +echo " - brew 명령어 오류: 새 터미널 열기" +echo " - iTerm2 프로파일 없음: profile.json 확인" +echo " - Rectangle/Stats 설정 오류: 수동 설정" echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"