chezmoi-chef について
chezmoi-chefは、chezmoiで複数マシンのドットファイルを管理するスキルです。テンプレート、暗号化、パスワードマネージャー連携、適用時のスクリプトを扱います。
主な機能
- 01複数マシンのドットファイル管理
- 02マシン別設定のテンプレート化
- 03機密ファイルの暗号化
- 04パスワードマネージャー連携
- 05適用時にセットアップスクリプトを実行
活用シーン
- 01新しいマシンで設定を初期化
- 02OS別の設定を生成
- 03暗号化したSSHキーを同期
- 04適用時にソフトウェアをインストール
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fonnesbeck/ shay-mwa --skill chezmoi-chefインストール後、Claude Code で/chezmoi-chefを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/commands.mdpassword-managers.mdtemplates.md詳細
Chezmoi によるドットファイル管理
Chezmoi は、テンプレート機能、暗号化、パスワードマネージャーとの連携により、複数のマシンでドットファイルを管理します。
クイックリファレンス
chezmoi init # Initialize
chezmoi add ~/.bashrc # Add file
chezmoi add --template ~/.zshrc # Add as template
chezmoi add --encrypt ~/.secret # Add encrypted
chezmoi edit ~/.bashrc # Edit and apply
chezmoi apply # Apply all changes
chezmoi diff # Preview changes
chezmoi update # Pull and apply
chezmoi cd # Shell in source dir
基本的なワークフロー
新しいマシンで初期化する
GitHub から取得する場合:
chezmoi init --apply github-username
インストールと初期化を1行で実行:
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply github-username
管理対象にファイルを追加する
chezmoi add ~/.bashrc ~/.zshrc ~/.gitconfig # Multiple files
chezmoi add -r ~/.config/nvim # Directory
chezmoi add --template ~/.bashrc # As template
chezmoi add --encrypt ~/.ssh/id_rsa # Encrypted
管理対象のファイルを編集する
chezmoi edit ~/.bashrc # Opens source file
chezmoi edit --apply ~/.bashrc # Auto-apply after save
変更を同期する
chezmoi cd # Enter source directory
git add . && git commit -m "update dotfiles" && git push
exit
chezmoi apply # Apply locally
または、chezmoi の Git ラッパーを使用します:
chezmoi git add .
chezmoi git commit -m "update"
chezmoi git push
テンプレート機能
マシンごとの設定を作成します。詳しい手順については、templates.md を参照してください。
テンプレートに変換:
chezmoi add --template ~/.bashrc
# or
chezmoi chattr +template ~/.bashrc
一般的なパターン:
# OS-specific
{{ if eq .chezmoi.os "darwin" -}}
export PATH="/opt/homebrew/bin:$PATH"
{{- else if eq .chezmoi.os "linux" -}}
export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
{{- end }}
# Hostname-specific
{{ if eq .chezmoi.hostname "work-laptop" -}}
export HTTP_PROXY="http://proxy.company.com:8080"
{{- end }}
# Distro-specific (Linux)
{{ if eq .chezmoi.osRelease.id "fedora" -}}
alias update="sudo dnf upgrade"
{{- else if eq .chezmoi.osRelease.id "ubuntu" -}}
alias update="sudo apt update && sudo apt upgrade"
{{- end }}
~/.config/chezmoi/chezmoi.toml でカスタム変数を設定:
[data]
email = "[email protected]"
editor = "nvim"
テンプレートをテスト:
chezmoi execute-template '{{ .chezmoi.os }}'
chezmoi data # Show all variables
chezmoi cat ~/.bashrc # Show rendered output
シークレット管理
シークレットをコミットしないよう、パスワードマネージャーと連携します。すべての連携方法については、password-managers.md を参照してください。
1Password の例
設定(~/.config/chezmoi/chezmoi.toml):
[onepassword]
command = "op"
prompt = true
テンプレート:
export GITHUB_TOKEN='{{ onepasswordRead "op://Personal/github/token" }}'
export AWS_ACCESS_KEY='{{ onepasswordRead "op://Work/aws/access-key" }}'
Bitwarden の例
export API_KEY='{{ (bitwarden "item" "api-credentials").login.password }}'
pass の例
export SECRET='{{ pass "path/to/secret" }}'
暗号化
ソースディレクトリに保存する機密ファイルを暗号化します。
age を使ったセットアップ
chezmoi age keygen -o ~/.config/chezmoi/key.txt
設定:
encryption = "age"
[age]
identity = "~/.config/chezmoi/key.txt"
recipient = "age1..." # Public key from keygen output
暗号化されたファイルを追加する
chezmoi add --encrypt ~/.ssh/id_rsa
chezmoi add --encrypt ~/.aws/credentials
ファイルは encrypted_ 接頭辞付きで保存され、適用時に復号されます。
スクリプトの実行
適用時にセットアップ作業のスクリプトを実行します。
ソースディレクトリに作成します:
chezmoi cd
スクリプトの命名規則:
run_once_install.sh- 一度だけ実行しますrun_onchange_setup.sh- スクリプトが変更されたときに実行しますrun_always.sh- 適用のたびに実行します
run_once_install-packages.sh の例:
#!/bin/bash
{{ if eq .chezmoi.os "darwin" -}}
brew install ripgrep fd bat
{{- else if eq .chezmoi.osRelease.id "fedora" -}}
sudo dnf install -y ripgrep fd-find bat
{{- end }}
コマンドリファレンス
コマンド一覧については、commands.md を参照してください。
トラブルシューティング
chezmoi doctor # Check configuration
chezmoi verify # Verify targets match source
chezmoi diff # See pending changes
chezmoi status # File status overview
chezmoi --debug apply # Verbose output
run_once スクリプトをリセット:
chezmoi state delete-bucket --bucket=scriptState