chezmoi のソース状態、差分、複数マシン管理
このページの目次
chezmoi は設定のソースから、現在のマシン向けのファイルを生成する。Git がソース履歴を記録し、chezmoi が実ファイルへ適用する。コミット済みでも適用済みとは限らない。
三つの状態
| 状態 | 例 | 変更するもの |
|---|---|---|
| ソース | 管理ディレクトリの dot_wezterm.lua | エディタ、Git、add |
| 目標 | テンプレートから生成した期待内容 | chezmoi の計算 |
| 実際 | ホームに存在する .wezterm.lua | apply または直接編集 |
chezmoi diff は実際と目標の差を見る。ホーム側の直接編集は自動でソースへ戻らない。
動くファイルを一つ追加する
.wezterm.lua が存在して動作する状態から始める。
一つだけ追加する。
ソースの位置と差分を確認する。
追加直後に内容が同じなら通常は差分がない。遠隔リポジトリへの公開は行われず、Git の remote やコミットは別操作である。
編集、確認、適用
編集対象はソースである。保存後に確認する。
意図した内容だけであることを確認して適用する。
再度 diff を見て、アプリでも設定を検証する。差分が空でも、アプリがパラメータを受理する保証にはならない。日常操作
ソース内のシェルへ入る。
そこで git status を確認し、Git 手順書に沿って選択・コミットする。exit で元のシェルへ戻る。chezmoi cd && git ... は親シェルの場所を変える通常の cd と同じではない。
テンプレートで差異を表す
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 を確認して対象へ適用する。スクリプトが変更した外部状態は、ファイルの復旧だけでは戻らない場合がある。
不要な練習設定で追加、編集、適用、復旧を一巡し、どの状態が変わるか説明できるようにする。