dotfiles는 .으로 시작하는 설정이나 설치 정보를 담는 파일들의 모음을 말한다. 간단히 말해 테라폼을 사용하는것처럼 내 컴퓨터 설정도 코드로 관리한다고 보면 편하다. (물론 테라폼만큼 편하진 않다.)
일단 대부분의 dotfiles의 구조는 dotfiles로 설정하고자 하는 디렉토리들과 그걸 인스톨하는 쉘/메이크 스크립트로 이루어져있다. 많은 dotfiles의 예시가 있지만 개인적인 컴퓨터 설정인 만큼 각양각색이다. 그러므로 "Best practice"를 찾기보다는 여러가지를 찾아보고 좋은점만을 취사선택하기로 결정했다.
참고한 자료는 다음과 같다
: 가장 먼저 나오는 자료. 하지만 outdated된 자료가 많아서 중간에 닫았다.
무엇을 백업해야 하는가?
일단 가장 널리 관리하는것들은 macOS 설정들, gitconfig, 쉘, 그리고 Homebrew 설정이다.
일단은 그 중에서 gitconfig, Homebrew, 그리고 쉘 설정만 우선적으로 백업하기로 결정했다. 추후에는 IDE와 macOS 설정도 추가해볼 생각이다.
또한 인스톨 스크립트는 쉘 스크립트 대신 일단 익숙한 Makefile을 사용한다. 추후에는 이라는 것을 사용해볼수도 있을것같다.
Homebrew
일단 Brewfile을 만들어 현재 깔려있는 패키지들을 모았다.
brew tap homebrew/bundle
brew bundle dump
Homebrew에 대해 조사하다가 mas라는 툴로 맥 앱스토어 앱도 한곳에서 관리할수 있다는 것을 알아내서 사용하기 위해 설치했다. account 명령어로 현재 로그인된 어카운트를 확인할 수 있고 list 명령어로 설치된 프로그램의 목록들도 가져올 수 있다.
brew install mas
mas account
mas list
이후 Brewfile의 가독성을 조금 수정한 이후 홈 디렉토리의 Brewfile을 dotfiles 내부로 옮긴 후 홈 디렉토리에 symlink를 걸었다.
ln -snf Brewfile ~/Brewfile
.gitconfig
회사 동료분 스크립트에서 많은 부분을 가져와서 유저네임과 이메일, 그리고 서명 키를 대화형으로 완성할수 있도록 구성했다.
[user]
name = {{GIT_NAME}}
email = {{GIT_EMAIL}}
signingkey = {{GIT_SIGN_KEY}}
이 템플릿을 이런 Makefile을 사용해서 완성할 수 있다.
.PHONY: git
git: ## Install git configs.
ln -sfn $(CURDIR)/gitalias $(HOME)/.gitalias
@cp $(CURDIR)/gitconfig $(HOME)/.gitconfig
@read -p "Enter your name: " git_name; \
sed -i -e "s/{{GIT_NAME}}/$$git_name/g" $(HOME)/.gitconfig
@read -p "Enter your e-mail: " git_email; \
sed -i -e "s/{{GIT_EMAIL}}/$$git_email/g" $(HOME)/.gitconfig
@read -p "Enter your GPG key ID: " git_sign_key; \
sed -i -e "s/{{GIT_SIGN_KEY}}/$$git_sign_key/g" $(HOME)/.gitconfig
약간의 문제로 이런식으로 사용하면 symlink가 아니기 때문에 한쪽에서 alias를 수정한다 해도 다른쪽에는 반영되지 않는 문제가 있다. aliass는 include로 사용할수 있도록 개선할 필요가 있다.
gitconfig 분문은 카피한 후 alias는 링크를 걸고 gitconfig가 인클루드해서 사용하도록 변경했다.
.zshrc
현재 있는 .zshrc 파일을 dotfiles 아래로 복사하고 있던 파일을 지운다음 symlink를 걸었다.