GNU Stow를 사용한 Dotfiles 관리 방법¶
GNU Stow는 심볼릭 링크를 생성하여 dotfiles를 효율적으로 관리할 수 있는 도구입니다. 홈 디렉토리를 깔끔하게 유지하면서 Git으로 설정 파일들을 버전 관리할 수 있습니다.
Stow의 동작 원리¶
Stow는 "package" 디렉토리 내의 구조를 타겟 디렉토리(기본값: 부모 디렉토리)에 심볼릭 링크로 복제합니다.
stow vim을 실행하면 ~/.vimrc → ~/dotfiles/vim/.vimrc 심볼릭 링크가 생성됩니다.
설치¶
# Arch Linux
sudo pacman -S stow
# Ubuntu/Debian
sudo apt install stow
# Fedora
sudo dnf install stow
# macOS
brew install stow
기본 사용법¶
1. Dotfiles 디렉토리 구조 생성¶
2. 기존 설정 파일 이동¶
# 기존 설정 파일을 stow 구조로 이동
mv ~/.vimrc ~/dotfiles/vim/
mv ~/.bashrc ~/dotfiles/bash/
mv ~/.gitconfig ~/dotfiles/git/
mv ~/.config/nvim ~/dotfiles/nvim/.config/
3. Stow로 심볼릭 링크 생성¶
cd ~/dotfiles
# 개별 패키지 적용
stow vim
stow bash
stow git
# 여러 패키지 한 번에 적용
stow vim bash git tmux
# 모든 패키지 적용
stow */
4. 심볼릭 링크 제거¶
5. 재적용 (업데이트)¶
실전 디렉토리 구조 예제¶
~/dotfiles/
├── bash/
│ ├── .bashrc
│ └── .bash_profile
├── vim/
│ └── .vimrc
├── nvim/
│ └── .config/
│ └── nvim/
│ ├── init.vim
│ └── lua/
│ └── plugins.lua
├── tmux/
│ └── .tmux.conf
├── git/
│ ├── .gitconfig
│ └── .gitignore_global
├── zsh/
│ ├── .zshrc
│ └── .zsh_aliases
└── ssh/
└── .ssh/
└── config
Git으로 버전 관리¶
cd ~/dotfiles
git init
git add .
git commit -m "Initial dotfiles commit"
# 원격 저장소에 푸시
git remote add origin [email protected]:username/dotfiles.git
git push -u origin main
새 시스템에 dotfiles 배포¶
# 1. 저장소 클론
cd ~
git clone [email protected]:username/dotfiles.git
# 2. 기존 설정 파일 백업 (필요시)
mkdir ~/dotfiles-backup
mv ~/.bashrc ~/dotfiles-backup/
mv ~/.vimrc ~/dotfiles-backup/
# 3. Stow 적용
cd ~/dotfiles
stow */
# 또는 선택적으로
stow bash vim git tmux
고급 사용법¶
타겟 디렉토리 지정¶
시뮬레이션 모드¶
충돌 처리¶
.stow-local-ignore 파일¶
특정 파일을 스토우에서 제외:
실용적인 팁¶
1. 호스트별 설정 분리¶
~/dotfiles/
├── bash-common/
│ └── .bashrc
├── bash-work/
│ └── .bashrc_work
└── bash-personal/
└── .bashrc_personal
2. Makefile로 자동화¶
# ~/dotfiles/Makefile
.PHONY: install uninstall
install:
stow bash vim git tmux nvim
uninstall:
stow -D bash vim git tmux nvim
restow:
stow -R bash vim git tmux nvim
사용: make install
3. 설치 스크립트¶
#!/bin/bash
# ~/dotfiles/install.sh
packages=(bash vim git tmux nvim zsh)
for package in "${packages[@]}"; do
echo "Stowing $package..."
stow -R "$package"
done
echo "Dotfiles installation complete!"
주의사항¶
- 기존 파일 백업: Stow 실행 전 기존 설정 파일을 백업하세요
- 디렉토리 구조: Stow 디렉토리 내 구조가 홈 디렉토리 구조와 정확히 일치해야 합니다
- 심볼릭 링크 확인:
ls -la ~명령으로 링크가 올바르게 생성되었는지 확인하세요 - 충돌 해결: 기존 파일과 충돌 시
--adopt옵션 사용 또는 수동 제거 필요