chezmoi のソース状態、差分、複数マシン管理

このページの目次

chezmoi は設定のソースから、現在のマシン向けのファイルを生成する。Git がソース履歴を記録し、chezmoi が実ファイルへ適用する。コミット済みでも適用済みとは限らない。

三つの状態

状態例変更するもの
ソース管理ディレクトリの dot_wezterm.luaエディタ、Git、add
目標テンプレートから生成した期待内容chezmoi の計算
実際ホームに存在する .wezterm.luaapply または直接編集

chezmoi diff は実際と目標の差を見る。ホーム側の直接編集は自動でソースへ戻らない。

動くファイルを一つ追加する

.wezterm.lua が存在して動作する状態から始める。

chezmoi init

一つだけ追加する。

chezmoi add ~/.wezterm.lua

ソースの位置と差分を確認する。

chezmoi source-path ~/.wezterm.lua
chezmoi diff ~/.wezterm.lua

追加直後に内容が同じなら通常は差分がない。遠隔リポジトリへの公開は行われず、Git の remote やコミットは別操作である。

編集、確認、適用

chezmoi edit ~/.wezterm.lua

編集対象はソースである。保存後に確認する。

chezmoi diff ~/.wezterm.lua

意図した内容だけであることを確認して適用する。

chezmoi apply ~/.wezterm.lua

再度 diff を見て、アプリでも設定を検証する。差分が空でも、アプリがパラメータを受理する保証にはならない。日常操作

ソース内のシェルへ入る。

chezmoi cd

そこで git status を確認し、Git 手順書に沿って選択・コミットする。exit で元のシェルへ戻る。chezmoi cd && git ... は親シェルの場所を変える通常の cd と同じではない。

テンプレートで差異を表す

chezmoi add --template ~/.wezterm.lua

chezmoi edit で開き、完全な WezTerm 設定の中へ追加できる断片:

{{ if eq .chezmoi.os "windows" }}
config.default_prog = { "pwsh.exe", "-NoLogo" }
{{ end }}

config の生成と return は WezTerm を参照する。chezmoi data はマシン情報を表示するが、個人設定を含み得るため全出力を公開しない。

chezmoi cat ~/.wezterm.lua で生成後の全文を確認し、その Lua をアプリ側で検証する。テンプレート構文と生成物の構文は別に確認する。

属性と管理範囲

dot_ はドットファイル、private_ は目標の権限制限、executable_ は実行属性、.tmpl はテンプレートを表す。private_ は Git 内の暗号化ではない。ソース属性

手書きで複数マシンに共通化したい設定を管理し、キャッシュ、ログ、生成テーマ、セッション状態は各ツールで再構成する。大型の外殻は上流バージョンとローカル差分を保存する。

ソース内のスクリプトは apply 時に動くことがある。他者のリポジトリは対象とスクリプトを読んでから適用し、init --apply を無確認の導入手順にしない。

両方のマシンで変更した場合

両方の実ファイルを保存してからソース側の更新と競合解決を行う。実ファイルの変更を取り込むには chezmoi merge も使える。再 add はソースを更新するので、先に残す内容を決める。

Git で古いソースを戻してもホームのファイルは自動で戻らない。diff を確認して対象へ適用する。スクリプトが変更した外部状態は、ファイルの復旧だけでは戻らない場合がある。

不要な練習設定で追加、編集、適用、復旧を一巡し、どの状態が変わるか説明できるようにする。