k1000dai の dotfiles です。
現在の主入口は script/setup.sh です。セットアップ方式は次の優先順で自動選択されます。
nixが入っていれば nix backend を選び、home-manager switch --flakeで適用nixが入っていなければ、対応環境かつsudoが使える場合にmulti-user nixを install するか確認- Linux で install を選ばない、または
multi-user nixを使えない環境ならpixiベースの非 sudo フローへ fallback
script/setup.sh は初回導入と設定の再適用に使います。既存の flake.lock を使い、導入済みの AI CLI や Neovim plugin を更新せず、不足分を導入します。
script/update.sh は依存を更新するときに使います。nix の install は提案しません。nix 環境では flake update + home-manager switch --flake を実行し、Linux で nix がなければ pixi 側の symlink 再生成と pixi global sync を実行します。
nixが使える環境ではhome-managerを優先する- 非 sudo 環境では
pixi globalと symlink で運用できるようにする - 既存ファイルに衝突した場合は
*.bak.<timestamp>に退避してからリンクする - macOS は
nix/home-managerを基本経路にする - Linux の非 sudo 環境は
pixi globalと symlink で運用できるようにする
| 環境 | system | backend |
|---|---|---|
| macOS Apple Silicon | aarch64-darwin |
nix / home-manager |
| Ubuntu / Linux | x86_64-linux |
nix または pixi (config/pixi/manifests/pixi-global-linux.toml) |
この repo を clone して移動します。
git clone git@github.com:k1000dai/dotfiles.git ~/.dotfiles
cd ~/.dotfiles初回セットアップと、取得済みの設定を再適用するときは次を実行します。
./script/setup.shこのスクリプトは backend に応じて次を行います。
nixがあればそれを使うhome-managerCLI が必要nixがなければ、条件を満たすときだけmulti-user nixinstall を提案する- lockfile の更新を禁止して
home-manager switch --flake ".#<target>"で Home Manager 設定を反映 - repo 管理の npm global CLI の不足分を
~/.localに導入する
この repo では pixi backend は Linux 向けです。macOS では nix / home-manager を使います。
uvを~/.local/binに installpixiを~/.pixi/binに install- dotfiles を
~/.configや~/.zshrc/~/.bashrc/~/.gitconfigへ symlink ~/.pixi/manifests/pixi-global.tomlを repo 内 manifest にリンクpixi global syncを実行して CLI ツール群を導入nvim --headless "+Lazy! install"を実行して不足する Neovim plugin を導入- repo 管理の npm global CLI の不足分を
~/.localに導入する
セットアップ後は新しい shell を開くか、必要なら次を実行します。
source ~/.zshrcnix が未導入のとき、確認を出さずに pixi へ寄せたいとき:
INSTALL_NIX=0 ./script/setup.shLinux で常に pixi backend を使いたいとき:
BOOTSTRAP_BACKEND=pixi ./script/setup.shnix install を確認なしで試したいとき:
INSTALL_NIX=1 ./script/setup.shLinux の pixi フローで変更確認だけしたいとき:
DRY_RUN=1 BOOTSTRAP_BACKEND=pixi ./script/setup.shLinux の pixi フローで uv / pixi の再 install を避けたいとき:
SKIP_TOOL_INSTALL=1 BOOTSTRAP_BACKEND=pixi ./script/setup.shLinux の pixi フローで link の再生成だけ先にやり、pixi global sync は後で回したいとき:
SKIP_PIXI_SYNC=1 BOOTSTRAP_BACKEND=pixi ./script/setup.shSKIP_PIXI_SYNC=1 のときは Neovim plugin の headless sync もスキップされます。
依存を更新したい端末で次を実行します。設定だけの反映には setup.sh を使ってください。
./script/update.shbackend ごとの動作は次の通りです。
nixbackend:nix flake update nixpkgsのあとhome-manager switch --flakeで再適用pixibackend: Linux で symlink を再生成し、最新 manifest に合わせてpixi global syncと Neovim plugin sync
update.sh は nix 未導入時に install 確認を出しません。Linux ではそのまま pixi 側の更新へ進み、macOS では nix を用意してから再実行してください。
複数端末では、Nix の依存更新を一つの変更として検証・共有し、各端末で同じ commit を取得して setup.sh を実行します。pixi は manifest に環境を合わせるため、指定が変われば既存環境も変更します。npm の明示バージョン指定も適用対象です。AI CLI の初回導入や各ツール自身の自動更新は別なので、同じ dotfiles commit が全 CLI の同一バージョンを保証するわけではありません。
nix backend は home-manager CLI を前提にします。setup.sh 実行時に home-manager が見つからない場合は、Home Manager の standalone + flakes の公式手順を確認して導入してから再実行してください。
- Home Manager installation: https://github.com/nix-community/home-manager#installation
pixi 側で差分確認だけしたい場合:
DRY_RUN=1 BOOTSTRAP_BACKEND=pixi ./script/update.shmanifest は次にあります。
config/pixi/manifests/pixi-global-linux.toml
現在は主に以下を pixi global で管理します。
- shell / CLI:
zsh,fzf,ripgrep,bat,zoxide,tmux,yazi,wget,pueue,fd-find - git 周辺:
git,git-lfs,gh,ghq,lazygit - Python 周辺:
python,uv,ruff - agent hooks:
jq,pre-commit(各 repo の lint / test コマンドは別途その環境で用意) - editor / LSP 周辺:
nvim,node,bash-language-server,dockerfile-language-server,go,gopls,lua-language-server,marksman,taplo,ty,typescript-language-server,clangd,vscode-langservers-extracted,yaml-language-server
次のようなものは pixi global manifest にはまだ寄せていません。
unar(conda-forgeに同名 package がないため。必要なら nix 側か system package、またはp7zip/libarchive系の代替 CLI を使う)rust-analyzer- フォントや GUI アプリ
- sudo や system package manager が必要なもの
npm -g install で管理したい CLI は次で管理します。
config/npm/npm-global-packages.txt
この manifest は setup.sh / update.sh から npm install -g --prefix ~/.local ... で適用されます。setup.sh はバージョン無指定の導入済みパッケージを保持し、不足分と明示したバージョン指定を適用します。update.sh は manifest 全体を同期します。npm の default prefix は使わず、nix / pixi の管理領域を汚さないように ~/.local へ固定しています。
現在の管理対象:
czg
AI CLI は公式が配布する standalone installer で ~/.local/bin に導入します。いずれも script/lib/bootstrap-common.sh にあり、setup.sh は既存の CLI を保持して不足分だけを導入し、update.sh は導入・更新を行います。installer は一時ファイルへのダウンロードが完了してから実行し、成功・失敗にかかわらず削除します。取得にはリトライとタイムアウトを設定しています。
| CLI | 関数 | installer | 導入先 |
|---|---|---|---|
claude |
sync_claude_code |
curl -fsSL https://claude.ai/install.sh | bash |
~/.local/bin/claude |
codex |
sync_codex |
curl -fsSL https://chatgpt.com/codex/install.sh | sh |
~/.local/bin/codex |
agy |
sync_antigravity |
curl -fsSL https://antigravity.google/cli/install.sh | bash |
~/.local/bin/agy |
herdr |
sync_herdr |
curl -fsSL https://herdr.dev/install.sh | sh |
~/.local/bin/herdr |
reason |
sync_reason_network |
curl -fsSL https://reasonmachines.com/install.sh | bash -s -- network join '<link>' |
~/.local/bin/reason |
-
@anthropic-ai/claude-code/@openai/codexは npm 側では管理しません。既存の npm 版から standalone 版への移行はupdate.shで行います。config/npm/npm-global-packages.txtに戻さないでください。 -
codex/agy/herdrは nix (pkgs.codex/pkgs.herdrなど) でも入れません。home.nixの該当行はコメントアウトしてあります。 -
codex installer は
~/.local/binが PATH に無いと shell profile (~/.zprofileなど) に PATH ブロックを追記するため、sync_codexは installer 実行前に PATH を通します。またCODEX_NON_INTERACTIVE=1を渡してプロンプトを抑止します。 -
update.shでは、claudeは~/.local/bin/claudeがあれば、そのバイナリのupdateを実行します。PATH 上の別のインストールは更新対象にしません。 -
update.shでは、codexは 公式の更新手順 と同じく installer を再実行します。 -
update.shでは、agy(Antigravity CLI) は~/.local/bin/agyがあれば、そのバイナリのagy updateを実行します。PATH 上の別バイナリや symlink は更新対象にせず、導入先が symlink の場合は standalone installer で置き換えます。初回はagyを対話実行して Google アカウントでログインしてください。 -
update.shでは、herdrは導入先のバイナリでherdr updateを実行します。公式の注意事項 に従い、PATH 上の別バイナリや package manager を指す symlink は更新対象にせず、導入先が symlink の場合は standalone installer で置き換えます。 -
HERDR_INSTALL_DIRを指定した場合、インストール・更新の両方で同じディレクトリを使います。更新時も同じ値を指定してください。省略時は~/.local/binです。更新に失敗した場合はエラーを返し、別チャネルへの再インストールは行いません。 -
reason(Reason Network) の招待リンクは秘密情報で、この repo は public なのでコミットしません。未導入の場合、setup.shを端末から実行すると join link の貼り付けを求めます (Enter でスキップ)。link を受け取ったときだけ installer を実行し、CLI の導入とreason network joinを行います。update.sh、DRY_RUN=1、非対話実行では確認しません。事前に渡すこともできます。REASON_NETWORK_JOIN_URL='https://reasonmachines.com/network/join/#rn1-...' ./script/setup.sh -
reason導入済みの場合、network who --jsonで team を確認し、未参加のときだけreason network joinを実行します。CLI は Reason Network の background process が 1 日 1 回ほど更新します。reason updateは desktop components (macOS で約 325 MB) も導入するため使いません。 -
SKIP_TOOL_INSTALL=1で 5 CLI のインストール・更新をスキップできます。
macOS / Linux の Home Manager と Linux pixi で同じ共通設定を適用します。
- 共通指示は
config/ai-agents/INSTRUCTIONS.md。Claude Code と Codex の両方で repo の編集を即反映します。 - Claude Code の
settings.jsonはscript/lib/sync-claude-settings.shで~/.claude/settings.jsonにマージします。共有ファイルに記載したキーを優先し、記載のないローカルキーは保持します。オブジェクトは再帰的にマージし、同じキーの配列は共有値に置き換えます。適用先は書き込み可能な通常ファイルなので、Claude の設定保存で repo が書き換わることはありません。 - 既存の Claude 設定リンクも通常ファイルへ移行します。変更前の内容は
settings.json.bak.<timestamp>に保存し、同名のバックアップがあれば連番を付けます。内容が変わらない再適用ではバックアップを増やしません。JSON が不正な場合は既存ファイルを変更せず失敗します。 autoMode.environmentなどの環境情報、project trust、認証情報、端末固有の絶対パスは共通設定に含めません。共有設定にautoMode.environmentがあれば適用を拒否します。プロジェクト固有の設定は各 repo の.claude/settings.json、個人的な上書きは Git 管理外の.claude/settings.local.jsonを使います。- Claude Code の skills は
~/.claude/skillsにリンクします。アプリが生成するskills/synced/は Git の管理対象外です。 - 共通の
sanitize-artifactsskill は Codex の ユーザー用 skills ディレクトリ~/.agents/skills/sanitize-artifactsにも個別リンクします。既存の他の skills はそのまま使えます。 - Codex の既定設定
config/codex/config.toml(modelgpt-6-astra、reasoningxhigh、service tierfast、permission は auto:on-request+workspace-write+ auto-review) は、~/.codex/config.tomlが無いときだけ setup / update がコピーします。Codex は project trust や desktop の状態を同じファイルに書き込むので、リンクはせず既存ファイルも上書きしません。 - Antigravity CLI の既定設定
config/antigravity/settings.json(agentMode: accept-edits、model: Gemini 4 Argon (High)) も同様に~/.gemini/antigravity-cli/settings.jsonが無いときだけコピーします。CLI は trusted workspace やモデル選択を同じファイルに書き込みます。
Claude Code をオーケストレータとし、Codex CLI と Antigravity CLI を skill の run.sh から直接呼びます。並列に回すときは Claude の Bash ツールで run_in_background を使います (Claude 側に中継用の subagent は置きません)。各 CLI は公式バイナリを非対話モードで起動するので、それぞれのサブスクリプション枠 (ChatGPT / Google AI Pro + Antigravity) を規約の範囲内で使い、Claude の枠は消費しません。
| 部品 | パス | 役割 |
|---|---|---|
skill delegate-codex |
config/ai-agents/skills/delegate-codex/ |
run.sh が codex exec -p subagent -o <file> を実行し、最終メッセージだけを stdout に返す |
skill delegate-antigravity |
config/ai-agents/skills/delegate-antigravity/ |
run.sh が agy --output-format=json --mode=accept-edits --dangerously-skip-permissions --print=<task> を実行し、.response を stdout に返す。モデルは -m が無ければ agy の settings.json の model |
Codex profile subagent |
config/codex/subagent.config.toml → ~/.codex/subagent.config.toml |
approval_policy = "never"、sandbox_mode = "danger-full-access"、reasoning high。~/.codex/config.toml の上に layer される |
- subagent の権限は意図的に強くしています (Codex はサンドボックスなし、agy は permission prompt をスキップ)。結果の検証は呼び出し側の Claude が行います。レビューや調査だけのときは
run.sh -s read-only(Codex) /run.sh -M plan(agy) を使います。agy のplanは--sandboxを付けますが read-only を強制しないため、git 管理下で作業ツリーが変わるとrun.shが警告します。 - Codex の
-tは GNUtimeoutに頼らず、run.sh内の watchdog がプロセスグループごと止めます。進捗は一時ログに書き、失敗時だけ末尾とパスを stderr に出します。 - agy に渡す 64 KiB を超えるタスクは引数長の上限を避けるため一時ファイル経由で渡します (
planでは拒否)。 run.shは単体でも使えます。run.sh -C /abs/path - <<'EOF' ... EOFのように stdin でタスクを渡します。- 続きを頼むときは
run.sh -r <id>で前回の会話を再開します。Codex は session id、agy は conversation id を stderr に出します (-r lastは直近の会話ですが、並列実行中は曖昧になります)。 - Claude Code の
permissions.allowにrun.shとcodex exec/agy --printを登録しているので、確認なしで呼べます。 - skills ディレクトリは Codex 側には
sanitize-artifactsだけをリンクしているため、Codex が自分自身や agy を再帰的に呼ぶことはありません。 - hooks は
~/.claude/hooks/にファイル単位でリンクします。herdr の生成管理 hook と独自のpre-commit-stop.shを分けています。 - Stop hook はイベントの
cwdから Git root を解決し、.pre-commit-config.yamlと変更がある場合だけ検査します。サブディレクトリからの起動にも対応し、hook による継続時の再帰実行を避けます。
Codex desktop の custom pet「ヤチヨ」も config/codex/pets/ で管理しています (~/.codex/pets へ out-of-store link)。
Python 系の standalone CLI は uv tool で ~/.local/bin に導入します。
uv tool install huggingface_hubhuggingface_hub(hfコマンド)
| パス | 内容 | リンク先 / 反映方法 |
|---|---|---|
script/setup.sh / script/update.sh |
統合 bootstrap / 更新反映 | - |
flake.nix, home*.nix |
Nix / Home Manager 設定 | home-manager switch --flake |
config/nvim |
Neovim 設定 | ~/.config/nvim |
config/lazygit |
Lazygit 設定 | ~/.config/lazygit |
config/ghostty |
Ghostty 設定 | ~/.config/ghostty |
config/wezterm |
WezTerm 設定 | ~/.config/wezterm (nix のみ) |
config/herdr/config.toml |
herdr 設定 (本体は sync_herdr で導入) |
~/.config/herdr/config.toml (nix / pixi ともファイル単位リンク。~/.config/herdr/ はランタイム状態を持つためディレクトリごとリンクしない) |
config/yabai / config/skhd |
macOS の WM / hotkey | ~/.config/yabai / ~/.config/skhd |
config/claude/settings.json |
Claude Code の共通設定 | ~/.claude/settings.json (Home Manager activation / pixi bootstrap でマージ。ローカル状態は repo に戻さない) |
config/claude/hooks/ |
Claude Code hooks | ~/.claude/hooks/*.sh (ファイル単位の out-of-store link) |
config/antigravity/settings.json |
Antigravity CLI の既定設定 (agentMode, model) |
~/.gemini/antigravity-cli/settings.json (存在しないときだけコピー。以後は CLI が書き換えるローカルファイル) |
config/ai-agents/ |
AI agent 共通指示 (INSTRUCTIONS.md) と skills (sanitize-artifacts, delegate-codex, delegate-antigravity) |
~/.claude/CLAUDE.md, ~/.claude/skills, ~/.agents/skills/sanitize-artifacts (out-of-store link) |
config/codex/AGENTS.md |
共通指示 (config/ai-agents/INSTRUCTIONS.md) への symlink |
~/.codex/AGENTS.md (out-of-store link で編集即反映) |
config/codex/config.toml |
Codex の既定設定 (model / reasoning / service tier / permission) | ~/.codex/config.toml (存在しないときだけコピー。以後は Codex が書き換えるローカルファイル) |
config/codex/subagent.config.toml |
subagent 用 Codex profile (codex exec -p subagent) |
~/.codex/subagent.config.toml (out-of-store link) |
config/codex/pets/ |
Codex desktop の custom pet (<id>/pet.json + spritesheet.webp) |
~/.codex/pets (out-of-store link。Codex で作成/再生成した pet はそのまま repo に入る。どの pet を使うかは ~/.codex/config.toml の [desktop] selected-avatar-id = "custom:<id>" で、こちらは未管理) |
config/git/shared.gitconfig |
Git 共通設定 (user / alias / ghq / lfs) | nix: programs.git.includes / pixi: root .gitconfig から include |
.gitconfig |
pixi backend 用エントリ (共通設定を include + credential) | ~/.gitconfig (pixi のみ) |
config/pixi/manifests/ |
Linux 用 pixi global manifest |
~/.pixi/manifests/pixi-global.toml |
config/npm/npm-global-packages.txt |
npm global CLI manifest | npm install -g --prefix ~/.local |
.zshrc, .zshrc.d, .bashrc |
shell 設定 | nix: zsh は .zshrc_extra 経由 / pixi: 直接リンク |
.tmux.conf |
tmux 設定 | ~/.tmux.conf |
keyboard/ |
Vial キーボード設定 (cornix) のエクスポート | Vial から手動で読み込み |
エージェント共通の指示は config/ai-agents/INSTRUCTIONS.md、この repo 固有のルールはルートの AGENTS.md に記載します。config/claude/CLAUDE.md と config/codex/AGENTS.md は共通指示への symlink なので、本文は共通ファイルを編集してください。
~/.dotfiles は常用設定の適用元に固定し、変更はタスク別の worktree / branch で行います。
git -C ~/.dotfiles worktree add -b fix/example ../dotfiles-exampleworktree で検証した変更を常用 checkout に取り込み、その端末の ~/.dotfiles から setup.sh を実行します。各端末の clone 間では commit / PR を共有します。worktree は HOME を隔離しないため、作業用 worktree から本物の HOME に対して setup / update を実行しないでください。pixi のリンク先が作業用 worktree に切り替わり、他の agent にも影響します。テストには一時 HOME と mock、変更確認には DRY_RUN=1 を使います。
同時実装はタスクごとに担当と branch を分け、共有ファイルを変更する担当を一人に決めます。引き継ぎには repo・branch・commit・変更範囲・検証結果・次の作業を残します。
repo 自体のチェックは pre-commit で行います。
pre-commit run --all-files
bash script/tests/test-bootstrap.sh
bash script/tests/test-agent-hooks.sh
bash script/tests/test-claude-settings.shnixfmt(nix ファイル)、shellcheck(shell script)、標準 hooks (行末空白・EOF 改行など)nixfmt/shellcheckは nix backend ではhome.nixで導入されます- Claude Code では、設定ファイルと作業ツリーの変更がある場合に Stop hook が pre-commit を実行します。Codex などではこの hook は動かないため、必要なチェックを別途実行します。
- shell 回帰テストは一時 HOME と mock を使い、installer の失敗・更新先の選択・Linux のリンクと dry-run・Stop hook を検証します。実際のインストールやネットワークアクセスは行いません。
CI (GitHub Actions, .github/workflows/build.yml) は push / PR ごとに darwin / linux の homeConfigurations をビルドし、依存の破損を早期検知します。
Nix / Home Manager の設定ファイルは引き続き repo に含めています。
flake.nixhome.nixhome-darwin.nixhome-linux.nix
nix が使える環境ではこちらが第一経路です。macOS は multi-user nix を優先し、Linux の HPC や非 sudo 環境では pixi backend を明示的に使うか、nix install をスキップして fallback させます。
