Skip to content

feat(nix): 環境構築 Nix 一元化 (Phase A) を統合 (KISSA-20)#18

Merged
gotomts merged 74 commits into
mainfrom
feature/nix-migration-epic
May 13, 2026
Merged

feat(nix): 環境構築 Nix 一元化 (Phase A) を統合 (KISSA-20)#18
gotomts merged 74 commits into
mainfrom
feature/nix-migration-epic

Conversation

@gotomts
Copy link
Copy Markdown
Owner

@gotomts gotomts commented May 13, 2026

Summary

KISSA-20 — 環境構築の Nix 一元化 (Phase A) の epic ブランチを main に統合する PR。

サブ issue (S1〜S14) は各サブ PR で epic に merge commit として積み上げ、S15 は epic ブランチに直接 commit している。

  • 規模: 27 ファイル / +2697 行 / -10 行
  • 構成: nix/{flake.nix, darwin.nix, home.nix, modules/{darwin,home,overlays}/, scripts/} + CLAUDE.md の Nix 環境セクション
  • CI: S14 で追加した nix flake check + default closure build (push: main 限定) が本 PR マージ後に main 上で初回起動する

含まれるサブ issue / 追加コミット

Step サブ PR / commit
Design spec + plan #5
S1 inventory スクリプト + bats テスト #6
S2 flake skeleton + mkHost #15
S3 home-manager packages (CLI 群) #7
S4 home-manager zsh (programs.zsh) #8
S5 home-manager git/starship/yazi/ssh #9
S6 home-manager claude (plugin sync activation) #10
S7 home-manager languages (mise 完全置換) #13
S8 rtk overlay (flake input + buildRustPackage) #11
S9 nix-darwin homebrew (cask + mas + 例外 brew) #12
S11 nix-darwin sudoers/fonts/pam #14
S13 CLAUDE.md に Nix 環境セクション追記 #17
S14 GitHub Actions nix flake check + closure build #16
S15 flake 構造のフラット化と output 統一 (KISSA-47) epic 直 commit bd45a90

マージ判断

ローカルで darwin-rebuild switch --flake .#default --impure を試して問題ないことを確認するまでマージしない。 Draft で維持する。

ローカル検証手順

git fetch origin
git checkout feature/nix-migration-epic
git pull --ff-only

# 1. flake が解決できることを確認
nix flake check --impure --no-build

# 2. closure をビルド (実機適用はしない)
nix build .#darwinConfigurations.default.system --no-link --impure --print-out-paths

# 3. 実機適用 (現環境とのコンフリクトを最小化するため一度だけドライランで確認)
darwin-rebuild build --flake .#default --impure
# 問題なければ
sudo darwin-rebuild switch --flake .#default --impure

検証チェックリスト

  • nix flake check がエラーなく完了
  • darwin-rebuild build が成功
  • darwin-rebuild switch 後に zsh / starship / yazi / claude / mise 廃止後の言語ランタイム (nodejs, dart, grip 等) が正常起動
  • rtk が flake overlay 経由でビルドされ rtk --version が通る
  • homebrew cask / mas のインストールが nix-darwin 経由で復元される
  • sudoers / fonts / pam モジュールが期待通り適用される
  • claude plugin sync activation スクリプトが正常完了

検証が通り次第、Draft を解除して --merge でマージする。

gotomts and others added 30 commits May 2, 2026 02:13
環境構築を nix-darwin + home-manager + flakes に最大限寄せる
段階移行戦略の設計ドキュメント。決定事項 11 項目、
コンポーネント設計、棚卸 → triage → 翻訳の人間 in-the-loop
ワークフロー、Phase A/B の境界とゲート条件を含む。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
S1-S13 の 13 ステップに分解した実装計画。S2 (flake 雛形) を
他全てがブロック、S1 (棚卸) が S10 (defaults) をブロック、
S12 (検証) が全実装ステップに blocked-by、S13 (CLAUDE.md
更新) は最終ステップ。各ステップに変更対象 / 受入条件 /
依存関係 を明記。Phase B は別 plan で扱う前提。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
macOS 設定の棚卸を自動化する nix/scripts/inventory.zsh を実装。
defaults / mas / launchctl / sudoers.d / Brewfile diff / fonts を
Markdown チェックリスト形式 (nix化 / 無視 / 検討 プレースホルダ付き) で出力する。
bats-core によるユニットテスト (23 件) も同時追加。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
nix-darwin + home-manager flakes の基盤ディレクトリ構造を新設する。
- nix/flake.nix: nixpkgs-unstable / nix-darwin / home-manager の 3 input を宣言
- nix/lib/mkHost.nix: hostname/system/username を受け取り darwinSystem を返すヘルパー
- nix/hosts/m5mbp/: darwin.nix (空モジュール) + home.nix (空モジュール) + default.nix
- nix/README.md: 初回セットアップ / 別 PC 展開 / ロールバック手順を記載
- nix/.gitignore: result シンボリックリンクを除外

stateVersion: nix-darwin = 6 (maxStateVersion 2026-05 時点)、
home-manager = "25.11" (最新安定版) を採用。
rtk-src input は S8 で本格追加予定とコメントで明記。
flake.lock は nix 環境インストール後に nix flake update で生成すること。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
文字列補間パス "../hosts/${hostname}/darwin.nix" は Nix で
相対パスとして解釈されないため、(path + "/string") 形式に変更する。
(../hosts + "/${hostname}/darwin.nix") はパスリテラルと文字列を
組み合わせた正しい動的パス構築パターン。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
トップレベルの { } ブロック内での local 宣言を関数スコープに収める
ため、各セクションを _dump_defaults / _dump_mas / _dump_launchctl /
_dump_sudoers / _dump_brewfile_diff / _dump_fonts に分割し、
_generate_report から順次呼び出す構造に変更。
_format_checklist_line を各セクション関数から実際に使用するよう統一。
フォールバック定義の $1 を ${1} に修正(プロジェクト規約統一)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
--help 出力を =~ 演算子で検証するテストと、
PATH スタブ環境で実際にスクリプトを短時間実行し
生成 Markdown に <!-- nix化 / 無視 / 検討 --> プレースホルダおよび
チェックリスト行 (- [ ]) が含まれることを検証するテストを追加。
計 23 件 → 26 件。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
mkHost.nix が darwin.nix を直接 import しているため default.nix は
デッドコードであり、S3 以降のモジュール追加時のバグ温床になる。
default.nix を削除し、darwin.nix / home.nix を各ホストの
nix-darwin / home-manager モジュール集約点として明示する。

また両ファイル冒頭に mkHost.nix から直接 import される旨と
specialArgs の出自(inputs / hostname / username)を記述する。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- `darwin-rebuild --rollback` → `sudo darwin-rebuild switch --rollback`
- 特定世代切替: `--switch-generation` + `--flake` の競合組み合わせを
  `sudo darwin-rebuild switch -G <N>` (flake なし) に統一
- トラブルシューティングセクションの同誤りも合わせて修正

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- flake.nix: nixpkgs.url 直前に Phase A で unstable を使う理由と
  stable への切替手順をコメント追加 (Major 1)
- darwin.nix / home.nix の引数出自コメントは前コミット (Critical 1) で対応済み

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 別 PC 手順: ~/.dotfiles/nix#<new-hostname> → cd 後に .#<new-hostname>
- ブートストラップ: ~/.dotfiles/nix#m5mbp → cd 後に .#m5mbp
- default.nix 削除に合わせてディレクトリ構造図とコピー手順も修正
- cd ~/.dotfiles/nix の前置きは全セクションで統一済み

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brewfile の各セクション (Utilities / Shell & Terminal / Git & Version
Control / Cloud & DevOps / Languages & Runtimes / Network & API /
Task Management) を検討し、nixpkgs 収録済みパッケージを home.packages
に翻訳。nixpkgs 未収録 (worktrunk / linear / fvm / rtk) および
macOS 管理方式の都合 (tailscale) はコメントで Brewfile 残置を明示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- git.nix: gitconfig の全セクション (user/core/ghq/filter.lfs/rerere/pull/rebase/commit/alias) を移植、ignores に .DS_Store を設定
- starship.nix: 既存 starship.toml を builtins.fromTOML で注入
- yazi.nix: 既存 yazi.toml / keymap.toml を builtins.fromTOML で注入
- ssh.nix: ~/.ssh/config を home.file symlink で配置(鍵管理はスコープ外)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brewfile の全 entry を nix-darwin homebrew モジュールに移植する。
mise / rtk / font-sf-mono は S7/S8/S11 側で管理するため除外。
S3/S7 で nix 化済みの brew は親が integration 時に調整する旨をコメントに明記。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Node / Go / Ruby / Rust / Python の主要ランタイムと
cargo-nextest, cargo-watch, poetry を nixpkgs から提供。
npm-fzf, grip (Python), dart, fvm は nixpkgs 未収録 /
darwin 非対応のためコメントで根拠を明記し Brewfile 残置。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- sudoers.nix: security.sudo.extraConfig で pmset NOPASSWD を宣言化
  (nix-darwin は extraRules 非対応のため extraConfig を使用)
- fonts.nix: fonts.packages を宣言(SF Mono は nixpkgs 未収録のため空リスト + コメント)
- pam.nix: security.pam.services.sudo_local.touchIdAuth = true で Touch ID sudo を有効化

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
本モジュールでは inputs を参照しないため引数宣言から削除。
bun コメントを「nixpkgs にも存在する」旨を明確にした文言に改訂。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
extraConfig の ghq.root をリスト形式に変更。
toGitINI がリスト値を同一キーの複数行として展開するため、
gitconfig の [ghq] セクションに root = ~/.dotfiles と root = ~/ghq が
両方出力される。単一文字列だと ~/ .dotfiles エントリが欠落していた。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase A 移行期に darwin-rebuild switch のたびに宣言外パッケージが
Cellar ごと削除される破壊的挙動を明示。"uninstall" への変更も検討余地として言及。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gotomts and others added 18 commits May 2, 2026 18:44
feat(nix): home-manager claude.nix を追加 (plugin sync activation) (S6 / KISSA-26)
feat(nix): home-manager languages.nix を追加 (mise 完全置換) (S7 / KISSA-27)
feat(nix): rtk overlay を追加 (flake input + buildRustPackage) (S8 / KISSA-28)
feat(nix): nix-darwin homebrew.nix を追加 (cask + mas + 例外 brew) (S9 / KISSA-29)
…misc

feat(nix): nix-darwin sudoers/fonts/pam モジュールを追加 (S11 / KISSA-31)
S8 (KISSA-28) の rtk overlay が必要とする flake input を追加。
URL は brew formula 経由で確認した正規 repo (rtk-ai/rtk)。

inputs.rtk-src:
  url   = "github:rtk-ai/rtk"
  flake = false  (rtk 自身は flake ではないためソースのみ取得)

flake.lock:
  rtk-src @ 4338f029ec43b69eb959748ec02cd7885200c264 (2026-04-29)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
各 home-manager モジュールを集約点に列挙して有効化:

- packages.nix (S3 / KISSA-23) — CLI ツール群
- zsh.nix (S4 / KISSA-24) — programs.zsh + oh-my-zsh
- git.nix / starship.nix / yazi.nix / ssh.nix (S5 / KISSA-25)
- claude.nix (S6 / KISSA-26) — claude plugin sync activation
- languages.nix (S7 / KISSA-27) — 言語ツールチェーン

各 sub-issue PR は自モジュールしか追加しない並列制約だったため、
imports 配線は親 integration commit で一括実施。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
nix-darwin モジュールの imports 配線と nixpkgs.overlays に rtk
overlay を適用:

- homebrew.nix (S9 / KISSA-29) — cask + mas + 例外 brew
- sudoers.nix / fonts.nix / pam.nix (S11 / KISSA-31)
- nixpkgs.overlays = [ rtk overlay ] (S8 / KISSA-28)
- system.primaryUser = goto

system.primaryUser は nix-darwin の multi-user 移行で homebrew.enable
等のユーザースコープオプションに対象ユーザーを明示する必要があるため。

S10 (defaults.nix) は棚卸 triage 完了後に追加 (コメントで予告)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
S3 (packages.nix) で nixpkgs から提供する 14 件 (jq, gh, fzf, kubectl,
ghq, lazygit, lazydocker, kubectx, stern, sops, grpcurl, bats-core,
pwgen, qpdf) と、S3 ポリシーで `nix shell` 経由とする build deps 12 件
(autoconf, automake, bison, freetype, gd, gettext, gmp, libyaml,
openssl@3, pkg-config, re2c, zlib) を brews から削除。

最終的に brews に残るのは 6 件のみ (nixpkgs 未収録 + macOS 特殊事情):
- worktrunk
- oven-sh/bun/bun
- leoafarias/fvm/fvm
- pipx
- schpet/tap/linear
- tailscale (macOS は cask + system extension が公式推奨)

mise (S7 完全削除) と rtk (S8 flake input 化) は既に除外済。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
nix-darwin 側で Nix 管理を無効化し、Determinate Nix の daemon に委ねる。
nix-command / flakes は Determinate がデフォルト有効なため、旧来の
`nix.settings.experimental-features` 宣言は削除する。

S14 (CI 検証) の試運転で `darwin-rebuild switch` が以下のエラーで
失敗していたため発見した本番ブロッカー:

  error: Determinate detected, aborting activation
  Determinate uses its own daemon to manage the Nix installation that
  conflicts with nix-darwin's native Nix management.

  To turn off nix-darwin's management of the Nix installation, set:
      nix.enable = false;

ローカル PC にも Determinate Nix が入っているため、本修正なしでは
m5mbp で `darwin-rebuild switch` を実行できない状態だった。CI で
事前検出できた本番投入ブロッカー。
PR で nix/ が変更されるたびに以下を実行する flake-check ジョブを追加:
- nix flake check (構文 / 型 / 依存解決の壊れ検知)
- nix build .#darwinConfigurations.m5mbp.system --no-link (closure 構築)

並行 Claude セッションへの影響なく drift を継続検知できる。Brewfile を
更新したのに homebrew.nix を直し忘れた、といったケースを物理防止する。

スコープ縮小の経緯:
- 当初は ci 専用 host (username=runner) で `darwin-rebuild switch` まで
  CI で走らせる構成を試した
- しかし本番 (m5mbp) と CI 環境 (runner / TCC / GUI / hardware) の差分を
  埋める作業が膨らみ、本番投入の安全性向上に対して費用対効果が悪かった
- 1 度の試運転で Determinate Nix と nix-darwin の競合 (前コミット
  `nix.enable = false`) を発見したことで CI の主目的は達成
- それ以降の iteration は CI 環境固有の問題に終始したため、ci-switch
  ジョブと ci host 定義は採用見送り
- activation の検証は実機での `darwin-rebuild build` → `switch` で行う

設計:
- runs-on: macos-latest (最新 macOS runner に自動追従)
- DeterminateSystems/nix-installer-action でローカルと同じ Determinate Nix
- run: で untrusted input (github.event.*) を一切評価しない (injection 対策)
- concurrency で同一 ref の重複 run をキャンセルし課金を抑制
これまで feature/nix-migration-** への push でも push イベントが起動し、
同 SHA に対して pull_request イベントと二重に nix-check が走っていた。
concurrency group が github.ref ベース (push と pull_request で値が違う)
なので互いに cancel されず、毎回手動で push 重複 run をキャンセルする
運用になっていた。

feature branch は PR 経由で常に pull_request イベントを発火させるため、
push トリガーは main の直接 push (hotfix 等) のみに絞る。
[KISSA-46] ci(nix): nix flake check ジョブを追加 + Determinate 競合修正
CLAUDE.md を Phase A の現実に合わせて更新する。

主な変更:
- 「リポジトリ構造」セクションに nix/ を追加
- Brewfile に「Phase A は読み取り専用バックアップ、homebrew.nix と同 PR で
  追従、Phase B で削除予定」の注記
- シンボリックリンク管理に「新規 dotfiles は home-manager に倒す、
  setup.zsh はレガシー扱い」の方針を追記。除外リストに nix を追加
- 新規セクション「Nix 環境 (Phase A)」を追加:
  * 主要コマンド (build / switch / rollback / list-generations)
  * 重要な設計判断 (nix.enable = false / homebrew zap / rtk overlay)
  * 棚卸 → triage → 翻訳ワークフロー (S10)
  * CI 検証 (`nix-check` workflow) のスコープ
  * Phase A → Phase B 移行方針

完了条件 (KISSA-33):
- [x] CLAUDE.md の差分が Phase A の構造変化を全てカバー
- [x] nix/README.md への参照を明示
- [x] 既存セクション間の整合性 (Brewfile / symlink 管理) を確保
[KISSA-33] docs(claude): CLAUDE.md に Nix 環境セクション追記
Determinate Nix インストーラの薄ラッパー。新規 PC のブートストラップを
README 手順 1 本に圧縮する目的で追加。

- 既存 Nix を検出して skip する idempotent 動作
- Full Disk Access の事前チェック (`sudo touch /etc/fstab`)。macOS 15
  では FDA なしでは root でも /etc 書き込みが TCC で拒否されるため、
  インストール途中で詰むのを防ぐ
- Determinate flavor + 非対話モードで起動 (`--determinate --no-confirm`)
- setup/util.zsh の message 関数を共用 (Phase B で setup/ 削除時に
  ローカル定義に置換予定)

zsh -n で syntax 確認済み。実機動作確認は PR #18 のローカル検証時に行う。
旧 setup.zsh ベースの 3 ステップ手順から、Determinate Nix + nix-darwin
+ home-manager を前提とした 6 ステップ手順に全面書き換え。

- 「READMEを見て進めるだけでセットアップ完了」を実現するため、FDA 付与
  から darwin-rebuild switch までを 1 本のフローに整理
- 詳細 (ロールバック、別 PC 展開、トラブルシュート) は nix/README.md に
  逃がし、ルートはコンパクトに保つ
- homebrew.onActivation.cleanup = "zap" によるパッケージ削除の警告を
  明示
- 完了確認チェックリストを追加 (zsh / starship / yazi / claude / rtk /
  node / dart / brew / sudo / Touch ID の確認項目)
- setup/ と Brewfile を「Phase B で削除予定のレガシー資産」として明記
ルート README に新規セットアップ手順を集約したのを受け、nix/README は
詳細・運用・トラブルシュートに役割を絞った。

- 初回セットアップ手順セクションを削除しルート README に委譲
- ディレクトリ構造に `modules/overlays/`, `scripts/install-nix.zsh`,
  `scripts/tests/inventory.bats` を追記して実態と一致させる
- 別 PC 展開セクションを 2 シナリオ (m5mbp 再現 / 新ホスト追加) に再構成
- トラブルシュートに FDA 未付与エラー、Determinate 競合 (S14 で解消済)、
  Homebrew zap、初回ブートストラップ等を追加
- 「現在の状態 (S2 完了時点)」を「Phase A の進捗」に書き換え、S1〜S14
  と Linear issue ID (KISSA-21〜KISSA-46) を反映。S10 (KISSA-30) のみ
  棚卸 triage 待ちで未完了として残す
gotomts and others added 8 commits May 13, 2026 23:23
feat(nix): install-nix.zsh + README 整備で一発セットアップを実現 (S12 / KISSA-32)
- nix/hosts/<host>/ ディレクトリ階層を nix/ 直下にフラット化
- mkHost ヘルパーを廃止し flake.nix に inline
- darwinConfigurations の output 名を default に統一
- username 解決を builtins.getEnv "USER" に変更 (--impure 必須)
- modules/darwin/*.nix のコメントから旧構造への参照を削除
- scripts/install-nix.zsh のヘルプ出力を新コマンドに更新
- README.md / nix/README.md / CLAUDE.md / nix-check.yml を全面追従
- nix/README.md を運用ドキュメントに再構成 (245 → 149 行)、
  進捗チェックリストは Linear 管理に分離、アプリ追加方法を新規セクションに集約

CI は USER=ciuser env で closure ビルドを generic 化。
flake は username を \$USER から動的解決するため --impure が必須。

PR #18 を squash マージする前提で epic ブランチに積み上げ。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
初回は darwin-rebuild が PATH に存在しないため、ブートストラップは
nix run nix-darwin -- switch ... で行う必要がある。2回目以降は通常の
darwin-rebuild switch ... が使える (nix/README.md 通常運用に既載)。

修正対象:
- README.md クイックスタートの手順 3
- nix/scripts/install-nix.zsh の NEXT STEPS (手順 3, 4)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
nix-darwin の最近の変更で system activation を root で実行することが
必須化された。sudo 経由だと env_reset で $USER が root に置き換わり、
flake.nix の builtins.getEnv "USER" 動的解決が壊れる。

USER=$USER を inline で明示伝播することで、sudo 下でも元の USER を
保持しつつ root で activation できる。

修正対象 (--impure を伴う activation コマンドのみ):
- README.md クイックスタート手順 3 末尾
- nix/scripts/install-nix.zsh NEXT STEPS 手順 4
- nix/README.md アプリ追加適用 + USER env トラブルシュート
- CLAUDE.md 主要コマンド (適用)

--rollback / 世代切替系 (flake 評価を伴わない) は対象外。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…-47)

実機検証で home-manager activation が clobber エラーで失敗した。
setup.zsh が以前作った既存 symlink (~/.zshrc, ~/.claude/agents 等) と
衝突するため、退避用拡張子を指定する。

加えて、S8 で rtk を overlay 化したが home.packages への追加が漏れて
おり、command not found となっていた。

修正対象:
- nix/flake.nix: home-manager.backupFileExtension = "before-nix" 追加
- nix/modules/home/packages.nix: pkgs.rtk を home.packages に追加

これで初回 activation 時に既存ファイルが <file>.before-nix に退避される。
rtk は /etc/profiles/per-user/<user>/bin/rtk に配置される。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
rtk の cargo test には HOME 書き込みと外部 binary 依存のテストが
含まれており、nix sandbox (HOME が read-only な /homeless-shelter) で
14 件が落ちて build が失敗する:

  thread '...::test_timed_execution_records_time' panicked at
    src/core/tracking.rs:1522:38:
    Failed to create tracker: Read-only file system (os error 30)

CI でも同じはずだが、flake.lock の rtk-src.rev が更新されてテスト要件が
変わったタイミングで噴出した可能性が高い。バイナリ品質は上流 rtk
リポジトリの CI に委ね、本ビルドではテストフェーズを skip する。

doCheck = false; を追加。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
実機セットアップ中に zed が宣言外として homebrew.zap で削除されたため、
casks に明示的に宣言する。次回 switch で復元される。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
nix-darwin の /etc/zprofile は path_helper を呼ばないため、
/etc/paths.d/homebrew の /opt/homebrew/bin が PATH に注入されず、
brew / mas / claude 等 Homebrew 配下のバイナリが command not found
になっていた。

home-manager の zsh initExtra 冒頭で /opt/homebrew/bin/brew shellenv を
eval することで、PATH / HOMEBREW_PREFIX / HOMEBREW_CELLAR 等を明示的に
注入する。brew 未インストール環境では skip される。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@gotomts gotomts marked this pull request as ready for review May 13, 2026 19:03
@gotomts gotomts merged commit b6fa354 into main May 13, 2026
1 check passed
@gotomts gotomts deleted the feature/nix-migration-epic branch May 13, 2026 19:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant