Skip to content
topi-logPublic

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

macOS の設定ファイルを chezmoi の symlink モードで 管理するリポジトリ。

仕組み

実配置先(~/.config/wezterm/wezterm.lua など)がこのリポジトリ内のファイルへの シンボリックリンクになる。実ファイルを編集すればリポジトリが即座に更新されるため、 変更を「取り込む」操作は不要。

ただし一部のファイルは chezmoi の仕様により実ファイルとして書き出される。 その場合はリポジトリ側を編集して chezmoi apply する向きで運用する。

管理対象

配置しているファイルと、あえて管理していないファイルは 管理対象ファイル にまとめてある。 実際に配置されているものは chezmoi managed でも確認できる。

セットアップ(新マシン)

brew install chezmoi jq fzf
git clone git@github.com:topi-log/dotfiles.git ~/workspace/dotfiles

~/.config/chezmoi/chezmoi.toml を手で作る。chezmoi init は使わない (後述)。

mkdir -p ~/.config/chezmoi
cat > ~/.config/chezmoi/chezmoi.toml <<'TOML'
mode = "symlink"
sourceDir = "~/workspace/dotfiles"

[data]
    # Claude Code で有効にするプラグイン
    claudePlugins = { "ruby-lsp@claude-plugins-official" = true }

    # Claude Code の追加マーケットプレイス
    claudeMarketplaces = {}
TOML

公開したくない設定(社内マーケットプレイスなど)はこの [data] に書く。 このファイルは chezmoi の管理対象外なのでリポジトリには入らない。

配置する。

chezmoi diff                 # 何が変わるか必ず確認する
chezmoi apply

初回の chezmoi apply では、カスタム版lumenを自動ビルドし、 ~/.local/bin/lumen-custom と Cmd+Shift+R のレビュー起動設定を導入する。 不足しているRust、GitHub CLI、WezTermはHomebrewでインストールする。 初回のビルドには数分かかる。実行時にRustは不要。 WezTermが使うHackGen Consoleが無い場合は、その場で導入するか聞かれる (断ってもフォールバックフォントで動く)。

lumen本体の固定コミットと、このリポジトリに同梱したカスタマイズ差分から 構築するため、別途lumenのローカルリポジトリを用意する必要はない。 ソースとCPUアーキテクチャの記録が一致している場合、再ビルドを省略する。 手動で再確認する場合は ~/.config/scripts/install-lumen-custom を実行する。 GitHubレビューの取得には別途 gh auth login が必要。

常時ガイドの個別設定は各PCの ~/.config/lumen/review-shortcuts.json に保存される。 カスタマイズの更新方法は lumenの導入・更新 を参照。

wlay、cst、denv は ~/.config/scripts に置かれる。このディレクトリは 管理下の ~/.zprofile が PATH に追加するので、追加の設定は要らない。

chezmoi init を使わない理由

chezmoi init は source 内の .chezmoi.toml.tmpl から ~/.config/chezmoi/chezmoi.toml を 上書き生成 する。このリポジトリは public なので [data] の実際の値をテンプレートに書けず、init を実行すると 手で入れた設定が失われる。そのため設定テンプレートを置かず、config は 手管理にしている。

開発環境の起動管理(denv)

ローカルで動かす開発環境を登録しておき、起動状況とポートを見ながら 起動・停止する。denv で一覧が開く。

NAME               PORT           STATUS  DIR
web-app            3000           ● up    ~/workspace/web-app
admin              -              ○ down  ~/workspace/admin
キー 動作
a / e / d 環境を追加 / 変更 / 削除
enter 起動中なら停止、停止中なら起動
l ログを追従表示
? ヘルプ

a を押すと名前・ディレクトリ・起動コマンド・停止コマンドを順に聞かれる。 ポートは登録せず、起動したプロセスが実際に LISTEN しているものを表示する。

同じ操作は denv start <name> のようにコマンドでもできる。 残りのキーと詳細は denv help か denv を参照。

日常の操作

やりたいこと コマンド
配置する chezmoi apply
配置前に差分を見る chezmoi diff
新しいファイルを管理下に入れる chezmoi add ~/.config/foo
実ファイルの変更を取り込む chezmoi re-add <path>(テンプレートには使えない)
リポジトリ側を編集する chezmoi edit <path>
管理下のファイルを一覧する chezmoi managed

symlink で管理しているファイルは、実ファイルを編集すればそのまま リポジトリへの編集になる。git diff で確認してコミットする。

settings.json だけ編集の向きが逆

~/.claude/settings.json はテンプレートなので symlink にならない。 Claude Code が /model や /config でこのファイルを書き換えると、 リポジトリとの差分が生まれる。chezmoi diff で気づけるので、変更を リポジトリ側に写して chezmoi apply する。

chezmoi diff                              # 差分を確認
chezmoi edit ~/.claude/settings.json      # ソースの .tmpl を開く
chezmoi apply

chezmoi re-add はテンプレートには使えない(chezmoi の仕様)。

シェル設定の役割分担

zsh は読み込むタイミングが違う設定ファイルを持つ。役割を混ぜると設定同士が 衝突するため、次のように分けている。

ファイル 読まれるタイミング 置くもの
~/.zprofile ログインシェルで 1 回 環境変数と PATH
~/.zshrc 対話シェルを開くたび エイリアス、プロンプト、補完、シェル関数

環境変数は export すれば子プロセスに継承されるので .zprofile で一度 設定すれば足りる。一方でエイリアスやプロンプトは継承されないため、対話シェル ごとに .zshrc で設定し直す必要がある。

macOS の端末(Terminal.app、iTerm、wezterm)は既定でログインシェルとして 起動するため両方が読まれる。そのためどちらに書いても動いてしまうが、 VS Code の統合ターミナルのような非ログイン対話シェルでは .zshrc だけが 読まれるので、この分担を守らないと環境によって挙動が変わる。

マシンごとに導入状況が違うツール(nodenv、rbenv、PostgreSQL、Flutter、Go、 VS Code)は存在チェックを通してから設定する。入っていないマシンでは黙って スキップされるので、同じ設定ファイルをどのマシンでも使える。

git の補完スクリプト

.zshrc は ~/.zsh/git-completion.bash があれば git の補完に使う。この ファイルは git 公式のもので GPL-2.0 なので、このリポジトリでは配布していない。 必要なら取得する(なくても補完以外は動く)。

mkdir -p ~/.zsh
curl -o ~/.zsh/git-completion.bash \
  https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o ~/.zsh/_git \
  https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

プロンプトの git ブランチ表示は zsh 組み込みの vcs_info を使っているため、 外部スクリプト(git-prompt.sh)は不要。

ディレクトリのパーミッション

~/.config と ~/.config/karabiner 配下は 0700。chezmoi のディレクトリの 既定は 0755 なので、そのままでは apply でパーミッションが緩む。これを防ぐため source 側のディレクトリに private_ 接頭辞をつけている (private_dot_config、private_karabiner など)。

注意

~/workspace を移動・整理すると全ての symlink が切れる。 source directory がこのリポジトリの場所を指しているため。切れた場合は ~/.config/chezmoi/chezmoi.toml の sourceDir を新しいパスに書き換えて chezmoi apply を再実行する。

ドキュメント

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages