クロスプラットフォーム (macOS / Arch Linux / Ubuntu / WSL) で動く設定ファイル群。 chezmoi を使って 1 コマンドで環境構築できる。
OS によって最適な入り方が違うので以下から選ぶ。どちらでも最終的にやることは同じ (chezmoi が全パッケージインストール + 設定配置 + シェル切替まで実行)。
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply reisutacurl 1コマンドで chezmoi 取得 → リポ clone → apply まで完結。just も git も事前に要らない。
pacman から just / git / chezmoi が直接取れるので、こちらの方が手数少なめ:
sudo pacman -S --needed just git chezmoi
git clone https://github.com/reisuta/dotfiles ~/dotfiles && cd ~/dotfiles
just installjust install はローカル clone を chezmoi のソースとして init --apply する。chezmoi を pacman で入れ忘れても recipe 内で自動取得するので最低 pacman -S just git だけでも OK。
詳細は chezmoi init --apply の項を参照。
| OS | パッケージマネージャ | メインターミナル |
|---|---|---|
| macOS (Apple Silicon / Intel) | Homebrew | WezTerm |
| Arch Linux (native) | pacman | kitty |
| Arch Linux (WSL) | pacman | (Windows 側 WezTerm) |
| Ubuntu / Debian (native) | apt + curl | kitty |
| Ubuntu / Debian (WSL) | apt + curl | (Windows 側 WezTerm) |
凡例
- 🟢 副作用なし: 何も変更しない (情報表示のみ)
- 🟡 限定的な副作用: 一部のファイルや設定を更新する
- 🔴 大きな副作用: パッケージインストール / シェル変更 / sudo 必要
新規マシン / 新規環境で「最初の1回だけ」叩くコマンド群。
🔴 大きな副作用 (パッケージインストール、シェル変更、sudo 要)
いつ使う?
- 新規マシンに dotfiles を導入するとき (= マシンセットアップで唯一叩くコマンド)
何が起きる?
- chezmoi バイナリを
~/bin/(or~/.local/bin/) にダウンロード github.com/reisuta/dotfilesを~/.local/share/chezmoiに clone~/.config/chezmoi/chezmoi.tomlを生成 (.chezmoi.toml.tmplから)mode = "symlink"→ 設定ファイルは symlink 配置
run_once_before_install-packages.sh.tmpl実行 (1回限り)- macOS:
brew bundle --file=Brewfile - Arch:
pacman -Sでパッケージ一括インストール - Ubuntu:
apt install+ curl で atuin/mise/eza/starship を別途取得 - 全 OS 共通: oh-my-zsh 取得 (プロンプトは Starship)
- macOS:
- 設定ファイルを symlink で配置 (例:
~/.zshrc→~/.local/share/chezmoi/dot_zshrc) run_once_after_change-shell.sh.tmpl実行 (1回限り)/etc/shellsに zsh のパスを追加 (必要なら)chsh -s $(which zsh)でデフォルトシェル切替
例 (macOS / Ubuntu / WSL)
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply reisuta例 (Arch Linux)
sudo pacman -S --needed just git chezmoi
git clone https://github.com/reisuta/dotfiles ~/dotfiles && cd ~/dotfiles
just install所要時間: パッケージダウンロードがあるため初回は 5〜15 分。
設定変更があった日に叩くコマンド群。symlink モード前提なので 多くの場合 chezmoi apply は不要。
🟢 副作用なし
いつ使う?
- リポジトリ側の設定を変更した直後、ホーム側に何が反映されるか確認したいとき
- リモートを
git pullした後、何が変わるか把握したいとき
何が起きる?
- ホームディレクトリと chezmoi が想定する状態の差分を表示
git diff風の出力
例
chezmoi diff
# → 差分が表示される (ターミナルで色分け)🟡 限定的な副作用
いつ使う?
- symlink モードなので 基本的に不要 (リポジトリ編集が即時反映される)
.chezmoiignore.tmplを変更した時 (除外ルール変更を反映するため)- 新しい dot_ ファイルを追加した時 (新規 symlink を作るため)
- run_once スクリプトを変更した時 (再実行のため)
何が起きる?
- 想定状態と実際の状態が違うファイルだけ symlink を再作成
- 該当する
run_onceスクリプトがあれば実行 - 既に正しい状態のファイルは触らない
例
chezmoi apply -v # -v で実行内容を詳しく表示🟡 限定的な副作用
いつ使う?
- 別マシンで push した変更をこのマシンに取り込みたいとき
git pull+chezmoi applyを1コマンドにしたバージョン
何が起きる?
- リポジトリで
git pull --rebaseを実行 - 続けて
chezmoi applyを実行
例
chezmoi update -v🟡 限定的な副作用 (ファイル編集)
いつ使う?
- 「
~/.zshrcを編集する」を意識せずに「~/.zshrcを直接編集する感覚で」開きたいとき - chezmoi に管理させているファイルを編集したいとき
何が起きる?
- ターゲットパスから対応するソースパスを逆引き
- nvim でソースファイルを開く (
.chezmoi.toml.tmplでcommand = "nvim"を指定) - 保存して終了するとファイル変更が反映される (symlink モードなので即時)
例
chezmoi edit ~/.zshrc
# → ~/dotfiles/dot_zshrc を nvim で開く🟢 副作用なし
いつ使う?
- chezmoi が今管理しているファイル一覧を見たいとき
- 「これ chezmoi 管理だっけ?」を確認したいとき
何が起きる?
- chezmoi が管理しているターゲットパスの一覧表示
例
chezmoi managed
# → .config/nvim/init.lua, .zshrc, .tmux.conf, ...🟡 限定的な副作用 (ソースリポジトリにファイル追加)
いつ使う?
- ホームディレクトリの既存ファイルを chezmoi 管理下に入れたいとき
何が起きる?
- 指定ファイルを
~/dotfiles/内に適切な命名規則で配置 - 例:
~/.gitconfigを追加 →~/dotfiles/dot_gitconfigが作られる - ホーム側のファイルは手付かず (まだ symlink 化はされない)
例
chezmoi add ~/.gitconfig
git -C ~/dotfiles status # ~/dotfiles/dot_gitconfig が untracked で出るその後 chezmoi apply で symlink 化する。
🟢 副作用なし
いつ使う?
- 利用可能タスクを忘れたとき
- 何ができるか思い出したいとき
何が起きる?
- justfile に定義されているタスクの一覧と説明を表示
例
$ just
Available recipes:
install # 初回セットアップ (chezmoi が無ければ取得し、このリポジトリを source として init --apply)
doctor # 環境ヘルスチェック (副作用なし)
lint # シェルスクリプトの静的解析
plugins-update # Neovim プラグインを最新化 (lazy.nvim sync)
brewfile-dump # 現在のローカル brew 環境から Brewfile を再生成 (macOS 専用)
backup # 現在の chezmoi 管理状態をアーカイブ (バックアップ)
status # chezmoi 管理対象 + 未管理ファイルの一覧🔴 大きな副作用 (パッケージインストール、シェル変更、sudo 要)
いつ使う?
- Arch Linux の新規マシンセットアップ (chezmoi ワンライナーより手数が少ない)
- 既に
~/dotfilesを git clone してあって、ローカル clone を source として apply したいとき
何が起きる?
chezmoiが PATH に無ければ~/.local/bin/chezmoiに curl 取得chezmoi init --source=$(justfile_directory) --apply実行 (= ローカルリポジトリを chezmoi の source として登録 + apply)- 以降は
chezmoi init --applyの手順と同じ (run_once が走ってパッケージインストール等)
例
cd ~/dotfiles
just install🟢 副作用なし
いつ使う?
- 環境構築直後、ちゃんと揃っているか確認したいとき
- 「コマンドが見つからない」エラーを見たとき
- 別マシンと環境差分が無いか調べたいとき
何が起きる?
- 副作用ゼロで以下を確認:
- OS / WSL / ディストリ判定結果
- zsh がインストール済 + デフォルトシェル化されているか
- oh-my-zsh / starship の存在
- コアツール (git/nvim/tmux/fzf/rg/zoxide/bat) の存在
- オプションツール (eza/fd/atuin/mise/gh) の存在
- OS別のターミナル (macOS: WezTerm, Arch: kitty)
- Neovim プラグインのインストール数
- chezmoi 状態 (pending changes の有無)
- すべて OK なら緑、欠けがあれば赤で表示
例
$ just doctor
==> 環境情報
OS: darwin
==> シェル
✓ zsh installed: /opt/homebrew/bin/zsh
✓ default shell is zsh
✓ oh-my-zsh installed
✓ starship installed
==> コアツール
✓ git
✓ nvim
...🟡 限定的な副作用 (Neovim プラグイン更新)
いつ使う?
- Neovim プラグイン (lazy.nvim 管理) を一括更新したいとき
何が起きる?
nvim --headless "+Lazy! sync" +qaを実行- 新規プラグインのインストール / 既存プラグインのアップデート
例
just plugins-update🟡 限定的な副作用 (Brewfile 上書き)
いつ使う?
- 手動で
brew installした後、それを Brewfile に反映させたいとき - macOS 環境を真の正としてリポジトリ側を最新化したいとき
何が起きる?
- 現在の brew 環境を読み取って
Brewfileを上書き生成 brew bundle dump --file=Brewfile --forceを実行- 既存の手書きコメントは消える (注意)
例
just brewfile-dump
git -C ~/dotfiles diff Brewfile # 何が変わったか確認🟢 副作用なし
いつ使う?
scripts/doctor.shを編集した後
何が起きる?
- shellcheck で
scripts/doctor.shを静的解析 .tmplファイルは chezmoi 処理が必要なので対象外
前提
- shellcheck がインストール済 (macOS:
brew install shellcheck)
🟡 限定的な副作用 (アーカイブ作成)
いつ使う?
- 大きな変更前に現状をスナップショット取りたいとき
何が起きる?
chezmoi archiveでホーム側の管理対象をすべて tar.gz に固める- ファイル名:
backup-YYYYMMDD-HHMM.tar.gz(カレント生成)
🟢 副作用なし
いつ使う?
- chezmoi 全体の状態をざっと見たいとき
何が起きる?
chezmoi status(pending な変更) とchezmoi managed(管理対象一覧) を続けて表示
🔴 大きな副作用 (ホームディレクトリ書き換え)
いつ使う?
- 既存ファイルを上書きしてでも chezmoi の想定状態にしたいとき
- 「壊れた状態をリセットしたい」とき
何が起きる?
- 通常
applyでスキップされる差分も強制適用 - ホーム側のローカル変更は失われる (取り戻せない場合あり)
注意: 実行前に chezmoi diff で何が起きるか必ず確認すること。
🟡 限定的な副作用 (chezmoi の内部状態リセット)
いつ使う?
run_once_*スクリプトを 再度実行したい とき- パッケージリストを変えた後、再インストールしたいとき
何が起きる?
- chezmoi が「実行済」と覚えている
run_once_*スクリプトの記録を削除 - 次の
chezmoi applyで全 run_once スクリプトが再実行される
例
chezmoi state delete-bucket --bucket=scriptState
chezmoi apply -v
# → 全 run_once スクリプトが再走行🟡 限定的な副作用
いつ使う?
- ファイルを chezmoi 管理から外したいとき (ファイル自体は残す)
何が起きる?
- ソース側 (
~/dotfiles/) からファイルが消える - ターゲット側 (
~/.foo) のファイルは残る (ただの普通のファイルになる)
例
chezmoi forget ~/.gitconfig困ったときに「何を叩けばいいか」のクイックリファレンス。
| 状況 | コマンド |
|---|---|
| 新規マシンに導入したい (mac/Ubuntu/WSL) | sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply reisuta |
| 新規マシンに導入したい (Arch) | sudo pacman -S just git chezmoi && git clone <repo> ~/dotfiles && cd ~/dotfiles && just install |
| 設定変更を確認したい | chezmoi diff |
| ホーム側を最新化したい | chezmoi apply -v |
| リモートの変更を取り込みたい | chezmoi update -v |
| ファイルを編集したい | chezmoi edit ~/.zshrc (or 直接 ~/dotfiles/dot_zshrc を編集) |
| 環境が正しいか確認したい | just doctor |
| 利用可能なタスクを思い出したい | just |
| Neovim プラグインを更新したい | just plugins-update |
| ホーム既存ファイルを管理下に追加 | chezmoi add ~/.foo |
| パッケージリスト変更後、再インストール | chezmoi state delete-bucket --bucket=scriptState && chezmoi apply -v |
| brew で入れたツールを Brewfile に反映 | just brewfile-dump (macOS) |
| 設定が壊れた、リセットしたい | chezmoi diff で確認 → chezmoi apply --force |
┌─ chezmoi ──────────────────────────────────────────────────┐
│ 唯一のセットアップ/運用ツール。 │
│ sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply reisuta
│ 1コマンドで chezmoi 自身のダウンロード + リポジトリ clone + │
│ パッケージインストール + 設定配置 + シェル切替まで完了。 │
│ 日常コマンド: chezmoi diff / apply / update / edit │
└─────────────────────────────────────────────────────────────┘
↑ 一部のメタタスクで使う
┌─ just ─────────────────────────────────────────────────────┐
│ chezmoi の単純ラッパーは含めない。代わりに以下を担当: │
│ - just install : 初回セットアップ (Arch で便利) │
│ - just doctor : 環境健全性チェック │
│ - just lint : シェルスクリプト品質チェック │
│ - just plugins-update: Neovim プラグイン同期 │
│ - just brewfile-dump: 現環境から Brewfile 再生成 (macOS) │
│ - just backup : 現状をスナップショット │
└─────────────────────────────────────────────────────────────┘
~/dotfiles/
├── README.md ← このファイル
├── justfile ← 非ラッパー系タスク集
├── .chezmoi.toml.tmpl ← chezmoi 自身の設定 (symlink モード等)
├── .chezmoiignore.tmpl ← OS 別の除外ルール
├── .gitattributes ← Linguist 言語検出の上書き
├── Brewfile ← macOS パッケージリスト
├── archpkgs.txt ← Arch ベースパッケージ
├── archpkgs-gui.txt ← Arch GUI (WSL では除外)
├── aptpkgs.txt ← Ubuntu/Debian ベースパッケージ
│
├── dot_zshrc → ~/.zshrc
├── dot_tmux.conf → ~/.tmux.conf
├── dot_config/
│ ├── nvim/ → ~/.config/nvim/
│ ├── kitty/ → ~/.config/kitty/ (Linux ネイティブのみ)
│ ├── wezterm/ → ~/.config/wezterm/ (macOS のみ)
│ ├── starship.toml → ~/.config/starship.toml (Starship プロンプト)
│ └── redshift.conf → ~/.config/redshift.conf (Linux ネイティブのみ)
├── private_dot_local/bin/
│ ├── executable_win-clip-copy.sh → ~/.local/bin/win-clip-copy.sh (WSL のみ)
│ ├── executable_claude-code-status → ~/.local/bin/claude-code-status (Claude Code statusLine)
│ └── executable_tmux-claude-status → ~/.local/bin/tmux-claude-status (tmux ステータスバー)
│
├── run_once_before_install-packages.sh.tmpl ← chezmoi が apply 前に1度だけ実行
├── run_once_after_change-shell.sh.tmpl ← chezmoi が apply 後に1度だけ実行
│
└── scripts/
└── doctor.sh ← `just doctor` の実体
| プレフィックス | 効果 |
|---|---|
dot_<name> |
~/.<name> に配置 |
private_<name> |
パーミッション 0600 |
executable_<name> |
実行権限を付与 |
run_once_<...>.tmpl |
1度だけ実行されるスクリプト (内容変更で再実行) |
run_once_before_<...> |
apply 前に実行 |
run_once_after_<...> |
apply 後に実行 |
組み合わせ可: private_executable_dot_foo のように複数プレフィックスを連結できる。