設定ファイルをGitHubに置く(Dotfiles)
新しいマシンを買ったら定番の初期設定が必要だ。仮想環境の普及で、買わずとも新しい仮想マシンを立ち上げる機会が増える。OSのバージョンアップにも付き合っていかなければならない。新しい環境の障壁を下げるために「デフォルトで使う」派もある。しかし、「簡単に初期設定をできるように工夫する」派があってもいいだろう。Unix系のツールはホームディレクトリのファイルで初期設定を行う。設定GUIが付いていても、人間が読めるファイルに保存されることが多い。そういうツールはファイルをコピーするだけで設定がコピーできる。vscodeなどは、自身で設定をクラウドに持っておくこともできる。しかし、そうでなツールも、設定ファイルをGitHubにおいておけばgit clone
するだけで、ほぼ同等だ。
私のはこちら。
性質的に、使いながらその場しのぎで拡張が積み重なっていくようなことが多いので、実装方法はそれぞれに異なるだろう。
このように設定ファイルをGitHubのレポに入れておくことは、新規環境へのインストールを簡便に行うだけでなく、バックアップやメンテナンス性を高めるためにも非常に役に立つ。こういったスキルを鍛えておくことは、設定ファイルだけでなく、開発環境のメンテナンス性の向上にも役に立つのだ。
git clone
するとdotfiles/
というディレクトリの中に設定ファイルがクローンされる。- それぞれのファイル名は先頭に
.
なし。 scripts/setup_{arch}.sh
を実行すると、各環境のパッケージマネージャによって必要なアプリのインストールを行う。scripts/setup_common.sh
を実行すると、所定のディレクトリにシンボリックリンクを張る。- シンボリックリンクは、クローンしてきた元ファイルを消せないが
git update
できる。
- シンボリックリンクは、クローンしてきた元ファイルを消せないが
- 秘密ファイル(
~/.ssh
など)は絶対にリポジトリに登録してはならない。
個々のアプリの設定ファイルについて
zsh
dotfiles
からの設定は~/.config/zsh/zshrc
にシンボリックリンク。これをメンテする。~/.zshrc
からはsource ~/.config/zsh/zshrc
として読み込む。~/.zshrc
自体はインストーラなどが設定やPATH
を追加したりして、各環境で勝手に編集されるので、メンテナンス対象の個人設定を~/.config/zsh/zshrc
に分離しておく。~/.config/
以下なのは最近のXDG Base Directoryに従う。- 同様に、
~/.zsh_history
も~/.local/state/zsh_history
に移す。 /.zprofile
,~/.zshenv
はメンテしない。各環境に従う。- プロンプトはstarshipに任せる。
zshrc
では設定しない。 - 補完はzsh-autosuggestionsに任せる。個人ではHACKしない。インストールはスクリプトで自動的に行う。
## History
export HISTFILE=${HOME}/.local/state/zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt share_history
setopt hist_ignore_dups
setopt hist_no_store
setopt hist_reduce_blanks
setopt hist_ignore_space
## Path
## 個人のスクリプトは XDG 的に ~/.local/bin/ に入れる
export PATH=$PATH:$HOME/.local/bin
## Aliase
alias ls='ls -FG '
XDG Base Directory
日本語の解説は例によってArchLinuxがわかりやすい。
しかし、これはUnix(Linux)の流儀で、Windows/Macは別の流儀がある。それぞれの流儀の違いは、Rustのdirectories-rsクレートがわかりやすい。
このdotfilesはクロスプラットフォームを旨としており、基本はLinuxコマンドライン環境なので、XDGの(windows/macではなく)流儀に可能な限り従うようにする。例えば、VS codeの設定ファイルは、Linuxでは~/.vscode/Code/User/settings.json
だがMacでは~/Library/Application Support/Code/user/settings.json
。alacurittyの設定ファイルはLinuxでもMacでも~/.config/alacuritty/alacuritty.yml
vim
- zshと同様に、メンテナンスする個人設定は
vimrc.pref
に分離しておいて、~/.vimrc
から読み込む。
git
- グローバル設定は、
~/.gitconfig
の代わりに、XDG的に~/.config/git/config
に書ける。 - 同様に
~/.config/git/ignore
も有効。
alacuritty
- 設定がdotfilesで管理できるので好き。
- Linuxでもmacでもクロスプラットフォーム。
- starshipを使うのでNerd Fontを設定しておく。