mcpField
C
chezmoi-config

chezmoi-config

github.com/faintghostクラウド・DevOps54 回インストール
リポジトリ

chezmoi-config について

chezmoi-configは、chezmoiでdotfilesを管理するための読み取り専用ガイドです。テンプレート、外部リソース、スクリプト、パスワードマネージャーを扱い、実環境を変更せずに設定を検証します。

主な機能

  1. 01Goテンプレート設定の作成
  2. 02外部ファイルとリソースの管理
  3. 03クロスプラットフォームdotfilesの設定
  4. 04スクリプトとパスワードマネージャー連携の参照
  5. 05読み取り専用コマンドによる設定検証

活用シーン

  1. 01テンプレート展開結果の確認
  2. 02dotfiles変更内容のプレビュー
  3. 03chezmoi設定のトラブルシューティング

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/faintghost/skills --skill chezmoi-config

インストール後、Claude Code で/chezmoi-configを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
references/
advanced-configuration.md
external-files.md
ignore-files.md
password-managers.md
scripts.md
template-syntax.md

詳細

Chezmoi の構成管理

テンプレート、スクリプト、外部リソース、高度な構成を使用して chezmoi のドットファイルを管理するための包括的なガイドです。

⚠️ 安全性に関する制約

このスキルは読み取り専用であり、検証のみを行います。実際の環境を変更してはなりません。

禁止されている操作

以下のコマンドはシステムを変更するため、絶対に実行しないでください。

  • chezmoi apply - ホームディレクトリに変更を適用します
  • chezmoi apply --force - 変更を強制的に適用します
  • chezmoi update - ソースの状態を更新し、管理対象のファイルを変更する場合があります
  • スクリプトを直接実行する操作(スクリプトは chezmoi apply の実行時に自動的に実行されます)
許可されている安全な操作

読み取り専用の以下の検証コマンドのみを使用してください。

  • chezmoi diff - 変更内容をプレビューします(安全)
  • chezmoi apply --dry-run - 変更を適用せずにシミュレートします(安全)
  • chezmoi doctor - 構成の有効性を確認します(安全)
  • chezmoi data - テンプレートのデータ変数を表示します(安全)
  • chezmoi managed - chezmoi が現在管理しているファイルを一覧表示します(読み取り専用、安全)
  • chezmoi unmanaged - chezmoi が現在管理していないファイルを一覧表示します(読み取り専用、安全)
  • chezmoi ignored - chezmoi によって無視されているファイルを一覧表示します(読み取り専用、安全)
  • chezmoi execute-template < file.tmpl - 展開後のテンプレート出力をプレビューします(安全)
  • chezmoi state dump - スクリプトの実行状態を確認します(安全)
  • chezmoi verify - ソースの状態の整合性を検証します(安全)
  • chezmoi cd - ソースディレクトリに移動します(安全)
  • chezmoi source-path - ソースディレクトリのパスを表示します(安全)
ユーザーの責任

このスキルは chezmoi の構成の作成と検証を支援します。変更を適用するには、出力を確認した後、ターミナルで chezmoi apply を手動で実行する必要があります。

クイックスタート

新しいテンプレートを作成する
  1. 既存のファイルをテンプレートとして追加する:

    chezmoi add --template ~/.gitconfig
    
  2. または手動で作成する:

    chezmoi cd
    $EDITOR dot_gitconfig.tmpl
    
  3. Go テンプレート構文を使用する:

    [user]
        name = {{ .name }}
    {{- if eq .chezmoi.os "darwin" }}
    [credential]
        helper = osxkeychain
    {{- end }}
    
外部リソースを管理する

.chezmoiexternal.toml.tmpl を作成します。

[".oh-my-zsh"]
    type = "archive"
    url = "https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz"
    exact = true
    stripComponents = 1
スクリプトを作成する

run_onchange_install-packages.sh.tmpl を作成します。

{{ if eq .chezmoi.os "darwin" -}}
#!/bin/bash
brew install git vim ripgrep
{{ end -}}

リファレンスドキュメント

このスキルには、包括的なリファレンスドキュメントが含まれています。詳しい情報については、以下のガイドを参照してください。

  • template-syntax.md - Go テンプレート構文、変数、条件分岐、ループ、例
  • external-files.md - ファイル、アーカイブ、Git リポジトリ向けの .chezmoiexternal 構成
  • ignore-files.md - .chezmoiignore/.chezmoiignore.tmpl のパターン、テンプレート、適用範囲
  • password-managers.md - 20 種類以上のパスワードマネージャーとの連携(1Password、Bitwarden、Vault など)
  • scripts.md - run_once、run_onchange、run_before、run_after スクリプト
  • advanced-configuration.md - .chezmoi.toml、プロンプト、暗号化、高度な機能

よくあるタスク

1. プラットフォーム固有の構成を作成する

テンプレートファイル(dot_gitconfig.tmpl):

[user]
    name = {{ .name }}
    email = {{ .email }}

{{- if eq .chezmoi.os "darwin" }}
[credential]
    helper = osxkeychain
{{- else if eq .chezmoi.os "linux" }}
[credential]
    helper = cache
{{- end }}

構成(chezmoi.toml):

[data]
    name = "John Doe"
    email = "[email protected]"
2. パスワードマネージャーでシークレットを管理する
{{- if (bitwarden "github") }}
[github]
    token = {{ (bitwarden "github").login.password }}
{{- end }}
3. 条件に応じてパッケージをインストールする

run_onchange_install-packages.sh.tmpl:

{{ if eq .chezmoi.os "darwin" -}}
#!/bin/bash
brew bundle --file=/dev/stdin <<EOF
{{ range .packages.darwin.brews -}}
brew "{{ . }}"
{{ end -}}
EOF
{{ else if eq .chezmoi.os "linux" -}}
#!/bin/bash
sudo apt install -y {{ range .packages.linux }}{{ . }} {{ end }}
{{ end -}}

.chezmoidata/packages.yaml:

darwin:
  brews:
    - git
    - vim
    - ripgrep

linux:
  - git
  - vim
  - ripgrep
  - fd-find
4. 外部リソースを含める

.chezmoiexternal.toml.tmpl:

[".vim/autoload/plug.vim"]
    type = "file"
    url = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"

[".oh-my-zsh"]
    type = "archive"
    url = "https://github.com/ohmyzsh/ohmyzsh/archive/master.tar.gz"
    exact = true
    stripComponents = 1
    refreshPeriod = "168h"

[".local/bin/age"]
    type = "archive-file"
    url = "https://github.com/FiloSottile/age/releases/download/v1.1.1/age-v1.1.1-{{ .chezmoi.os }}-{{ .chezmoi.arch }}.tar.gz"
    path = "age/age"
    executable = true
5. 対話型プロンプトを構成する

.chezmoi.toml.tmpl:

{{- $editor := promptChoice "favorite editor" ["vim" "neovim" "vscode"] -}}
[data]
    name = "{{ promptString "your name" }}"
    email = "{{ promptString "your email" }}"
    editor = {{ $editor }}

{{ if promptBool "enable work config?" -}}
[data.work]
    enabled = true
    work_email = "{{ promptString "work email" }}"
{{ end }}
6. 条件に応じてファイルを無視する

.chezmoiignore(テンプレート対応):

README.md
*.log

{{- if ne .chezmoi.hostname "work-laptop" }}
.work
{{- end }}

{{- if eq .chezmoi.os "windows" }}
Documents/*
!Documents/*PowerShell/
{{- end }}
7. chezmoi managed / chezmoi unmanaged の出力を解釈する(設定ファイル)

chezmoi unmanaged を確認する際は、destination の設定ファイルが ~/.config/chezmoi/chezmoi.toml である一方、source は通常、chezmoi のソース状態で dot_config/chezmoi/chezmoi.toml.tmpl(または private_dot_config/chezmoi/chezmoi.toml.tmpl)のようなテンプレートとして管理されることに注意してください。

~/.config/chezmoi が未管理として表示された場合:

  • まず chezmoi managed を確認し、設定ファイルがソースですでに管理されているか確かめます。
  • 管理されていない場合は、テンプレートとして追加し、ソースで管理します(chezmoi.toml にマシン固有の値を保持する場合に推奨)。
8. run_once スクリプトを管理する

run_once_000-bootstrap.sh.tmpl:

#!/bin/bash
{{ if eq .chezmoi.os "darwin" -}}
if ! command -v brew &> /dev/null; then
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
{{ end -}}

run_once の状態をリセットする:

# Clear all run_once script state
chezmoi state delete-bucket --bucket=scriptState

組み込み変数

すべてのテンプレートで使用できる、よく使われる chezmoi 変数:

変数説明例
.chezmoi.osオペレーティングシステムlinux、darwin、windows
.chezmoi.archアーキテクチャamd64、arm64
.chezmoi.hostnameマシンのホスト名my-laptop
.chezmoi.username現在のユーザーjohn
.chezmoi.homeDirホームディレクトリ/home/john
.chezmoi.sourceDirソース状態ディレクトリ/home/john/.local/share/chezmoi
.chezmoi.env.VAR環境変数.chezmoi.env.EDITOR

テンプレート構文のリファレンス

条件分岐
{{ if eq .chezmoi.os "darwin" }}
# macOS-specific
{{ else if eq .chezmoi.os "linux" }}
# Linux-specific
{{ end }}
ループ
{{ range .packages.darwin.brews -}}
brew "{{ . }}"
{{ end -}}
文字列操作
{{ .name | quote }}          # Add quotes
{{ .chezmoi.homeDir }}        # No trimming
{{- "content" -}}            # Trim whitespace

ベストプラクティス

  1. クロスプラットフォーム設定にはテンプレートを使用する - .chezmoi.os、.chezmoi.arch を活用します
  2. シークレットはパスワードマネージャーに保存する - 機密データをハードコードしないでください
  3. スクリプトを冪等にする - 複数回実行しても安全にします
  4. 説明的なファイル名を使用する - run_once_000-bootstrap.sh.tmpl
  5. テンプレートをローカルでテストする - chezmoi execute-template < file.tmpl を使用します
  6. .chezmoidata を整理する - 複数のファイルに関心事を分割します
  7. 依存関係を文書化する - 複雑な設定にはコメントを付けます
  8. 適切な更新間隔を使用する - 最新性と帯域幅のバランスを取ります

最新のドキュメントを参照する

このスキルでは、正確性を確保するため、Context7 を通じて最新の chezmoi ドキュメントを参照できます:

# When in doubt, ask for the latest docs
"Check the chezmoi documentation for [topic]"

質問が .tmpl の動作(特に .chezmoiignore{,.tmpl})に関する場合は、まず公式ドキュメントを確認してください。

便利なコマンド

# ⚠️ FORBIDDEN - Apply all changes (must run manually)
chezmoi apply

# Dry run (preview changes) - SAFE
chezmoi apply --dry-run

# ⚠️ FORBIDDEN - Update source state (may change managed files)
chezmoi update

# Edit source state - SAFE
chezmoi cd

# Add file as template - SAFE
chezmoi add --template ~/.config/file

# Verify configuration - SAFE
chezmoi doctor

# View all template data - SAFE
chezmoi data

# List ignored files - SAFE
chezmoi ignored

# Test template (preview output) - SAFE
chezmoi execute-template < ~/.local/share/chezmoi/dot_file.tmpl

# View run_once state - SAFE
chezmoi state dump

# Clear run_once script state (use with caution) - SAFE
chezmoi state delete-bucket --bucket=scriptState

# Clear run_onchange script state (use with caution) - SAFE
chezmoi state delete-bucket --bucket=entryState

# See what would change - SAFE
chezmoi diff

# Verify files match expected state - SAFE
chezmoi verify

ファイル構成

標準的な chezmoi ソース状態の構成:

~/.local/share/chezmoi/
├── .chezmoi.toml.tmpl          # Main configuration (optional)
├── .chezmoiexternal.toml.tmpl   # External resources (optional)
├── .chezmoiignore.tmpl          # Ignore rules (template-aware, optional)
├── .chezmoidata/
│   ├── packages.yaml            # Custom data
│   └── work.yaml
├── dot_gitconfig.tmpl           # Regular templates
├── dot_zshrc.tmpl
├── run_once_000-bootstrap.sh.tmpl
├── run_onchange_install-packages.sh.tmpl
└── run_after_dot_vimrc.sh.tmpl

デバッグ

注意:デバッグ時も chezmoi update は実行しないでください。変更を確認する場合は chezmoi diff または chezmoi apply --dry-run を使用してください。

詳細な出力:

chezmoi apply --verbose

変更内容を確認する:

chezmoi diff

設定を検証する:

chezmoi doctor

展開後のテンプレートを確認する:

chezmoi execute-template < template-file

このスキルを使用する場面

次のような場合に、このスキルを使用してください:

  • Go 構文で新しい chezmoi テンプレートを作成する
  • 既存の .chezmoi 設定ファイルを変更する
  • .chezmoiignore/.chezmoiignore.tmpl のルールを管理する
  • 外部リソース用に .chezmoiexternal を設定する
  • run_once/run_onchange スクリプトを作成する
  • シークレット用のパスワードマネージャーを統合する
  • クロスプラットフォームのドットファイルを管理する
  • テンプレートの問題をデバッグする
  • .chezmoidata ファイルを整理する

個別の懸念事項については、上記に記載した詳細なリファレンスドキュメントを参照してください。

コメント