Msksgm/dotfiles

★ 0Forks 0ShellGitHub ↗Compare

README

dotfiles

Personal dotfiles managed by chezmoi.

Managed files

Source Target
dot_zshrc ~/.zshrc
dot_zshenv ~/.zshenv
dot_zprofile ~/.zprofile
dot_p10k.zsh ~/.p10k.zsh
dot_zsh/alias.zsh ~/.zsh/alias.zsh
dot_zsh/brew_drift_check.zsh ~/.zsh/brew_drift_check.zsh
dot_zsh/herdr.zsh ~/.zsh/herdr.zsh(herdr 用のシェル設定。自分の pane ID を herdr にカスタムトークンとして報告する _herdr_report_pane_id を定義する。~/.zsh/*.zsh の source は mise activate より前で herdr が PATH に無いため、定義だけを置き呼び出しは dot_zshrc の mise activate 直後に置いている)
dot_tmux.conf ~/.tmux.conf
executable_dot_tmux-rename-session ~/.tmux-rename-session
dot_gitconfig.tmpl ~/.gitconfig
dot_ideavimrc ~/.ideavimrc
dot_crit.config.json ~/.crit.config.json(crit のグローバル設定。plan_approve_mode で plan 承認後の Claude Code permission mode を指定する。プロジェクト側 .crit.config.json からは上書き不可)
dot_config/nvim/ ~/.config/nvim/
dot_config/karabiner/karabiner.json ~/.config/karabiner/karabiner.json
dot_config/mise/config.toml.tmpl ~/.config/mise/config.toml(言語ランタイム + aqua バックエンドの主要 CLI ツール群。aqua 未登録のツールは github バックエンド等を使い、npm 配布の WXT は npm バックエンドで管理する。private tool はここに書かない — lockfile mise.lock を追跡しているため、下記 config.local.toml に隔離する)
dot_config/mise/private_config.local.toml.tmpl ~/.config/mise/config.local.toml(private tool 専用の machine-local config。mode 0600。private_tool_repo を設定したマシンでのみ展開され、lockfile は mise.local.lock に分離されて追跡されない)
dot_config/mise/private_mise.lock ~/.config/mise/mise.lock(mise の lockfile。全ツールの version / URL / checksum を複数プラットフォーム分固定して再現性を担保する。mode 0600。生成物なので手で編集せず mise lock -g → cp で同期する。手順は下記 "mise lockfile の更新" 参照)
dot_config/helm/repositories.yaml ~/.config/helm/repositories.yaml
dot_config/cage/presets.yml ~/.config/cage/presets.yml
dot_config/herdr/config.toml ~/.config/herdr/config.toml(キーバインドを dot_tmux.conf に合わせた herdr 設定。prefix=C-j、分割 |/-、ペイン移動 h/j/k/l、タブ移動 C-h/C-l、デタッチ prefix+d、workspace 作成 prefix+Shift+C、workspace リネーム prefix+Space、pane を新 tab に切り出し prefix+!(tmux の break-pane 相当。組み込みアクションが無いため herdr pane move --new-tab を shell command で呼ぶ)。加えて [ui.sidebar.agents] で左サイドバーの agent 行に pane ID (wG:pB) を表示する。この $pane_id はカスタムトークンで、値の供給は dot_zsh/herdr.zsh に依存する — 片方だけ消すと ID が空欄になる)
dot_config/herdr/executable_rename-workspace.sh ~/.config/herdr/rename-workspace.sh(実行ビット付き。focused workspace を git リポジトリ名にリネームする。tmux の ~/.tmux-rename-session の herdr 版で、config.toml の [[keys.command]] から prefix+Space で呼ぶ)
dot_codex/modify_private_config.toml ~/.codex/config.toml(mode 0600 の chezmoi modify_ スクリプト。model / reasoning effort / personality / approval / service tier / .agents・.codex・.git 書き込みを含む workspace-agents-write permission profile だけを強制し、Codex が書き換える project trust / notify / Desktop / plugin / MCP / hook 等は実ファイルから保持する)
dot_codex/AGENTS.md.tmpl ~/.codex/AGENTS.md(全プロジェクト共通の Codex 指示。CLI ツール管理ルールを .chezmoitemplates/cli-tool-management.md から展開)
dot_claude/modify_settings.json.tmpl ~/.claude/settings.json(chezmoi modify_ スクリプト。自分が管理するキー(env/permissions/model/hooks/deny 等)だけ強制し、Claude Code が実行時に書き換えるキー(enabledPlugins/extraKnownMarketplaces/feedbackSurveyState)は実ファイルから保持してドリフトを防ぐ。herdr フックパスは {{ .chezmoi.homeDir }} で展開)
dot_claude/hooks/executable_herdr-agent-state.sh ~/.claude/hooks/herdr-agent-state.sh(実行ビット付き。settings.json の SessionStart フックが呼ぶ herdr の Claude 連携スクリプト。herdr が自動管理し integration 更新時に上書きするため source はスナップショット。更新時は再 cp で同期する)
dot_claude/CLAUDE.md ~/.claude/CLAUDE.md
dot_claude/agents/*.md ~/.claude/agents/*.md (user-level subagent)
dot_claude/rules/*.md ~/.claude/rules/*.md (CLAUDE.md から @-import するコーディング規約)
dot_claude/rules/tool-management.md.tmpl ~/.claude/rules/tool-management.md(Claude Code 用の CLI ツール管理ルール。同じ共通テンプレートから展開)
dot_claude/rules/golang/*.md ~/.claude/rules/golang/*.md (Go 固有ルール。@-import せず参照用)
dot_claude/rules/kotlin/*.md ~/.claude/rules/kotlin/*.md (Kotlin 固有ルール。@-import せず参照用)
dot_claude/plugins/config.json ~/.claude/plugins/config.json
dot_claude/plugins/private_blocklist.json ~/.claude/plugins/blocklist.json
dot_claude/symlink_skills ~/.claude/skills → ~/.agents/skills (symlink)
dot_agents/dot_skill-lock.json ~/.agents/.skill-lock.json
dot_agents/skills-local/pair-programming/** ~/.agents/skills-local/pair-programming/(日本語・ヒント中心のペアプロ用 skill。インストーラ経由で ~/.agents/skills/pair-programming/ にも展開。明示呼び出し専用: Codex は $pair-programming、Claude Code は /pair-programming)
dot_agents/skills-local/codex-version-update/SKILL.md ~/.agents/skills-local/codex-version-update/SKILL.md(この dotfiles の mise/aqua 管理に沿って Codex CLI の version pin、公式 changelog 確認、lock 同期、導入版検証を進める skill。インストーラ経由で ~/.agents/skills/codex-version-update/ にも展開)
dot_agents/skills-local/pr-critical-review/** ~/.agents/skills-local/pr-critical-review/(根拠付きの PR トリアージを行う Markdown 専用 skill。未採用の図解仕様は references/ に保管し、インストーラ経由で ~/.agents/skills/pr-critical-review/ にも展開)
dot_agents/skills-local/review-io-impact/SKILL.md ~/.agents/skills-local/review-io-impact/SKILL.md(インストーラ経由で ~/.agents/skills/review-io-impact/SKILL.md にも展開)
dot_agents/skills-local/svg-diagram/** ~/.agents/skills-local/svg-diagram/(SKILL.md + components/ examples/ の HTML テンプレート。インストーラ経由で ~/.agents/skills/svg-diagram/ にも展開)

Note (Codex config): ~/.codex/config.toml は手動設定と Codex 所有の実行時状態が混在するため、ファイル全体をスナップショットせず modify_private_config.toml で管理対象キーだけを置換する。未管理の root key と table はそのまま保持されるので、Codex が project trust・通知先・Desktop 設定・plugin/MCP/hook 状態を更新しても chezmoi diff の対象にならない。~/.codex には認証情報・会話履歴・shell snapshot もあるため、ディレクトリ全体を chezmoi add ~/.codex しない。

Note (共通 CLI ツール管理ルール): .chezmoitemplates/cli-tool-management.md を正本とし、~/.codex/AGENTS.md と ~/.claude/rules/tool-management.md の両方へ同じ内容を展開する。ルール変更時は各出力テンプレートではなく共通テンプレートを編集する。

Note (agent skills): skill の導入チャネルは2種類ある。① GitHub lock チャネル: skills CLI で導入する skill の正本は ~/.agents/skills/ (store)。~/.claude/skills はそこへの symlink で、Claude Code から同じ skill を共有する。~/.agents/.skill-lock.json (どの GitHub ソースから入れたかの記録) を管理対象にしており、これが変わると run_onchange_after_install-skills.sh が chezmoi apply 時に各 skill を skills add で再取得する (Brewfile と同じ仕組み)。skill を追加/削除したら cp ~/.agents/.skill-lock.json dot_agents/dot_skill-lock.json で lock を source へ同期してコミットする。② 自作 skill チャネル: dot_agents/skills-local/<name>/ に SKILL.md(とサポートファイル)を置き、run_onchange_after_install-local-skills.sh が chezmoi apply 時に ~/.agents/skills/<name>/ へコピーする。GitHub チャネルは lock 外のフォルダを削除しないため両チャネルは共存できる。store 本体 (~/.agents/skills/**) は再生成可能なので .chezmoiignore で除外(自作スキルの source は dot_agents/skills-local/ に残る)。自作 skill を削除するときは source から消すだけでは足りず、run_onchange_after_install-local-skills.sh.tmpl の REMOVED_SKILLS 配列(store 側の実体を除去)と .chezmoiremove(~/.agents/skills-local/ 側の残骸を除去。残すと毎回再インストールされる)の2箇所に追記する。

Note (Claude Code plugins): プラグインの導入は run_onchange_after_install-claude-plugins.sh.tmpl の inline manifest(MARKETPLACES / PLUGINS 配列)が唯一の source of truth。chezmoi apply 時にこのスクリプトが claude plugin marketplace add + claude plugin install を冪等に流し、marketplace の clone と cache 本体を再生成する(skills store と同じ「ignore して run_onchange で再生成」方式)。Claude Code が実行時に所有する known_marketplaces.json / installed_plugins.json は .chezmoiignore 済みで追跡しない(タイムスタンプ等のドリフトが出ない)。有効化状態 enabledPlugins は modify_settings.json.tmpl が新規マシン用に seed し、以降は Claude Code の値を保持する。現在は公式 LSP (gopls-lsp / rust-analyzer-lsp @ claude-plugins-official) と ecc (ecc@ecc)、crit (crit@crit) を管理 (ecc は Claude Code CLI ≥ v2.1.0 必須)。プラグインを増減するときは manifest 配列を編集するだけ(JSON への手動反映や chezmoi re-add は不要)。

Note (Homebrew 管理の CLI): Brewfile.tmpl の「CLI・シェル環境(Homebrew 管理)」に formula と CLI の cask をまとめ、各定義行の右側に Homebrew 管理理由を記載する。既存方針・設定・配布情報から理由を確認し、特定できないものは「個別の管理理由は未確認」と明記する。diff-pdf は aqua 標準レジストリに未登録で、公式配布に macOS 用バイナリがないため、Homebrew formula で Poppler・Cairo・wxWidgets 等の依存ライブラリとともに管理する。通常の chezmoi apply で brew bundle が実行され、ほかの Brewfile エントリとともにインストール・更新される。

Note (op / 1Password CLI): op は「single-binary CLI は原則 aqua (mise)」方針の例外で、Brewfile.tmpl の cask "1password-cli" で管理する。aqua registry の 1password/cli は配布元が GitHub release ではなく cache.agilebits.com のため type: http 扱いで repo_owner/repo_name を持たず、mise ではバージョン一覧を引けない (ls-remote / latest / "latest" 指定が不可 → 更新検知が効かず手動追従になる)。上流が digest を公開していないので lockfile にも checksum が載らない。aqua を選ぶ利点が両方とも成立しない一方、資格情報ツールは追従が遅れるほうが痛いため brew に置いている (cask は op の zsh 補完も同梱する)。バージョン追従は brew upgrade に任せる。

Note (二重チャネル管理ツール): crit / herdr は CLI(mise)と Claude 連携(plugin / skill / hook)の複数チャネルで同じツールを管理している。CLI のバージョンだけ上げると連携側が古いままズレるため、更新時は両方を揃えること。対応表と更新手順は CLAUDE.md の「二重チャネル管理ツール(CLI + Claude 連携)」を参照。

Excluded from management

以下はリポジトリ専用のメタファイル、認証トークン・機密情報、アプリが所有する実行時状態のため管理対象外。

パス 理由
AGENTS.md(リポジトリ直下) この dotfiles の chezmoi 適用ルールの正本。Git で管理し、home には展開しない
~/.config/chezmoi/ chezmoi 設定ファイル (sourceDir / [data] の手動変数を含む)
~/.config/gh/ GitHub CLI 認証トークン
~/.config/github-copilot/ GitHub Copilot 認証トークン
~/.config/configstore/ 各種ツールの認証情報
~/.config/nvim/lazyvim.json LazyVim が自動更新する既読状態ファイル
~/.config/mise/mise.local.lock config.local.toml(private tool)の lockfile。private repo 名とリリースアセット URL を含むため public repo に置けない。mise lock -g を実行すると(mise.lock と一緒に)各マシンで自動生成される
~/.agents/skills/ skills CLI が GitHub から取得する store。lock から再生成可能 (run_onchange_after_install-skills.sh)
~/.codex/auth.json, .codex-global-state.json*, installation_id Codex の認証・インストール・アプリ状態。機密またはマシン固有
~/.codex/history.jsonl, session_index.jsonl, sessions/, archived_sessions/, attachments/, shell_snapshots/ 会話・添付・実行環境の履歴。機密情報を含む可能性が高い
~/.codex/*.sqlite*, cache/, log/, tmp/, .tmp/, plugins/cache/, skills/.system/ Codex とpluginが生成するDB・cache・log・組み込みskill。再生成可能
~/.codex/rules/, ~/.codex/automations/ rules は一時的なコマンド許可、automations はmachine-localな定義・memoryのため追跡しない
~/.claude.json Claude Code OAuth/セッション情報 (253 KB、自動 backup あり)
~/.claude/sessions/ アクティブセッション (mode 700、トークン含む)
~/.claude/projects/ プロジェクト別トランスクリプト (79 MB、機密含む)
~/.claude/history.jsonl プロンプト履歴 (機密含む)
~/.claude/paste-cache/, shell-snapshots/, image-cache/, file-history/ ペースト/環境変数/画像/編集履歴キャッシュ (機密の可能性大)
~/.claude/cache/, backups/, plans/, tasks/, todos/, session-env/, debug/, ide/ ランタイム生成物。再生成可能
~/.claude/statsig/, telemetry/, stats-cache.json, mcp-needs-auth-cache.json テレメトリ / SDK キャッシュ
~/.claude/plugins/cache/, plugins/data/, plugins/marketplaces/, plugins/repos/ clone 済みプラグインリポジトリ / LSP データ。Claude Code 起動時に再生成
~/.claude/plugins/known_marketplaces.json, plugins/installed_plugins.json Claude Code が実行時に所有・書き換える(タイムスタンプ等が drift する)。run_onchange_after_install-claude-plugins.sh の manifest から claude plugin install で再生成

Template variables

.tmpl ファイルは chezmoi が Go template として評価する。変数は2種類:

  • 手動設定が必要 — ~/.config/chezmoi/chezmoi.toml の [data] に記述する。~/.config/chezmoi/ は機密のためこのリポジトリには含まれないので、新規マシンでは chezmoi apply の前に必ず設定する (下記 step 4)。
  • chezmoi 自動提供 — 設定不要。
変数 種別 使用箇所 取得元 / 意味
.github_username 手動 dot_gitconfig.tmpl [data] github_username → git の user.name (GitHub アカウント名)
.github_email 手動 dot_gitconfig.tmpl [data] github_email → git の user.email (GitHub に紐づく email)
.private_tool_repo 手動 (任意) dot_config/mise/private_config.local.toml.tmpl private GitHub repo のツールの owner/repo。github バックエンドの tool spec に使用。設定時のみ導入 (hasKey ゲート)
.private_tool_version 手動 (任意) dot_config/mise/private_config.local.toml.tmpl / run_onchange_after_install-mise-tools.sh.tmpl private tool の tool spec のバージョン。repo 名と同様に public repo へ残さないため注入する。バージョンを上げるときはこの値を書き換えて chezmoi apply するだけでよい (dotfiles のコミット不要)
.op_account 手動 (任意) run_onchange_after_install-mise-tools.sh.tmpl op-vault の OP_ACCOUNT (1Password アカウント識別子)
.private_tool_token_ref 手動 (任意) run_onchange_after_install-mise-tools.sh.tmpl private repo を読める GitHub PAT の op://<Vault>/<Item>/<field> 参照
install_orbstack 手動 (任意) Brewfile.tmpl 設定したマシンでのみ cask "orbstack" を install (hasKey ゲート)
install_docker_desktop 手動 (任意) Brewfile.tmpl 設定したマシンでのみ cask "docker-desktop" を install (hasKey ゲート)
.chezmoi.homeDir 自動 dot_gitconfig.tmpl ホームディレクトリのパス (excludesfile に使用)
.chezmoi.sourceDir 自動 run_onchange_install-packages.sh.tmpl source ディレクトリのパス (Brewfile.tmpl の場所に使用)
include "..." 自動 (関数) run_onchange_install-packages.sh.tmpl / run_onchange_after_install-skills.sh.tmpl / run_onchange_after_install-local-skills.sh.tmpl / run_onchange_after_install-mise-tools.sh.tmpl source 相対のファイル内容を埋め込む。sha256sum と組み合わせ Brewfile.tmpl / skill-lock / 自作 skill / mise config (config.toml.tmpl・private_config.local.toml.tmpl・private_mise.lock) の変更検知に使用

新たにテンプレートを追加する場合、ファイル名に .tmpl を付ければ上記の変数を参照できる。手動変数を増やしたときはこの表と step 4 を更新すること。

New machine setup

# 1. Install Homebrew (https://brew.sh)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 2. Install chezmoi and ghq
brew install chezmoi ghq

# 3. Clone dotfiles via ghq
ghq get [email protected]:Msksgm/dotfiles.git    # → ~/workspace/github.com/Msksgm/dotfiles

# 4. Configure chezmoi (sourceDir + テンプレート手動変数。詳細は "Template variables" 参照)
mkdir -p ~/.config/chezmoi
cat > ~/.config/chezmoi/chezmoi.toml <<'EOF'
sourceDir = "~/workspace/github.com/Msksgm/dotfiles"

[data]
  github_username = "Msksgm"               # → ~/.gitconfig の user.name
  github_email    = "[email protected]"      # → ~/.gitconfig の user.email
  # 以下4変数は private GitHub repo のツールを mise で入れるマシンでだけ設定(任意)。
  # 詳細は下記 "Private tool" 参照。4つはセットで必要。
  private_tool_repo       = "<owner>/<repo>"
  private_tool_version    = "<version>"    # 例: "1.2.3"
  op_account              = "<1Password アカウント識別子>"
  private_tool_token_ref  = "op://<Vault>/<Item>/<field>"
  # container runtime cask はマシンごとに入れ分ける(任意・どちらか一方 or 両方)。
  # 設定したキーの cask だけが `brew bundle` で install される。
  # install_orbstack       = true
  # install_docker_desktop = true
EOF

# 5. Apply dotfiles
#    run_onchange_install-packages.sh runs `brew bundle` automatically,
#    so Brewfile packages (powerlevel10k 等) もここでインストールされる
#    mise.lock も chezmoi 管理下なので、mise のツールは全マシンで同一 version/checksum で入る
chezmoi apply

Private tool(任意)

private GitHub repo のリリースを mise の github バックエンドで導入する仕組み。mise install が private repo を認証するために GITHUB_TOKEN が要るので、run_onchange_after_install-mise-tools.sh が 1Password から op-vault 経由でトークンを取得して mise install の直前に export する。public repo にシークレット・内部参照(対象 repo 名・バージョンも含む)を残さないため、op アカウント・シークレット参照・repo 名・バージョンはすべて chezmoi の [data] (上記 step 4) から注入する。

opt-in: private_tool_repo を設定したマシンでだけ有効(hasKey ゲート)。未設定のマシンでは config.local.toml 自体が展開されず (.chezmoiignore で制御)・トークン処理も走らないため、chezmoi apply は通常どおり成功する。private_tool_repo を設定していて private_tool_version を設定し忘れた場合は、chezmoi がキー未定義エラーで apply を止める(設定漏れに気付けるようにあえて fail-fast にしている)。

なぜ config.toml と別ファイルなのか: mise の lockfile は「宣言した config ファイル名の .toml → .lock」で決まり、~/.config/mise/config.toml の lock は ~/.config/mise/mise.lock。この mise.lock は再現性のため dotfiles で追跡している (dot_config/mise/private_mise.lock) ので、private tool をここに書くと repo 名とリリースアセット URL が public repo に載ってしまう。そのため private tool は ~/.config/mise/config.local.toml に隔離し、lock を mise.local.lock(追跡対象外)へ分離している。

  • conf.d/*.toml は lockfile が親ディレクトリの mise.lock に合流するため隔離手段にならない。
  • MISE_ENV 方式は全プロジェクトディレクトリに波及するうえ、chezmoi のスクリプトは非対話 bash で走り .zshenv を読まないため apply 時にツールが入らない。

バージョン更新: ~/.config/chezmoi/chezmoi.toml の private_tool_version を書き換えて chezmoi apply するだけ。dotfiles 側のコミットは不要(スクリプトのバージョン hash 行が変わるので mise install も再実行される)。mise.local.lock の更新もあわせて行うなら mise lock -g(追跡対象外なのでコミットは不要)。

導入するマシンで一度だけ用意しておくもの:

  1. 1Password デスクトップアプリの CLI 連携を有効化し、op-vault init を実行する (op-vault は 1Password SDK 利用のため op CLI に依存しない。op 自体は Brewfile で別途入るが、この仕組みの前提ではない)。
  2. private repo を読める GitHub PAT を 1Password に保存し、その op://<Vault>/<Item>/<field> 参照を private_tool_token_ref に設定する。
  3. private_tool_repo / op_account / private_tool_token_ref を ~/.config/chezmoi/chezmoi.toml の [data] に設定する(3つセット)。

トークンを解決できない (1Password ロック・変数未設定等) 場合、スクリプトは 中断する (silent skip しない)。導入対象マシンで一時的に他ツールだけ入れたいときは 1Password を解錠してから再 apply すること。

mise lockfile の更新

~/.config/mise/mise.lock(全ツールの version / URL / checksum を複数プラットフォーム分固定した lockfile)は dot_config/mise/private_mise.lock として追跡している。生成物なので手で編集せず、ツールを追加・バージョン変更したら mise lock -g → cp で source へ同期してコミットする(dot_agents/dot_skill-lock.json と同じ「実体を cp で追跡」パターン)。mise install だけでは現在の platform 分しか lock されず、削除済みツールのエントリも残るため mise lock -g を挟むのが必須。

手順・検証コマンド・注意点は .agents/skills/mise-lock-update/SKILL.md に集約している(Codex では $mise-lock-update、Claude Code では /mise-lock-update で起動できる。.claude/skills は .agents/skills への symlink)。

cp した直後の chezmoi diff は空にならない。 install-mise-tools.sh が new file mode 100755 として全文表示される。これはファイル差分ではなく「apply したらこのスクリプトが走る」という予告で、lockfile の中身が変わるとスクリプトに埋め込まれた # lockfile hash: 行が変わり run_onchange の再実行対象になるため。もう一度 chezmoi apply すれば mise install が冪等に走って diff が収束する。 見るべきは「diff が空か」ではなく「.config/mise/mise.lock のファイル差分が出ていないか」。

chezmoi cheatsheet

# Preview what would change
chezmoi diff

# Apply all managed files
chezmoi apply

# List managed files
chezmoi managed

# Re-apply after editing source
chezmoi apply -v

# Pull remote changes and apply
chezmoi update

# Claude Code の blocklist / config を source 側に同期 (drift したとき)
# settings.json は modify_ が、plugins の marketplaces/installed は run_onchange が
# 面倒を見るので re-add 不要。手動編集したときだけ blocklist/config を取り込む。
chezmoi re-add ~/.claude/plugins/blocklist.json ~/.claude/plugins/config.json

# brew drift: インストール済みだが Brewfile にない formula を追加
brewfile-add <formula>
brewfile-add --cask <cask>

# drift チェックを手動で強制実行(1日1回キャッシュを無視)
# ※ source して関数として呼ぶ必要がある(スクリプト直接実行では --force が届かない)
source ~/.zsh/brew_drift_check.zsh && brew-drift       # Brewfile との差分を確認
source ~/.zsh/drift_check.zsh && dotfiles-drift        # git・chezmoi の差分を確認

Note (Claude Code 設定の drift): settings.json の feedbackSurveyState / enabledPlugins / extraKnownMarketplaces(Claude Code が実行時に書き換えるキー)は modify_settings.json.tmpl が実ファイルの値を保持するため diff は出ない。plugins/known_marketplaces.json / installed_plugins.json は .chezmoiignore 済みで追跡しない。→ 以前のようにタイムスタンプや git SHA で chezmoi diff が出続けることはない。

Contributors

Msksgm

Issues