시작하기
시작하기에 앞서
Dojang은 크로스플랫폼 닷파일 관리자입니다. 닷파일이란 POSIX 계열 플랫폼에서 프로그램들이 마침표로 시작하는 설정 파일을 홈 디렉터리에 두기에 생긴 말이지만, 여기서는 닷파일을 다양한 형태의 설정 파일들을 일컫는 말로 사용합니다. 예를 들어, ~/.vimrc나 ~\AppData\Roaming\alacritty\alacritty.toml 모두 Dojang이 다루는 대상입니다.
Dojang은 설정 파일의 기기 간 동기화를 제공하지 않으며, 앞으로도 제공할 계획이 없습니다. 대신, 사용자가 직접 저장소를 Git이나 Mercurial 같은 형상 관리 시스템으로 관리하거나, Dropbox나 iCloud 같은 클라우드 저장소를 사용하여 기기 간 동기화를 구현할 수 있습니다.
또한, 명령행 프로그램이기 때문에 기본적인 터미널 사용법을 알고 있어야 합니다. 그래픽 사용자 인터페이스는 제공하지 않으며, 앞으로도 제공할 계획이 없습니다.
설치
Dojang은 아직 정식 릴리스된 적 없는 프로그램입니다. 따라서 현재로서는 빌드해서 설치해야 하기 때문에 시간이 걸릴 수 있습니다. 설치 문서를 참고하여 Dojang을 설치해 주세요.
설치가 완료되면 dojang
명령어가 사용 가능해집니다. dojang
명령어는
dojang --help
명령어를 통해 사용법을 확인할 수 있습니다.
기본 개념
Dojang은 기기에 실제로 적용되는 대상 설정 파일들과, 여러 기기에서 쓸 수 있도록 중립적으로 구성한 원본 설정 파일들을 구분합니다. 후자를 모아두는 디렉터리를 Dojang에서는 저장소(repository)라고 부릅니다.
저장소에는 원본 설정 파일이 기기의 어느 위치로 복사해야 하는지, 운영체제 등의 환경에 따라 어느 파일과 디렉터리가 선택되어야 하는지 등을 기술하는 선언 파일이 있습니다. 선언 파일은 일반적으로 dojang.toml이라는 이름으로 저장소의 최상위에 둡니다.
원본 설정 파일들을 기기에 실제로 동기화하여 적용하는 것을 적용이라고 부르고,
반대로 기기에 적용되고 있는 대상 설정 파일을 고쳤을 때 이를 원본 설정 파일에
동기화하는 것을 반영이라고 부릅니다. 적용과 반영은 dojang
명령어를 통해
수행할 수 있습니다.
저장소 초기화
저장소는 한 번 잘 만들어 두면, 이를 앞으로 여러분의 여러 기기에서 모두 사용하게 됩니다. 따라서, 저장소 초기화는 처음 한 번만 하는 일입니다.
저장소를 초기화하려면 우선 빈 디렉터리가 필요합니다.
$ mkdir my-dotfiles/
$ cd my-dotfiles/
디렉터리 이름은 자유롭게 지어도 괜찮습니다. 빈 디렉터리 안에서 dojang init
명령을 실행하면 저장소가 초기화되며 선언 파일이 만들어집니다.
$ dojang init
여러분이 쓰는 기기들의 종류를 물으면 쓰는 모든 종류를 선택하면 됩니다.
Note
Windows에서는 아직 dojang init
이 인터랙티브 모드를 지원하지 않습니다.
이 문제는 추후 해결될 예정입니다 (이슈 #4 참고). 그 전까지는, 명령행 옵션을
통해 기기 종류 선택을 할 수 있습니다. dojang init --help
를 통해 어떤
옵션들이 있는지 먼저 확인하세요. 예를 들어, Windows PC와 Intel Mac을 모두
쓴다면 다음과 같이 입력하면 됩니다.
> dojang init --win64 --intel-mac
이제 선언 파일을 열어서 원하는 대로 수정할 수 있습니다. 선언 파일에 대한 자세한 설명은 선언 문서를 참고하세요.
상황 파악
저장소를 초기화하고 나면, dojang status
명령어를 통해 현재 상황을 확인할 수
있습니다. 이 명령어는 현재 기기의 설정 파일들과 저장소 내 설정 파일들을
비교하여, 어떤 설정 파일들이 적용되고 있는지, 어떤 원본 설정 파일들이 적용되어야
하는지 등을 보여줍니다.
그렇지만 대상 디렉터리에 무관한 파일이 너무 많아 압도될 수도 있습니다.
그리고 파일이 너무 많을 경우 dojang status
명령이 느려지기도 합니다.
이럴 때는 ignores
구획에 무시할 파일들을 지정해 주면 됩니다.
예를 들어, 아래 예시는 홈 디렉터리 안에 있는 Documents 디렉터리를 무시하도록
지정한 것입니다.
[ignores]
HOME = ["Documents"]
자세한 내용은 무관한 파일 무시 문서를 참고하세요.
라우팅
라우팅은 환경에 따라 설정 파일들을 다른 위치로 복사하는 것을 말합니다. 예를 들어, 홈 디렉터리의 위치는 모든 운영체제에서 다르기 때문에, 홈 디렉터리에 있는 설정 파일들을 각 운영체제에 맞게 다른 위치로 복사해야 합니다.
선언 파일의 내용 중 가장 중요한 것이 바로 이 라우팅이라고 해도 과언이 아닙니다. 라우팅은 선언 파일 내 dirs
및 files
구획에 기술합니다. dojang init
명령을
통해 저장소를 초기화하면, 이미 선언 파일 내에 기본적인 라우팅이 기술되어 있을
것입니다. 예를 들어 다음은 홈 디렉터리에 위치한 설정 파일들을 위한 라우팅입니다.
[dirs.HOME]
posix = "$HOME"
windows = "$UserProfile"
HOME
은 라우팅 이름으로, 저장소 내 HOME/이라는 디렉터리에 들어있는 설정
파일들이 원본이 됩니다. 라우팅 이름은 얼마든지 다른 이름이 될 수 있습니다.
posix
와 windows
는 모니커로, 마찬가지로 선언 파일 내의 monikers
구획에서
정의합니다. 모니커 이름은 posix
나 windows
외에 다르게 정해도 상관 없습니다.
각 모니커는 환경에 대한 조건을 가리키는데, 이를테면 posix
모니커는 아래와 같이
정의될 수 있습니다.
[monikers.posix]
os = ["linux", "macos"] # Linux 또는 macOS
따라서, posix
는 Linux 또는 macOS인 경우를 가리킵니다. posix = "$HOME"
이라는
라우팅 설정은 Linux 또는 macOS인 경우 환경 변수 HOME
이 가리키는 경로로 HOME/
디렉터리 안쪽의 설정 파일들을 복사하라는 뜻이 됩니다. 마찬가지로,
windows = "$UserProfile"
은 Windows인 경우 환경 변수 UserProfile
이 가리키는
경로로 HOME/ 디렉터리 안쪽의 설정 파일들을 복사하라는 뜻이 됩니다.
자세한 내용은 라우팅 문서를 참고하세요.
기존 설정 파일 가져오기
기존에 사용하던 설정 파일들을 저장소에 추가해야 합니다. 여기서는 ~/.inputrc 파일을 예시로 들겠습니다.
쓰던 설정 파일을 그대로 복사해서 저장소에 넣어도 되지만, 실수에 대한 안전 장치가
있는 dojang reflect
명령을 활용하도록 합시다. 특히, dojang reflect
는 기기에
설치된 설정 파일이 바뀐 경우에 이를 저장소에 반영할 때도 쓸 수 있습니다.
$ dojang reflect ~/.inputrc
만약 ~/.inputrc 파일이 무시 목록에 들어가 있다면, 아래처럼 오류가 뜰 수도 있습니다.
$ dojang reflect ~/.inputrc
Error: File /home/USER/.bash_history is ignored due to pattern "*" (route name: HOME).
Hint: You can reflect it anyway by enforcing it using -f/--force option.
이럴 때는 -f
옵션을 사용하여 강제로 반영할 수 있습니다.
.dojang 디렉터리
Dojang은 기기에 적용된 설정 파일들과 원본 설정 파일들을 삼각측량하기 위해, .dojang 디렉터리에 내부적인 기록을 남깁니다. 이 디렉터리는 저장소의 최상위에 있습니다. 이 디렉터리의 내용은 사용자가 직접 수정하거나 삭제해서는 안 되며, 내용물은 기기에 따라 달라지므로 형상 관리 시스템에 올려두지 않아야 합니다.
따라서 Git이나 Mercurial 같은 형상 관리 시스템을 사용할 때는, 이 디렉터리를 무시하도록 설정해야 합니다. Git을 사용한다면, 아래처럼 ~/.gitignore 파일에 추가하면 됩니다.
.dojang/
Tip
dojang init
명령을 실행하기 전에 git init
명령을 실행했다면,
dojang init
은 자동으로 .gitignore 파일을 생성합니다.
새 설정 파일 추가
아예 새로운 설정 파일을 추가할 때는, 저장소에 직접 원본 설정 파일을 만들어 넣을
수 있습니다. 이렇게 할 경우, 저장소에서 대상 디렉터리로 복사해야 하므로
dojang reflect
대신 dojang apply
명령을 사용해야 합니다.
~/.my-new-config에 위치하게 될 새 설정 파일을 추가한다고 가정합시다.
저장소에 HOME/.my-new-config 파일을 만들고, 원본 설정 파일을 작성합니다.
그리고 dojang status
명령으로 상황을 확인해 봅니다.
결과 내에 아래와 같은 줄이 보여야 합니다.
Source ST Destination DT File
────── ── ─────────── ── ──────────────────────────────────────────
(생략됨…)
added F unchanged - .my-new-config
(생략됨…)
해당 줄은 순서대로 다음과 같은 의미를 지닙니다.
added
: 원본 설정 파일이 저장소에 추가됐고, 아직 적용된 적 없다.F
: 원번 설정 파일이 (디렉터리나 심볼릭 링크가 아닌) 일반 파일이다.unchanged
: 대상 디렉터리에 있는 짝은 변경되거나 추가되지 않았다.-
: 대상 디렉터리에 있는 짝은 아직 없다.
현재 상황을 확인했으니, 이제 dojang apply
명령을 통해 적용해 봅시다.
이 명령은 파일 경로를 인자로 받아 지정된 파일만 복사하는 dojang reflect
와
달리 저장소에 있는 모든 파일 중 대상 디렉터리에 아직 없거나 변경이 필요한
파일들을 복사합니다.
새 기기에 적용
변경이 필요한 모든 파일을 복사하는 dojang apply
명령은, 그 동작 덕분에 새
기기에 설정 파일들을 한 번에 적용할 때도 쓸 수 있습니다. 예를 들어 Git에
저장소를 올려두고, 새 기기에서 저장소를 클론한 후 dojang apply
명령을
실행하면 됩니다.