このファイルは このリポジトリ自体を編集する AI agent 向けです。全プロジェクト共通のコーディングルールは home/ai/AGENTS.md(~/.codex/AGENTS.md 等として配布される)にあり、役割が異なります。混同しないでください。
- パス:
~/.config/nix-darwin(GitHub:k-adachi-01/dotfiles, Public リポジトリ) nix-darwin+home-managerによる macOS 単一ホスト構成(darwinConfigurations.macbook,aarch64-darwin, ユーザーadachi固定)- NixOS では user-level Home Manager profile(
homeConfigurations."adachi@nixos")だけを提供する。NixOS の boot/hardware/service/firewall/user account は/etc/nixosの責務とし、この public repo へ入れない - Public リポジトリであることを常に意識する: 個人パス・第三者名・APIキー・タイムスタンプ付きランタイム状態を絶対にコミットしない
このデバイスは system activation に root 権限を要求する。
sudo darwin-rebuild switch --flake ~/.config/nix-darwin#macbookdarwin-rebuild switch で macOS の App Management プロンプトが毎回出る場合は、まず Terminal.app から実行する(WezTerm / Cursor 統合ターミナルは TCC の身元不一致で許可が永続化しにくい)。GUI アプリ(Zed / WezTerm 等)は Homebrew cask で管理し、/Applications/Nix Apps に Nix 由来の .app を置かない(nix/darwin.nix 参照)。
プレーンな darwin-rebuild switch は system activation must now be run as root で失敗する。変更を加えたら必ず上記コマンドで適用し、git status/git diff を確認してからコミットする。
再起動後に nix や Nix 由来 CLI が消えたら、store が消えたのではなく APFS ボリューム Nix Store が /nix に乗っていない。Nix 自体は使えないので次を実行する(再インストールや deleteVolume はしない):
/bin/bash ~/.config/nix-darwin/home/bin/nix-store-repair.sh手順の全体は docs/nix-store-recovery.md。bootstrap が再起動で戻る場合は、システム設定 → 一般 → ログイン項目と拡張機能 → バックグラウンドで許可 で sh / Nix / Determinate をオンにする。
ビルドのみ行い適用しない検証(sudo 不要、破壊的変更前に使う):
nix build '.#darwinConfigurations.macbook.system' --no-link| ソース | 生成先 | 方式 |
|---|---|---|
nix/darwin.nix |
macOS system defaults, fonts, system packages | nix-darwin モジュール |
nix/apps.nix |
Homebrew casks/brews(GUI アプリはここ。Zed / WezTerm 含む) | nix-homebrew |
nix/packages.nix |
macOS/NixOS 共有の user-level CLI 一式(.app bundle を持つパッケージは除外) |
macOS system packages / NixOS home-manager packages |
nix/home.nix |
shell/git/direnv/fzf/tmux | home-manager ネイティブ |
nix/nixvim.nix |
Neovim 全設定 | nixvim(Neovim の唯一のソース。home/config/nvim/ のような別ツリーを作らない) |
nix/editors.nix |
VS Code/Cursor/Antigravity/Antigravity IDE の settings.json(クラスA merge、nix/agents/lib.nix を共用) / keybindings.json(home.file symlink、配列トップレベルのため merge 非対応) |
詳細は docs/management-policy.md |
nix/agents/* |
Claude/Codex/Cursor/Kiro の user-level 設定、MCP 定義 | 詳細は docs/management-policy.md |
home/* |
上記から参照される実ファイル本体 | — |
home/zprofile |
~/.zprofile |
out-of-store symlink(/nix 未マウントでも login shell が動く) |
home/bin/nix-store-repair.sh |
~/bin/nix-store-repair |
out-of-store symlink(再起動後の /nix 未マウント復旧。OS ツールのみ) |
.gitleaks.toml |
秘密情報スキャン設定(デフォルトルール拡張、Nix SRIハッシュを許可リスト化) | commit 前 gitleaks protect --staged と CI gitleaks detect の両方が参照 |
statix.toml |
statix lint 設定(repeated_keys を無効化) |
— |
.github/workflows/ci.yml |
push/PR ごとの lint + secret scan | 詳細は本ファイルの「検証コマンド」節 |
Claude Code / Codex / Cursor / Kiro の設定は、docs/management-policy.md が定義する クラスA(宣言データ・merge)/ クラスB(静的アセット・symlink)/ クラスC(ランタイム状態・管理外) の3分類に従う。ツールごとに管理方式を独自に決めない。 新しい設定項目を追加するときは、まず「アプリがそのファイルに書き込むか」を確認し、書き込むならクラスA、書き込まないならクラスBとして扱う。
同ドキュメントの「移行状況」表で各ツールが現在どちらの方式で実装されているかを確認すること。移行完了前のツールは、旧方式(seed-only または Nix store symlink)の制約がまだ有効。
やってはいけないこと:
~/.codex/*,~/.claude/*,~/.cursor/*,~/.kiro/*を直接編集して「設定した」つもりにならない。これらは生成先であり、変更は必ずnix/agents/*またはhome/agents/*に対して行い、sudo darwin-rebuild switchで反映する- 例外: クラスB ファイル(
~/.codex/AGENTS.md、~/.claude/statusline.py、~/.cursor/statusline.sh等)は repo への symlink なので、home/agents/*を編集すれば switch なしで即反映される
- 例外: クラスB ファイル(
- クラスA移行済みのツールで、宣言外キー(アプリが書いた実行時状態)を repo 側の attrset へ無条件にコピーしない。昇格は
agents-diffで確認してから明示的に行う - Codex/Claude Code/Cursor/Kiro の4ツールすべてが統一モデルへ移行済み(PR6〜PR8完了)。
nix/agents/*.nixやhome/agents/*/*を編集したらsudo darwin-rebuild switchだけで自動的に merge/link される。sync-codex-config/sync-kiro-configのような手動再同期スクリプトはもう存在しない - merge は辞書のみ再帰処理する。配列(例: Kiro
permissions.yamlのrules)は宣言側で丸ごと置き換わり、要素単位のマージはしない。配列に対するアプリの追記を保持したくなったら、そのフィールドをクラスCへ動かすことを検討する - クラスBファイルを追加・編集するときは、必ず各
nix/agents/<tool>.nix内のmkLinkヘルパー(config.lib.file.mkOutOfStoreSymlinkのラッパー)経由にする。.source = ../../home/...のような生の Nix パス参照を書くと、eval・build は問題なく通るのに実体は Nix store コピーへ静かに退化し、「repo を編集すれば switch 不要で即反映」という前提が崩れる。過去に.claude/AGENTS.md・.claude/CLAUDE.md・.cursor/AGENTS.md・.agents/AGENTS.mdの4箇所で実際にこれが起きていた(PR11で修正、詳細はdocs/management-policy.md)。新規/既存のクラスBエントリを触ったら.sourceの右辺がmkLink "..."になっているか目視確認すること
- 共有 skills は別リポジトリ
/Users/adachi/agent-skills(private,k-adachi-01/agent-skills)を flake inputpath:/Users/adachi/agent-skillsとして取り込む darwin-rebuildの Nix 評価中に GitHub 認証は不要。新 Mac では~/agent-skillsを clone する bootstrap が必要(詳細はdocs/management-policy.md)~/agent-skills編集後は switch の前にnix flake update agent-skills --flake ~/.config/nix-darwin(またはcd ~/.config/nix-darwin && nix flake update agent-skills)を実行しないとNAR hash mismatchになる。skills-pushが自動で行う
コミット前に必ず確認する:
.aws/,.azure/,.config/gcloud/,.config/gh/hosts.yml,.ssh/,.gnupg/,.env*,*.pem,*.key,auth.json,DOTENV_PRIVATE_KEY*を含めないhome/agents/codex/config.tomlなどクラスAの seed/宣言ファイルに[projects.*]のようなランタイム状態(プロジェクトパス、第三者名を含みうる)やタイムスタンプ付きキャッシュパスを混入させない(詳細はhome/ai/AGENTS.mdの Codex/Kiro 設定運用節)- 迷ったら
docs/management-policy.mdの分類表とクラスC一覧を確認する
git status --short --branch
nix build '.#darwinConfigurations.macbook.system' --no-link # sudo 不要のビルド検証
nix build '.#homeConfigurations."adachi@nixos".activationPackage' --no-link # NixOS user profile 検証
alejandra --check . && statix check . && deadnix --fail . # CI(.github/workflows/ci.yml)と同じ lint
gitleaks protect --staged --config .gitleaks.toml # commit 前の秘密情報チェック
sudo darwin-rebuild build --flake ~/.config/nix-darwin#macbook # 適用前のフル検証
sudo darwin-rebuild switch --flake ~/.config/nix-darwin#macbook
agents-diff # 次の switch での変更点とアプリ所有キーの確認(読み取り専用)CI(GitHub Actions, .github/workflows/ci.yml)は push/PR ごとに lint(alejandra/statix/deadnix)と gitleaks を実行する。フルの nix build/darwin-rebuild build は CI に含めていない。これは必ずローカルで実行すること。
NixOS で通常の開発 CLI を増やす場合は /etc/nixos ではなく nix/packages.nix に追加する。/etc/nixos に置くのは boot/hardware/networking/desktop services/system daemons/firewall と、ログインに必要な最小限の user account 設定だけに限定する。
dotfiles を更新した後は、ユーザーへ確認せず k-adachi-01/dotfiles へ commit・push する(詳細は home/ai/AGENTS.md の dotfiles 管理節)。git 履歴は書き換えない(force-push・rebase -i・reset --hard は使わない)。