Imported from pranc1ngpegasus/dotfiles (
AGENTS.md). Install upstream withnpx skills add pranc1ngpegasus/dotfiles. Copyright stays with the author.
AGENTS.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. このファイルはコーディングエージェントのためのクイックリファレンスです。詳細はdocs/を参照してください。
Overview
Nix Flakes ベースの macOS (aarch64-darwin) dotfiles リポジトリ。nix-darwin と home-manager を使い、システム設定からユーザー環境まで宣言的に管理する。
Build Commands
# flake.lock の更新
nix flake update
# システム全体の再ビルド・適用
darwin-rebuild switch --flake .#M4MacBookAir
# ビルドのみ (適用しない)
darwin-rebuild build --flake .#M4MacBookAir
# テストビルド (適用しない、プロファイルにも追加しない)
darwin-rebuild test --flake .#M4MacBookAir
# Nix コードのフォーマット
nix fmt
Architecture
エントリーポイントは flake.nix で、主要な構成要素は以下の 4 層になっている。
flake/は Flake の出力に関する定義を分離する場所で、hosts.nixがホストとモジュールの対応付け、darwin-configurations.nixがdarwinConfigurationsの生成、formatter.nixが formatter 出力を担当するhosts/はホスト固有の設定 (hostname, user 等) を置く場所modules/は nix-darwin のシステム設定 (firewall, keyboard, dock, tailscale 等) をまとめる場所で、プラットフォーム非依存の設定はcommon.nix、macOS 固有の設定はdarwin/に置くhome/は home-manager によるユーザー環境で、base/が全プラットフォーム共通、darwin/がプラットフォーム固有
詳細は docs/architecture.md を参照。
Key Design Decisions
- nixpkgs は unstable ブランチを使用している
- Neovim nightly は neovim-nightly-overlay 経由で取得し、
modules/darwin/neovim-overlay.nixの overlay でpkgs.neovim-unwrappedを nightly ビルドに差し替えている - GitHub への認証は
gh auth git-credentialによる HTTPS 認証を使う。Git の SSH 署名は nix-secure-enclave-key で Secure Enclave 内の鍵を使って行い、秘密鍵はディスクに置かない - Docker ランタイムには colima を使用している
- CLI パッケージ一覧は
home/base/programs/packages.nixに集約している (LSP など editor 用のパッケージはhome/base/editor.nixに置く) - Nix コードのフォーマットには nixfmt を使用している
Conventions
- Nix モジュールを追加したら、対応する
default.nixの imports にも追加する - ホスト固有の設定は
hosts/<hostname>.nixに配置し、flake.nixのdarwinConfigurationsにエントリーを追加する - 1 つの設定しか持たないディレクトリは作らず、関心ごとをファイルとして並べる
- プラットフォーム共通の設定は
home/base/に、プラットフォーム固有の設定はhome/darwin/に配置する flake.lockは VCS で管理し、更新時は差分をコミットする
Writing Rules
ドキュメントやコメントを書くときは以下のルールを守ること。
- 日本語として自然な文章で書く。体言止めや電報的な箇条書きは避け、述語のある文にする
- Markdown の太字強調 (
**...**) は使わない。強調が必要な場合はバッククォートやそのままの表現で十分に伝わるよう工夫する - 図を描きたいときは ASCII art ではなく mermaid を使う