Stow
Stow is a simple symlink farm manager.
GNU Stow는 여러 소프트웨어 패키지의 설정 파일(dotfiles)을 효율적으로 관리할 수 있게 도와주는 심볼릭 링크(Symbolic Link) 관리자입니다. 단순히 파일을 복사하는 것이 아니라, 특정 폴더에 모아둔 설정 파일들을 시스템의 원래 위치(예: ~/.config)로 연결해주는 역할을 합니다.
1. 기본 개념: 왜 Stow를 쓰는가?
일반적으로 설정 파일들은 시스템 여기저기(~/.zshrc, ~/.config/nvim/, ~/.ssh/config) 흩어져 있습니다. Stow를 사용하면 이 파일들을 ~/dotfiles라는 하나의 폴더에 모아두고, 마치 제자리에 있는 것처럼 시스템에 인식시킬 수 있습니다. 이렇게 하면 Git으로 설정 파일을 관리하기가 매우 수월해집니다.
2. 폴더 구조 설계 (가장 중요)
Stow의 핵심은 **"Stow 폴더 내부의 구조가 대상 폴더(일반적으로 홈 디렉토리)의 구조와 일치해야 한다"**는 것입니다.
추천 구조 예시:
~/dotfiles/
├── nvim/ # 패키지 이름
│ └── .config/ # 홈 디렉토리에서의 상대 경로
│ └── nvim/
│ └── init.lua
├── zsh/ # 패키지 이름
│ └── .zshrc # 홈 디렉토리 바로 아래 위치
└── tmux/
└── .tmux.conf3. 주요 명령어 및 사용법
Stow는 기본적으로 실행하는 위치의 하위 디렉토리를 하나의 "패키지"로 인식하여 부모 디렉토리에 링크를 생성합니다.
설치
# macOS
brew install stow
# Ubuntu/Debian
sudo apt install stow
# Arch Linux
sudo pacman -S stow심볼릭 링크 생성 (Stowing)
~/dotfiles 디렉토리로 이동한 후, 관리할 패키지 이름을 지정합니다.
cd ~/dotfiles
stow nvim- 결과:
~/dotfiles/nvim/.config/nvim파일이~/.config/nvim위치에 심볼릭 링크로 연결됩니다.
심볼릭 링크 제거 (Unstowing)
설정을 더 이상 연결하고 싶지 않을 때 사용합니다.
stow -D nvim변경 사항 재적용 (Restowing)
파일 구조가 바뀌었거나 링크를 새로고침해야 할 때 사용합니다. (-D 후 다시 stow 하는 것과 같습니다.)
stow -R nvim4. 실전 팁과 고급 옵션
대상 디렉토리 지정 (-t 또는 --target)
기본적으로 Stow는 부모 디렉토리(..)에 링크를 만들지만, 명시적으로 지정할 수 있습니다.
stow -t ~ nvim시뮬레이션 모드 (-n 또는 --no-folding)
실제로 링크를 만들기 전에 어떤 일이 일어날지 미리 확인합니다. (안전빵!)
stow -nv nvim-n: 실제 실행 안 함 (dry run)-v: 상세 내용 출력 (verbose)
이미 존재하는 파일 처리
만약 ~/.zshrc가 이미 존재한다면 Stow는 충돌을 방지하기 위해 작업을 중단합니다. 이 경우 기존 파일을 백업하거나 삭제한 후 다시 stow를 실행해야 합니다.
5. 전체 워크플로우 요약
mkdir ~/dotfiles생성 및 이동.- 설정할 앱 이름으로 폴더 생성 (예:
mkdir -p nvim/.config). - 기존 설정 파일을 해당 폴더 안으로 이동.
stow nvim실행.ls -al ~로 심볼릭 링크가 잘 생성되었는지 확인.~/dotfiles전체를 Git 저장소에 푸시하여 관리.
이 방식을 사용하면 새 컴퓨터를 세팅할 때 git clone 후 stow * 명령 한 번으로 모든 환경 설정을 복구할 수 있습니다.
6. 여러 설정 세트 관리
GNU Stow에서 같은 앱에 대해 여러 설정 세트를 관리하는 핵심 아이디어는 각 설정을 서로 다른 '패키지(디렉토리)'로 분리하여 저장하고, 필요에 따라 stow와 unstow 명령어를 교체하며 사용하는 것입니다.
Jace님의 현재 워크스테이션 환경(Mac Studio, Linux, TypeScript 스택 등)을 고려할 때, 다음과 같은 구조와 워크플로우를 권장합니다.
1. 디렉토리 구조 설계
dotfiles 저장소 내에 앱 이름 뒤에 구분자(예: -work, -home, -simple)를 붙여 별도의 디렉토리를 만듭니다.
~/dotfiles/
├── nvim-full/ # 플러그인이 많은 무거운 설정
│ └── .config/nvim/
├── nvim-minimal/ # 서버 작업용 가벼운 설정
│ └── .config/nvim/
├── ghostty-dark/ # 어두운 테마 설정
│ └── .config/ghostty/
└── ghostty-light/ # 밝은 테마 설정
└── .config/ghostty/2. 설정 교체 방법 (D -> S)
Stow는 심볼릭 링크를 관리하므로, 설정을 바꿀 때는 **기존 링크를 제거(-D)하고 새 링크를 생성(-S)**하는 과정을 거칩니다.
- 현재 설정 해제 (Unstow):
cd ~/dotfiles stow -D nvim-full - 새 설정 적용 (Stow):
stow -S nvim-minimal - 한 번에 교체 (Restow 활용):
만약 파일 구조가 동일하다면
-R(Restow) 옵션을 쓸 수도 있지만, 패키지 이름이 다르면-D후-S가 가장 확실합니다.
3. 자동화 (추천)
매번 타이핑하기 번거로우므로, ship 스크립트처럼 간단한 쉘 함수나 에일리어스를 zshrc 등에 등록해 사용하세요.
# 예: nvim 설정 스위처
switch_nvim() {
local target=$1
cd ~/dotfiles
stow -D nvim-full nvim-minimal 2>/dev/null # 기존에 무엇이 있든 일단 해제
stow -S "nvim-$target"
echo "Switched to nvim-$target"
}💡 팁: 공통 설정과 차분 설정 분리
만약 두 설정 간에 80%가 겹친다면, 공통 부분만 모은 nvim-common을 만들고 나머지만 분리하세요.
stow nvim-common(항상 유지)- 상황에 따라
stow nvim-work또는stow nvim-personal추가 적용