今回作成したdotfliesです。 github.com
chezmoiとは
Go製のクロスプラットフォームのdotfiles管理ツールです。dotfilesとは .zshrc
や .gitconfig
といった設定ファイルを指す言葉です。
chezmoiの名前はフランス語の chez-moi (シェモア)に由来し、意味は「自宅」を表します。
主な機能としては以下となってます
dotfilesの管理をシンボリックリンクで行っていましたが、もっとシンプルにできないかと思って調べみると dotfiles管理ツールがあることを知りました。
chezmoiはGitHubスター数が多く、ドキュメントが整理され情報量が多かったので今回使ってみることにしました。
Redditでもdotfiles管理方法についての議論がされているので、他のdotfiles管理ツールも参考にしてみるといいかと思います。
| How do you guys manage your dotfiles ?
初期設定
インストール
Macの場合はbrewで入れられます。自分はbrewで入れました。
$ brew install chezmoi
プロジェクトの初期化
chezmoiを使用開始する場合、initコマンドを実行します。
$ chezmoi init
~/.local/share/chezmoi
というフォルダが作成され、gitのローカルレポジトリが作成されています。
chezmoiではdotfilesをgit repositoryで管理する前提のAPI仕様となっています。
既にdotiflesがリモートレポジトリに存在する場合は、レポジトリを指定することで~/.local/share/chezmoi
以下に既存のdotiflesレポジトリがcloneされます。
$ chezmoi init git@github.com:<your-github-id>/dotfiles.git
~/.local/share/chezmoi
以下のファイルがchezmoiで管理対象となるdotfilesとなります。
次にchezmoiの管理対象とするファイルを指定します。
管理対象のdotfilesを追加
chezmoi add
コマンドで管理対象のファイルを指定します。
例えば、 .zshrc
を管理する場合は以下のコマンドを実行します。
$ chezmoi add ~/.zshrc
実行すると、 ~/.local/share/chezmoi
のフォルダ以下に dot_zshrc
というファイル名で .zshrc
の内容がコピーされます。
dotfilesの編集
chezmoi edit
コマンドで管理対象のファイルを編集できます。
$ chezmoi edit ~/.zshrc
上記のコマンドでは ~/.zshrc
は変更されず、~/.local/share/chezmoi/dot_zshrc
が変更されます。
dotfilesの変更を反映
chezmoi apply
コマンドで元のdotfileに変更を反映できます。
$ chezmoi apply
上記の例だと~./local/share/chezmoi/dot_zshrc
の変更が ~/.zshrc
に反映されることになります。
git管理
~./local/share/chezmoi
以下にあるファイルをgit管理対象にします。
$ git add . $ git commit -m "Initial commit" $ git push origin main
dotfiles管理のワークフローまとめ
以上のコマンド実行のプロセスを整理すると以下のようになります。
今回の例だと以下のようになります。
- home directory:
~/.zshrc
- working copy:
~./local/share/chezmoi/dot_zshrc
- local repo : ローカルのgit repository
- remote repo : リモートのgit repository
chezmoiはGitのように変更を追従するファイルを work spaceに追加することで管理を行います。
自前でdotfilesを管理する場合はシンボリックリンクを貼る方法が行われますが、chezmoiでは chezmoi add
が代わりとなります。
今回行った設定
dotfilesの追加
# zsh $ chezmoi add ~/.zshrc # Git $ chezmoi add ~/.gitconfig # Tmux $ chezmoi add ~/.tmux.conf # JetBrain $ chezmoi add ~/.ideavimrc # Alacritty $ chezmoi add ~/.config/alacritty # Starship $ chezmoi add ~/.config/starship.toml # VSCode $ chezmoi add ~/Library/Application Support/Code/User/keybindings.json $ chezmoi add ~/Library/Application Support/Code/User/settings.json
~/.config/alacritty
のようにルートフォルダより深い階層にあるファイルを追加する場合、自動でフォルダが ~./local/share/chezmoi
以下に作成されます。
この場合は.local/share/chezmoi/dot_config/alacritty
という名前のフォルダが自動作成されます。
VSCodeの設定ファイルはMacに依存したフォルダ階層になっています。
chezmoiでは同一ファイルをシステムごとに別Pathで管理する方法が提供されています。
Manage machine-to-machine differences - chezmoi
chezmoiのGitHub RepositoryのDiscussionsでも、作者がsettings.jsonの管理方法を解説しているので、理想的にはこちらのやり方を行った方がいいです。
Handle configuration files that are externally modified and also in different locations on difference machines · twpayne chezmoi · Discussion #1312 · GitHub
brew install用のスクリプト作成
chezmoiではrun_
というprefixのついたスクリプトの実行を自動で行ってくれます。
Use scripts to perform actions - chezmoi
スクリプト名の命名規則によって挙動を制御でき、 run_once_
のprefixがつくスクリプトは chezmoi apply
初回実行時のみ実行されるので、PCの初期セットアップに便利です。
brewでインストールしたものを管理しようと思います。
まず brewで入れたものの一覧を取得します。
$ brew bundle dump
Brewfileというファイル名で一覧が出力されます。
run_once_install_brew.sh
というファイル名で 、brew installを実行するためのコマンドを保存します。
#!/usr/bin/env zsh brew bundle --file="./Brewfile"
chezmoi appy
を初回実行した際にbrew installが行われるようになりました。
外部パッケージ取得の管理
dotfiles管理対象外の外部レポジトリやパッケージを .chezmoiexternal.<json|jsonc|toml>
というファイルで管理できます。
親ディレクトリに該当のフォルダ存在しない場合、chezmoiが自動でダウンロードしてディレクトリを作成してくれます。
https://www.chezmoi.io/reference/special-files-and-directories/chezmoiexternal-format/
tmuxプラグイン管理のtpmと、alairittyのテーマ設定のフォルダを管理するようにしました。
[".tmux/plugins/tpm"] type = "archive" url = "https://github.com/tmux-plugins/tpm/archive/master.tar.gz" exact = true stripComponents = 1 refreshPeriod = "168h" [".config/alacritty/themes"] type = "archive" url = "https://github.com/alacritty/alacritty-theme/archive/master.tar.gz" exact = true stripComponents = 1 refreshPeriod = "168h" [".config/alacritty/catppuccin"] type = "archive" url = "https://github.com/catppuccin/catppuccin/archive/master.tar.gz" exact = true stripComponents = 1 refreshPeriod = "168h"