소개

dotweave가 무엇을 하는지, 심링크나 템플릿 방식 도구와 어떻게 다른지, 무엇을 일부러 git에 맡기는지 설명해요.

dotweave가 하는 일

dotweave는 dotfile을 git으로 동기화하는 명령줄 도구예요. ~/.zshrc, ~/.gitconfig처럼 홈 디렉터리에 있는 설정 파일 중 원하는 것만 골라 두면, 여러 기기에서 같은 설정을 그대로 쓸 수 있어요.

명령은 셋만 알면 돼요. dotweave track으로 동기화할 경로를 등록하고, dotweave push로 홈 디렉터리의 내용을 sync 디렉터리에 담고, 다른 기기에서 dotweave pull로 꺼내요. SSH 키처럼 그대로 올릴 수 없는 파일은 secret 모드로 등록하면 age 암호문으로 저장돼요.

sync 디렉터리는 git 저장소예요. 커밋하고 원격에 올리는 건 평소 쓰던 대로 git으로 하면 돼요.

홈 디렉터리가 기준이에요

기준이 되는 건 로컬 파일이고, 저장소는 거기에서 파생된 복사본이에요. 이건 심링크나 템플릿 방식 도구와 정반대예요. stow는 홈 디렉터리의 파일을 저장소를 가리키는 심링크로 바꿔요. chezmoi는 정본을 자기 저장소에 두고 그걸 통해 편집하라고 요구해요. 둘 다 저장소를 기준으로 삼기 때문에, 에디터와 도구와 몸에 익은 습관이 도구에 맞춰야 해요.

dotweave에서는 래퍼 명령도 심링크도 없이 에디터에서 ~/.zshrc를 그대로 편집해요. 변경을 게시하고 싶을 때 dotweave push를 실행하고 git으로 커밋하면 돼요.

이 선택의 대가는 자동으로 되는 게 없다는 점이에요. 데몬도 파일 감시자도 없어서, 명령을 실행하지 않으면 변경이 공유되지 않아요.

dotweave가 하지 않는 일

dotweave는 git을 대신 실행하지 않아요. pushpull은 홈 디렉터리와 sync 디렉터리 사이에서 파일만 옮겨요. 커밋, 원격에서 pull, 원격으로 push는 직접 실행해야 하고, dotweave cd가 그 작업을 할 위치에 셸을 열어 줘요.

dotweave는 병합하지 않아요. 두 기기가 같은 파일을 바꿨다면 그건 sync 저장소의 git 분기이고, git으로 해결해요.

dotweave는 파일을 심링크로 바꾸지 않고, 전용 에디터를 요구하지 않고, 외부 age 바이너리도 필요하지 않아요. 암호화는 CLI에 내장되어 있어요.

다만 gitPATH에 있어야 해요.

최소한의 흐름

dotweave init
dotweave track ~/.gitconfig
dotweave track ~/.ssh/config --mode secret
dotweave push

여기까지 하면 ~/.gitconfig는 평문 파일로, ~/.ssh/config는 age 암호문으로 미러링돼요. 게시하려면 sync 디렉터리를 열고 git을 쓰세요.

dotweave cd
git add -A && git commit -m "Initial sync"
git remote add origin <your-repo-url>
git push -u origin main

다음 기기에서는 age 키와 함께 저장소를 clone하고 복원하세요.

dotweave init <your-repo-url> --key-file ~/dotweave.agekey
dotweave pull

age 비밀 키는 커밋되지도, 동기화되지도 않아요. 각 기기로는 직접 옮기세요.

구현과 참고

모든 명령의 바탕이 되는 두 스냅숏 모델은 동기화가 작동하는 방식, dotweave가 만드는 파일은 디렉터리와 저장소 구조에서 설명해요.

CLI를 설치하려면 dotweave 설치를, 실행하기 전에 모델을 먼저 이해하고 싶다면 동기화가 작동하는 방식을 확인하세요.