Mac 개발 환경 세팅: WezTerm·Neovim·Tmux·CLI 도구 총정리
WezTerm·Oh My Zsh·AstroNvim·Tmux부터 uv·lazygit·zoxide·yazi까지, 실제 사용 중인 설정 파일 원본과 함께 정리한 Mac 개발 환경 구축 가이드
2026-08-12 · 최초 발행 2026-04-29
Mac에서 개발 환경을 새로 구축할 때 반복되는 설정들이 있다. 터미널 에뮬레이터, 셸 테마, 에디터, 패키지 매니저, Git 도구, 세션 관리자까지 하나씩 설치하다 보면 순서와 설정값을 놓치기 쉽다. 아래는 WezTerm부터 언어 버전 관리까지, 실제 사용 중인 설정 파일 원본을 그대로 담아 정리한 순서다.
WezTerm 터미널 설정
WezTerm은 GPU 가속을 지원하는 크로스 플랫폼 터미널 에뮬레이터로, Lua로 설정 파일을 작성한다.
vi ~/.wezterm.lua # 홈 디렉토리에 WezTerm 설정 파일 생성 (없으면 새로 만들어짐)
기본 ~/.wezterm.lua 예시:
local wezterm = require 'wezterm'
local config = {}
config.font = wezterm.font('JetBrains Mono') -- 폰트 설정 (Nerd Font 계열 권장)
config.font_size = 14.0 -- 폰트 크기
config.color_scheme = 'Tokyo Night' -- 컬러 테마
config.enable_tab_bar = true -- 탭 바 표시
config.window_padding = {
left = 8, right = 8, top = 8, bottom = 8, -- 여백 설정 (px)
}
return config
팁: WezTerm 공식 문서(wezfurlong.org/wezterm)에서 다양한 테마와 키바인딩 설정을 확인하세요.
Oh My Zsh와 Powerlevel10k 테마
Oh My Zsh가 이미 설치돼 있는지부터 확인한다.
ls -al ~/.zshrc # zshrc 파일 존재 여부 확인 (-al: 숨김파일 포함 상세 목록)
ls -al ~/.oh-my-zsh # oh-my-zsh 디렉토리 존재 여부 확인
Powerlevel10k는 커스텀 테마 디렉토리에 클론해서 설치한다.
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# --depth=1: 최신 커밋만 받아 다운로드 속도 최소화
# ${ZSH_CUSTOM:-...}: ZSH_CUSTOM 환경변수가 없으면 기본 경로 사용
.zshrc에서 테마를 지정하고 적용한다.
vi ~/.zshrc # zsh 설정 파일 열기 (ZSH_THEME 항목을 아래처럼 수정)
# ZSH_THEME="powerlevel10k/powerlevel10k"
source ~/.zshrc # 설정 파일을 현재 셸에 즉시 반영
source ~/.zshrc 실행 후 Powerlevel10k 초기 설정 마법사가 자동으로 실행된다. 화면 안내에 따라 아이콘·스타일을 선택하면 된다.
Neovim과 AstroNvim 세팅
Neovim 설치는 Homebrew로 한다.
brew search neovim # Homebrew에서 neovim 패키지 검색
brew info neovim # 버전, 의존성, 설치 경로 등 상세 정보 확인
brew install neovim # neovim 설치
nvim # 설치 확인 겸 첫 실행 (q 또는 :q! 로 종료)
AstroNvim을 설치하기 전에는 기존 설정을 반드시 백업해야 한다.
# 기존 Neovim 관련 디렉토리를 .bak으로 이름 변경해 백업
mv ~/.config/nvim ~/.config/nvim.bak # 플러그인 설정
mv ~/.local/share/nvim ~/.local/share/nvim.bak # 플러그인 데이터
mv ~/.local/state/nvim ~/.local/state/nvim.bak # 상태 파일
mv ~/.cache/nvim ~/.cache/nvim.bak # 캐시
# AstroNvim 공식 스타터 템플릿을 Neovim 설정 경로에 클론
git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim
# .git 폴더 제거 → 내 개인 git 저장소로 독립 관리하기 위함
rm -rf ~/.config/nvim/.git
# Neovim 실행 → Lazy.nvim이 플러그인 자동 설치 시작 (1~3분 소요)
nvim
AstroNvim의 Treesitter 파서 빌드에는 tree-sitter-cli가 필요하다.
npm i -g tree-sitter-cli # -g: 전역 설치, AstroNvim의 Treesitter 파서 빌드에 필요
커뮤니티 플러그인 팩은 ~/.config/nvim/lua/community.lua 파일로 관리한다. 아래는 실제 사용 설정 파일이다.
-- ~/.config/nvim/lua/community.lua
-- AstroCommunity: import any community modules here
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
---@type LazySpec
return {
"AstroNvim/astrocommunity",
{ import = "astrocommunity.pack.lua" }, -- Lua 언어 팩
{ import = "astrocommunity.colorscheme.catppuccin" }, -- Catppuccin 컬러 테마
{ import = "astrocommunity.completion.copilot-lua" }, -- GitHub Copilot 통합
{ import = "astrocommunity.completion.copilot-lua-cmp" }, -- Copilot + nvim-cmp 연동
{ import = "astrocommunity.completion.avante-nvim" }, -- AI 코드 어시스턴트 (avante)
{ import = "astrocommunity.editing-support.vim-visual-multi" }, -- 멀티 커서 편집
{ import = "astrocommunity.markdown-and-latex.markdown-preview-nvim" }, -- 마크다운 미리보기
{ import = "astrocommunity.motion.flash-nvim" }, -- 빠른 커서 이동 (f/t 강화)
{ import = "astrocommunity.motion.nvim-surround" }, -- 괄호·따옴표 감싸기
{ import = "astrocommunity.motion.portal-nvim" }, -- 점프 목록 시각화
{ import = "astrocommunity.pack.bash" }, -- Bash 언어 팩
{ import = "astrocommunity.pack.cmake" }, -- CMake 언어 팩
{ import = "astrocommunity.pack.cpp" }, -- C/C++ 언어 팩
{ import = "astrocommunity.pack.full-dadbod" }, -- DB 클라이언트 (dadbod)
{ import = "astrocommunity.pack.html-css" }, -- HTML/CSS 언어 팩
{ import = "astrocommunity.pack.go" }, -- Go 언어 팩
{ import = "astrocommunity.pack.json" }, -- JSON 언어 팩
{ import = "astrocommunity.pack.markdown" }, -- Markdown 언어 팩
{ import = "astrocommunity.pack.python" }, -- Python 언어 팩
{ import = "astrocommunity.pack.rust" }, -- Rust 언어 팩
{ import = "astrocommunity.pack.tailwindcss" }, -- Tailwind CSS 팩
{ import = "astrocommunity.pack.typescript" }, -- TypeScript 언어 팩
{ import = "astrocommunity.pack.vue" }, -- Vue.js 언어 팩
{ import = "astrocommunity.pack.yaml" }, -- YAML 언어 팩
{ import = "astrocommunity.syntax.vim-easy-align" }, -- 텍스트 정렬 도구
}
참고: 사용하지 않는 팩은 해당 줄을
--로 주석 처리하면 된다. 팩을 추가할수록 첫 실행 시 다운로드 시간이 늘어난다.
Zsh 자동완성·문법강조 플러그인
zsh-autosuggestions는 이전에 입력한 명령어를 흐릿한 글자로 자동 완성 제안한다. → 키로 수락한다.
git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# oh-my-zsh 플러그인 디렉토리에 클론 → .zshrc의 plugins 배열에 이름만 추가하면 활성화
zsh-syntax-highlighting은 올바른 명령어는 초록색, 잘못된 명령어는 빨간색으로 실시간 강조한다.
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
두 플러그인은 .zshrc의 plugins 배열에 추가해야 활성화된다.
nvim ~/.zshrc # Neovim으로 zsh 설정 파일 열기
# plugins 배열에 두 플러그인 추가 (기존 git은 유지)
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)
source ~/.zshrc # 변경 사항 즉시 적용
Homebrew로 개발 도구 한 번에 설치
언어·런타임·데이터베이스·컨테이너 도구는 한 번에 설치한다.
# 개발에 필요한 언어·런타임·데이터베이스·컨테이너 도구를 한 번에 설치
brew install node python git nvm mysql redis postgresql docker docker-compose
| 패키지 | 용도 |
|---|---|
node |
Node.js 런타임 (nvm 보완용) |
python |
Python 3.x |
git |
버전 관리 |
nvm |
Node 버전 매니저 |
mysql |
MySQL 데이터베이스 |
redis |
인메모리 캐시/DB |
postgresql |
PostgreSQL 데이터베이스 |
docker |
컨테이너 런타임 |
docker-compose |
멀티 컨테이너 오케스트레이션 |
기존 Unix 도구를 대체하는 현대적 CLI 유틸리티도 함께 설치한다.
# 기존 Unix 도구들을 대체하는 현대적 CLI 유틸리티 일괄 설치
brew install eza bat fd ripgrep htop dust duf curl wget httpie nmap jq yq fx thefuck
| 패키지 | 대체 대상 | 설명 |
|---|---|---|
eza |
ls |
색상·아이콘이 있는 파일 목록 |
bat |
cat |
문법 강조 파일 뷰어 |
fd |
find |
빠르고 직관적인 파일 검색 |
ripgrep |
grep |
초고속 텍스트 검색 |
htop |
top |
대화형 프로세스 뷰어 |
dust |
du |
직관적인 디스크 사용량 시각화 |
duf |
df |
디스크 여유공간 시각화 |
httpie |
curl |
사람 친화적인 HTTP 클라이언트 |
jq |
— | JSON 커맨드라인 프로세서 |
yq |
— | YAML/JSON 프로세서 |
fx |
— | 대화형 JSON 뷰어 |
thefuck |
— | 오타 명령어 자동 수정 |
NVM으로 Node.js 버전 관리
NVM은 여러 Node.js 버전을 프로젝트별로 관리할 수 있게 해준다. .zshrc에 초기화 코드를 추가한다.
nvim ~/.zshrc # 설정 파일 열어 NVM 초기화 코드 추가
# NVM 디렉토리 경로 지정
export NVM_DIR="$HOME/.nvm"
# nvm.sh 존재할 때만 로드 (오류 방지용 조건부 source)
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
# nvm 탭 자동완성 활성화
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
source ~/.zshrc # 설정 반영 후 nvm 명령 사용 가능
Node.js 설치와 기본 버전 지정은 다음 순서로 한다.
nvm list # 현재 로컬에 설치된 Node 버전 목록 확인
nvm help # nvm 사용법 및 하위 명령어 안내
nvm ls-remote # 설치 가능한 모든 Node 버전 목록 조회
nvm install v24.14.1 # Node.js v24.14.1 다운로드 및 설치
nvm alias default 24.14.1 # 셸 시작 시 기본으로 사용할 버전 지정
nvm list # 설치 결과 및 default 별칭 확인
node --version # v24.14.1 출력되면 정상
UV Python 패키지 매니저
UV는 Rust로 작성된 초고속 Python 패키지 매니저로, pip보다 10~100배 빠르다.
# astral.sh 공식 인스톨러 스크립트를 curl로 받아 즉시 실행
# -L: 리다이렉트 추적, -s: 진행 표시 생략, -S: 오류는 표시, -f: HTTP 오류 시 실패
curl -LsSf https://astral.sh/uv/install.sh | sh
바이너리 경로를 PATH에 추가한다.
nvim ~/.zshrc
# uv 바이너리가 설치된 ~/.local/bin 을 PATH 앞에 추가
export PATH="$HOME/.local/bin:$PATH"
source ~/.zshrc # 설정 반영 후 uv 명령 사용 가능
가상환경 생성이 정상 동작하는지 테스트한다.
mkdir ~/Work # 작업 디렉토리 생성
mkdir ~/Work/uv-test # 테스트 프로젝트 폴더
cd ~/Work/uv-test # 해당 폴더로 이동
uv venv -p 3.12 # Python 3.12 기반 가상환경(.venv) 생성
source .venv/bin/activate # 가상환경 활성화 (프롬프트에 (.venv) 표시됨)
python # Python 인터랙티브 REPL 진입 (exit() 로 종료)
Git 생산성 도구: gh·git-delta·lazygit·fzf-git
GitHub CLI와 diff 도구는 한 번에 설치한다.
# GitHub CLI, 컬러 diff, 퍼지 파인더 설치
brew install gh git-delta fzf
| 패키지 | 설명 |
|---|---|
gh |
GitHub 공식 CLI (PR, Issue, Repo 관리) |
git-delta |
컬러풀한 diff 뷰어 |
fzf |
퍼지 파인더 (히스토리 검색 등) |
Lazygit은 터미널에서 Git을 시각적으로 다룰 수 있는 TUI 도구다.
brew install lazygit # 터미널 Git TUI 도구 설치
cd ~/Work/uv-test # 테스트 프로젝트 디렉토리로 이동
git init # 새 Git 저장소 초기화 (.git 폴더 생성)
git status # 현재 변경 사항 확인
git add . # 모든 파일 스테이징 영역에 추가
lazygit # TUI Git 인터페이스 실행 (q 로 종료)
fzf-git.sh를 설치하면 Git 브랜치·로그를 퍼지 검색으로 찾을 수 있다.
cd ~ # 홈 디렉토리로 이동
git clone https://github.com/junegunn/fzf-git.sh.git # fzf-git 스크립트 클론
nvim ~/.zshrc
# fzf-git 단축키 활성화 (Ctrl+G 조합 키 사용 가능해짐)
source ~/fzf-git.sh/fzf-git.sh
source ~/.zshrc # 설정 반영
주요 단축키는 Ctrl+G F(파일), Ctrl+G B(브랜치), Ctrl+G L(로그)이다.
현대적인 CLI 대체 도구: zoxide·bottom
Zoxide는 디렉토리 이동 이력을 학습하는 스마트 cd 도구다.
brew install zoxide # 디렉토리 이동 이력을 학습하는 스마트 cd 도구
nvim ~/.zshrc
# zoxide를 zsh에 통합 (z 명령어 활성화)
eval "$(zoxide init zsh)"
source ~/.zshrc # 설정 반영 후 z 명령 사용 가능
자주 방문하는 디렉토리를 학습하여 z proj 만으로 이동할 수 있게 된다.
Bottom은 Rust로 작성된 크로스 플랫폼 시스템 모니터다.
brew install bottom # Rust로 작성된 크로스 플랫폼 시스템 모니터
btm 명령으로 CPU·메모리·네트워크·프로세스를 한눈에 모니터링한다.
Tmux와 Tmuxinator 세션 관리
Tmux는 세션·창·패널을 분할 관리하는 터미널 멀티플렉서다.
brew install tmux # 터미널 멀티플렉서: 세션·창·패널 분할 관리
기본 사용법은 다음과 같다.
tmux new -s test # 'test'라는 이름의 새 세션 생성 및 진입
# Ctrl+B, D # 세션 분리 (세션은 백그라운드에서 계속 실행)
# tmux attach -t test # 분리한 세션에 다시 연결
설정 파일은 ~/.tmux.conf에 작성한다.
nvim ~/.tmux.conf # tmux 전역 설정 파일 생성/편집
아래는 실제 사용 중인 ~/.tmux.conf 전체다.
# =====================================================================
# 1. 기본 서버 설정 (Terminal & Color)
# =====================================================================
set -g default-terminal "tmux-256color" # tmux 전용 256색 터미널
set -ag terminal-overrides ",xterm-256color:RGB" # 트루컬러(24bit) 활성화
set -sg escape-time 10 # ESC 입력 지연 제거 (Neovim 사용자 필수)
set -g mouse on # 마우스 스크롤·패널 클릭 활성화
set -g @powerkit_keybinding_conflict_action ignore # powerkit 키 충돌 경고 무시
# =====================================================================
# 2. 키 바인딩 (Pane & Window Navigation)
# =====================================================================
# vi 방향키로 패인 이동 (Prefix + h/j/k/l)
bind h select-pane -L # 왼쪽 패인으로 이동
bind j select-pane -D # 아래 패인으로 이동
bind k select-pane -U # 위 패인으로 이동
bind l select-pane -R # 오른쪽 패인으로 이동
# Alt + H/J/K/L: 패인 크기 조절 (Prefix 없이)
bind -n M-H resize-pane -L 2
bind -n M-L resize-pane -R 2
bind -n M-K resize-pane -U 2
bind -n M-J resize-pane -D 2
bind -r m resize-pane -Z # Prefix + m: 패인 최대화 토글
# Alt + 방향키: 윈도우 이동 (Prefix 없이)
bind-key -n M-Right select-window -t :+
bind-key -n M-Left select-window -t :-
# Alt + n/p: 패인→윈도우 순차 이동 (끝에 도달하면 다음 윈도우로)
bind-key -n M-n if-shell -F "#{pane_at_right}" \
"if-shell -F '#{pane_at_bottom}' 'select-window -t :+; select-pane -t top-left' 'select-pane -D'" \
"select-pane -R"
bind-key -n M-p if-shell -F "#{pane_at_left}" \
"if-shell -F '#{pane_at_top}' 'select-window -t :-; select-pane -t bottom-right' 'select-pane -U'" \
"select-pane -L"
bind-key -n M-s set-window-option synchronize-panes\; \
display-message "synchronize-panes #{?synchronize-panes,on,off}" # Alt+s: 모든 패인 동기화 토글
bind M-c attach-session -c "#{pane_current_path}" # 현재 경로로 세션 연결
# =====================================================================
# 3. VI 복사 모드 및 시스템 클립보드 (macOS pbcopy 연동)
# =====================================================================
set-window-option -g mode-keys vi # 복사 모드에서 vi 키맵 사용
bind Escape copy-mode # Prefix + Escape: 복사 모드 진입
bind-key -T copy-mode-vi 'v' send -X begin-selection # v: 선택 시작
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle # Ctrl+v: 블록 선택
bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel "pbcopy" # y: 복사 + 클립보드 전송 + 모드 종료
bind-key -T copy-mode-vi 'Escape' send -X clear-selection # Escape: 선택 해제
unbind p
bind p paste-buffer # Prefix + p: 붙여넣기
# 마우스 드래그 복사도 pbcopy와 연동
unbind -T copy-mode-vi MouseDragEnd1Pane
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
# =====================================================================
# 4. 플러그인 (TPM)
# =====================================================================
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-yank' # 시스템 클립보드 연동 강화
set -g @plugin 'fabioluciano/tmux-tokyo-night' # Tokyo Night 테마
set -g @plugin 'tmux-plugins/tmux-resurrect' # 세션 보존 (서버 재시작 후 복원)
set -g @plugin 'tmux-plugins/tmux-continuum' # 세션 자동 저장
set -g @resurrect-capture-pane-contents 'on' # 패인 내용도 함께 저장
set -g @continuum-restore 'on' # tmux 시작 시 자동 복원
set -g status-position bottom # 상태바 하단 고정
run '~/.tmux/plugins/tpm/tpm' # TPM 초기화 (반드시 파일 맨 마지막에 위치)
TPM 설치:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm후 tmux 내에서Prefix + I로 플러그인 설치
Tmuxinator는 YAML 파일로 tmux 세션 레이아웃을 자동 구성하는 도구다.
brew install tmuxinator # YAML 파일로 tmux 세션 레이아웃을 자동 구성하는 도구
프로젝트 설정 파일을 만든다.
mkdir ~/.tmuxinator # tmuxinator 설정 디렉토리 생성
nvim ~/.tmuxinator/rupi.yml # 'rupi'라는 이름의 프로젝트 설정 파일 작성
# ~/.tmuxinator/rupi.yml (실제 사용 파일)
name: rupi # 프로젝트 이름 → mux rupi 명령으로 실행
root: ~/Work # 모든 창의 기본 작업 디렉토리
windows:
- file: fm # 첫 번째 창: yazi 파일 매니저 (fm 명령)
- bash: # 두 번째 창: 빈 bash 터미널
- bash: # 세 번째 창: 빈 bash 터미널
- bash: # 네 번째 창: 빈 bash 터미널
필요에 따라 windows 항목을 자유롭게 수정할 수 있다. 예를 들어 특정 창에서 서버를 자동 실행하려면 다음처럼 쓴다.
windows:
- file: fm
- editor: nvim # nvim 자동 실행
- server: npm run dev # 개발 서버 자동 시작
- bash:
마지막으로 별칭을 등록한다.
nvim ~/.zshrc
alias mux='tmuxinator' # tmuxinator를 mux 단축 명령으로 사용
source ~/.zshrc # 설정 반영
mux rupi # rupi.yml 설정대로 tmux 세션 자동 구성 및 시작
Yazi 파일 매니저
Yazi는 Rust로 작성된 블레이징 패스트 터미널 파일 매니저다.
brew install yazi # 비동기 처리 기반 터미널 파일 매니저
종료 후 마지막 탐색 위치로 자동 이동하는 래퍼 함수를 추가한다.
nvim ~/.zshrc # yazi 래퍼 함수 추가 (종료 후 현재 위치로 cd 이동)
# fm 함수: yazi 종료 시 마지막으로 탐색한 디렉토리로 자동 이동
function fm() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" # 임시 파일로 현재 경로 저장
yazi "$@" --cwd-file="$tmp" # yazi 실행, 종료 디렉토리를 tmp에 기록
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd" # 다른 경로라면 해당 디렉토리로 이동
fi
rm -f -- "$tmp" # 임시 파일 정리
}
source ~/.zshrc # 설정 반영
fm # 파일 매니저 실행 (q 로 종료 후 해당 위치로 이동)
FZF 키바인딩과 미리보기 설정
FZF의 고급 설정과 키바인딩은 .zshrc에 블록으로 추가한다.
nvim ~/.zshrc # 아래 FZF 설정 블록 추가
# fzf 기본 로드 (~/.fzf.zsh 존재 시)
[[ ! -f ~/.fzf.zsh ]] || source ~/.fzf.zsh
# ── 컬러 테마 (Tokyo Night 계열) ──────────────────────────────────────
fg="#CBE0F0"
bg="#011628"
bg_highlight="#143652"
purple="#B388FF"
blue="#06BCE4"
cyan="#2CF9ED"
export FZF_DEFAULT_OPTS="--color=fg:${fg},bg:${bg},hl:${purple},fg+:${fg},bg+:${bg_highlight},hl+:${purple},info:${blue},prompt:${cyan},pointer:${cyan},marker:${cyan},spinner:${cyan},header:${cyan}"
# ── 기본 검색 명령: fd로 숨김 파일 포함, .git 제외 ────────────────────
export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" # Ctrl+T 파일 검색
export FZF_ALT_C_COMMAND="fd --type=d --hidden --strip-cwd-prefix --exclude .git" # Alt+C 디렉토리 검색
# ── 자동완성 경로 생성 함수 ───────────────────────────────────────────
_fzf_compgen_path() { fd --hidden --exclude .git . "$1"; } # 파일 자동완성
_fzf_compgen_dir() { fd --type=d --hidden --exclude .git . "$1"; } # 디렉토리 자동완성
# fzf-git 통합 (Ctrl+G 조합 단축키)
source ~/fzf-git.sh/fzf-git.sh
# ── 미리보기: 디렉토리는 eza 트리, 파일은 bat으로 표시 ────────────────
show_file_or_dir_preview="if [ -d {} ]; then eza --tree --color=always {} | head -200; else bat -n --color=always --line-range :500 {}; fi"
export FZF_CTRL_T_OPTS="--preview '$show_file_or_dir_preview'"
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
# ── 컨텍스트별 미리보기 커스터마이징 ────────────────────────────────
_fzf_comprun() {
local command=$1
shift
case "$command" in
cd) fzf --preview 'eza --tree --color=always {} | head -200' "$@" ;; # cd: 트리 미리보기
export | unset) fzf --preview "eval 'echo \${}'" "$@" ;; # 환경변수: 값 미리보기
ssh) fzf --preview 'dig {}' "$@" ;; # ssh: DNS 조회
*) fzf --preview "$show_file_or_dir_preview" "$@" ;;
esac
}
주요 단축키는 다음과 같다.
Ctrl+R: 히스토리 퍼지 검색Ctrl+T: 현재 디렉토리 파일 퍼지 검색 (bat 미리보기 포함)Alt+C: 하위 디렉토리로 cd (eza 트리 미리보기 포함)Ctrl+G F/B/L: fzf-git 파일/브랜치/로그 검색
source ~/.zshrc # 설정 반영
alias | grep fm # fm 별칭이 등록되었는지 확인
언어 버전 관리: goenv·rustup
goenv는 pyenv 방식으로 Go 버전을 프로젝트별로 관리한다.
brew install goenv # pyenv 방식으로 Go 버전을 프로젝트별 관리
nvim ~/.zshrc
# goenv 초기화 설정 추가
export GOENV_ROOT="$HOME/.goenv" # goenv 루트 디렉토리 지정
export PATH="$GOENV_ROOT/bin:$PATH" # goenv 바이너리 PATH 등록
eval "$(goenv init -)" # goenv 셸 통합 초기화
source ~/.zshrc # 설정 반영 후 goenv 명령 사용 가능
Rust는 Homebrew보다 rustup 공식 인스톨러가 버전 관리·업데이트에 더 편하다.
brew install rust # Homebrew 방식 (단순 참고용, 버전 관리 불편)
# rustup 공식 인스톨러 사용 (권장): 버전 관리·업데이트가 편리
curl https://sh.rustup.rs -sSf | sh
# 설치 중 옵션 선택 시 1번(기본 설치) 선택
설치 완료 후 확인한다.
source ~/.zshrc # rustup이 추가한 PATH 갱신 (~/.cargo/bin)
rustc --version # Rust 컴파일러 버전 확인 (예: rustc 1.78.0)
cargo --version # Rust 패키지 매니저 버전 확인 (예: cargo 1.78.0)
전체 설치 명령어 한 번에 보기
아래 명령어를 순서대로 실행하면 전체 환경을 구성할 수 있다.
# 1. Powerlevel10k 테마 (oh-my-zsh 커스텀 테마 디렉토리에 클론)
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# 2. Zsh 자동완성·문법강조 플러그인
git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 3. Neovim 본체 + AstroNvim용 tree-sitter 파서 빌드 도구
brew install neovim
npm i -g tree-sitter-cli
# 4. AstroNvim 설치 (기존 설정 백업 후 템플릿 클론)
mv ~/.config/nvim ~/.config/nvim.bak
git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim
rm -rf ~/.config/nvim/.git # 개인 git 저장소로 분리 관리하기 위해 .git 제거
# 5. 개발 언어·런타임·DB·컨테이너 도구
brew install node python git nvm mysql redis postgresql docker docker-compose
# 6. 현대적 CLI 대체 도구 (ls→eza, cat→bat, grep→ripgrep 등)
brew install eza bat fd ripgrep htop dust duf curl wget httpie nmap jq yq fx thefuck
# 7. Git 생산성 도구
brew install gh git-delta fzf lazygit
# 8. 터미널 생산성 도구 (스마트 cd, 시스템 모니터, 세션 관리, 파일 매니저)
brew install zoxide bottom tmux tmuxinator yazi
# 9. UV: pip보다 10~100배 빠른 Python 패키지 매니저
curl -LsSf https://astral.sh/uv/install.sh | sh
# 10. 언어 버전 관리 (Go, Rust)
brew install goenv
curl https://sh.rustup.rs -sSf | sh
# 11. fzf-git: Git 작업에 fzf 퍼지 검색 통합
git clone https://github.com/junegunn/fzf-git.sh.git ~/fzf-git.sh
# 12. 모든 설정 즉시 반영
source ~/.zshrc
완성된 ~/.zshrc 전체는 아래와 같다. 섹션별로 어떤 역할을 하는지 주석에 정리해뒀다.
# ==============================================================================
# 1. P10K INSTANT PROMPT — 반드시 파일 맨 위에 위치해야 함
# ==============================================================================
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# ==============================================================================
# 2. OH-MY-ZSH 초기화
# ==============================================================================
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k" # Powerlevel10k 테마 사용
plugins=(
git # Git 단축 명령어 및 자동완성
zsh-syntax-highlighting # 명령어 실시간 색상 강조
zsh-autosuggestions # 히스토리 기반 자동완성 제안
z # oh-my-zsh 내장 z 플러그인 (자주 간 디렉토리 이동)
web-search # 터미널에서 바로 웹 검색 (google, ddg 등)
)
source $ZSH/oh-my-zsh.sh
# ==============================================================================
# 3. PATH — 우선순위 순으로 통합 관리
# ==============================================================================
export PATH="$HOME/.local/bin:$PATH" # uv, claude 등 로컬 바이너리
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH" # Bun JavaScript 런타임
export PNPM_HOME="/Users/rupi/Library/pnpm"
[[ ":$PATH:" != *":$PNPM_HOME:"* ]] && export PATH="$PNPM_HOME:$PATH" # pnpm (중복 추가 방지)
# ==============================================================================
# 4. 환경 변수
# ==============================================================================
export UV_CACHE_DIR="/Users/rupi/.uv_cache" # uv 패키지 캐시 위치 지정
export BAT_THEME=tokyonight_night # bat 컬러 테마 (Tokyo Night)
[[ -f ~/.secrets ]] && source ~/.secrets # API 키 등 민감한 환경변수 (별도 파일 관리)
# ==============================================================================
# 5. 런타임 초기화 — 가벼운 것부터 순서대로
# ==============================================================================
. "$HOME/.cargo/env" # Rust Cargo (PATH 등록, 가볍게 로드)
eval "$(goenv init -)" # goenv: Go 버전 관리 초기화
# SDKMAN: Java/Kotlin 등 JVM 계열 버전 관리 (설치된 경우에만 로드)
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"
# NVM: Node.js 버전 관리
# 아래 주석 처리된 lazy load 방식으로 교체하면 셸 시작 속도 200~500ms 개선 가능
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"
# ==============================================================================
# 6. 자동완성 — fpath 등록 먼저, compinit은 한 번만
# ==============================================================================
fpath=(/Users/rupi/.docker/completions $fpath) # Docker 자동완성
[ -s "/Users/rupi/.oh-my-zsh/completions/_bun" ] && fpath=(/Users/rupi/.oh-my-zsh/completions $fpath) # Bun 자동완성
autoload -Uz compinit
compinit
# ==============================================================================
# 7. CLI 도구 설정
# ==============================================================================
# FZF 로드
[[ ! -f ~/.fzf.zsh ]] || source ~/.fzf.zsh
# FZF 컬러 테마 (Tokyo Night 계열)
fg="#CBE0F0"; bg="#011628"; bg_highlight="#143652"
purple="#B388FF"; blue="#06BCE4"; cyan="#2CF9ED"
export FZF_DEFAULT_OPTS="--color=fg:${fg},bg:${bg},hl:${purple},fg+:${fg},bg+:${bg_highlight},hl+:${purple},info:${blue},prompt:${cyan},pointer:${cyan},marker:${cyan},spinner:${cyan},header:${cyan}"
# fd로 숨김 파일 포함 검색, .git 제외
export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="fd --type=d --hidden --strip-cwd-prefix --exclude .git"
_fzf_compgen_path() { fd --hidden --exclude .git . "$1"; }
_fzf_compgen_dir() { fd --type=d --hidden --exclude .git . "$1"; }
source ~/fzf-git.sh/fzf-git.sh # Ctrl+G 조합으로 Git 브랜치·파일·로그 검색
# 미리보기: 디렉토리는 eza 트리, 파일은 bat으로 표시
show_file_or_dir_preview="if [ -d {} ]; then eza --tree --color=always {} | head -200; else bat -n --color=always --line-range :500 {}; fi"
export FZF_CTRL_T_OPTS="--preview '$show_file_or_dir_preview'"
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
_fzf_comprun() {
local command=$1; shift
case "$command" in
cd) fzf --preview 'eza --tree --color=always {} | head -200' "$@" ;;
export | unset) fzf --preview "eval 'echo \${}'" "$@" ;;
ssh) fzf --preview 'dig {}' "$@" ;;
*) fzf --preview "$show_file_or_dir_preview" "$@" ;;
esac
}
eval $(thefuck --alias fuck) # thefuck: 오타 명령어 자동 수정 (fuck 또는 fk)
alias fk='fuck'
eval "$(zoxide init zsh --cmd cd)" # zoxide: cd를 대체하는 스마트 디렉토리 이동
alias zi='cdi' # zi: 인터랙티브 디렉토리 선택
# ==============================================================================
# 8. 키 바인딩 & 별칭
# ==============================================================================
bindkey "^[b" backward-word # Alt+B: 이전 단어로 이동
bindkey "^[f" forward-word # Alt+F: 다음 단어로 이동
alias mux="tmuxinator" # tmuxinator 단축 명령
alias fm="yazi" # yazi 파일 매니저
alias fzfp="fzf --preview 'bat --color=always --style=numbers --line-range :500 {}'" # bat 미리보기 fzf
alias ls="eza --icons=always" # ls → eza (아이콘 포함)
alias ll="eza -l --icons=always" # ll → eza 상세 목록
alias cr="claude --dangerously-skip-permissions" # Claude Code 권한 생략 실행
# ==============================================================================
# 9. P10K 테마 — 반드시 파일 맨 마지막에 위치
# ==============================================================================
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock" # Colima Docker 소켓
이 가이드는 영상 강의의 터미널 히스토리를 기반으로 작성된 실습 참고 문서다. 각 도구의 공식 문서를 함께 참고하면 더 깊이 있는 설정이 가능하다.