닷파일은 작업 환경의 선언이야
~/.zshrc, ~/.gitconfig, 편집기와 터미널 설정은 새 머신에서 반복해서 만들기 어려운 개인 작업 환경이야. 버전 관리하면 변경 이유를 추적하고 필요한 파일만 복원할 수 있어. 하지만 홈 디렉터리의 모든 상태를 설정으로 착각하면 캐시, 장치별 값과 비밀까지 섞이므로 추적 대상을 의도적으로 골라야 해.
plain Git은 단순하지만 경계를 직접 관리해
홈을 working tree로 보는 bare 저장소 방식은 별도 복사 없이 기존 경로를 추적할 수 있어. 별칭으로 Git 디렉터리와 작업 트리를 고정하고, 명시적으로 추가한 파일만 커밋해. 새 머신에서는 저장소를 받은 뒤 충돌할 기존 파일을 먼저 백업하고 checkout 결과를 검토해야 해. Git은 템플릿과 비밀 주입 정책을 자동으로 제공하지 않으므로 그 규칙은 별도로 설계해.
chezmoi는 적용 과정을 모델링해
chezmoi init, chezmoi add, chezmoi diff, chezmoi apply로 소스 상태와 홈에 적용될 상태를 나눠 관리해. 운영체제와 머신별 템플릿, 비밀번호 관리자 연동과 적용 전 diff가 필요할 때 유용해. 자동 적용 전에 생성될 파일과 실행 스크립트를 읽고, 도구가 관리하지 않는 로컬 상태를 덮지 않는지 확인해.
GNU Stow는 심볼릭 링크로 배치해
저장소 안에 zsh/.zshrc, git/.gitconfig처럼 홈 구조를 만들고 stow -t ~ zsh git로 링크를 배치해. 구조가 단순하고 눈에 보이지만 머신별 조건과 비밀 조합은 직접 다뤄야 해. 링크 대상이 이동하거나 저장소 경로가 바뀌면 끊어질 수 있으므로 복원 시험에 실제 링크 확인을 포함해.
설정, 상태와 비밀을 분리해
셸 설정, 편집기 설정, .editorconfig와 공개 가능한 SSH 호스트 별칭은 추적 후보야. 개인 키, .env, 클라우드 자격 증명, 캐시와 도구 데이터베이스는 저장소에 넣지 마. 비공개 저장소도 잘못 공유되거나 복제본이 남을 수 있어. 비밀은 자격 증명 저장소에서 주입하고, 닷파일에는 필요한 키 이름과 읽는 방법만 남겨.
복원 가능성은 새 환경에서 증명해
한 머신을 기준으로 작성하더라도 다른 머신의 아키텍처, 사용자 이름, 설치 경로를 그대로 덮어쓰지 않게 조건을 둬. 적용 스크립트는 여러 번 실행해도 같은 결과가 나와야 하고, 변경 전 diff와 적용 후 체크섬·도구 버전을 확인할 수 있어야 해. 백업은 저장소 push에서 끝나지 않아. 새 사용자나 시험용 환경에서 실제로 복원해 봐야 닷파일 시스템이 작동한다는 증거가 생겨.