設定ファイルをGitHubに置く(Dotfiles)

Written on 2022-09-24

新しいマシンを買ったら定番の初期設定が必要だ。仮想環境の普及で、買わずとも新しい仮想マシンを立ち上げる機会が増える。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を設定しておく。