Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
90a9dbb
docs(spec): nix 移行設計 spec を追加
gotomts May 1, 2026
4ad143c
docs(plan): nix 移行 Phase A の implementation plan を追加
gotomts May 1, 2026
caafbe9
feat(nix): inventory スクリプトを追加
gotomts May 1, 2026
bad2bfd
feat(nix): flake skeleton + mkHost ヘルパーを追加 (S2)
gotomts May 1, 2026
80a8b4f
fix(nix): mkHost.nix のパス補間を正しい Nix 構文に修正
gotomts May 1, 2026
da6d6d5
refactor(nix): inventory スクリプトを関数化
gotomts May 1, 2026
a37e8c3
test(nix): inventory テストを強化
gotomts May 1, 2026
dfe9064
refactor(nix): default.nix を削除し mkHost.nix との責務を整理
gotomts May 1, 2026
84cd951
fix(nix): README のロールバックコマンドを正しい構文に修正
gotomts May 1, 2026
877ad31
docs(nix): nixpkgs-unstable 採用理由と引数出自をコメントで明記
gotomts May 1, 2026
71be600
docs(nix): README のパス記法を cd 後の相対パス .# に統一
gotomts May 1, 2026
ebcc08b
feat(nix): home-manager packages.nix を追加 (CLI ツール群)
gotomts May 1, 2026
08b2bcf
feat(nix): home-manager claude.nix を追加 (plugin sync activation)
gotomts May 1, 2026
5380c7f
feat(nix): home-manager zsh.nix を追加 (programs.zsh 宣言化)
gotomts May 1, 2026
6f29b02
feat(nix): home-manager git/starship/yazi/ssh モジュールを追加
gotomts May 1, 2026
d0934e9
feat(nix): rtk overlay を追加 (flake input + buildRustPackage)
gotomts May 1, 2026
a349335
feat(nix): nix-darwin homebrew.nix を追加 (cask + mas + 例外 brew)
gotomts May 1, 2026
f3aa054
feat(nix): home-manager languages.nix を追加 (mise 完全置換)
gotomts May 1, 2026
bba32f6
feat(nix): nix-darwin sudoers/fonts/pam モジュールを追加
gotomts May 1, 2026
bd1589c
refactor(nix): packages.nix の未使用 inputs 引数削除と bun コメント明確化
gotomts May 1, 2026
3b62836
fix(nix): zsh.nix のハードコードパスを $HOME 参照に修正
gotomts May 1, 2026
dd7dae3
refactor(nix): グローバル alias 参照する kubectle 系を initExtra に集約
gotomts May 1, 2026
8db8bba
fix(nix): claude.nix activation を関数化して exit 0 漏出を解消
gotomts May 1, 2026
39d82c2
refactor(nix): claude.nix の未使用 inputs 引数を削除
gotomts May 1, 2026
19d453d
refactor(nix): zsh.nix の規約違反パスと未使用引数を整理
gotomts May 1, 2026
3f8adfa
docs(nix): claude.nix のスコープと挙動差をコメントで明記
gotomts May 1, 2026
f7a8614
refactor(nix): rtk overlay の cargoLock を path 型表現に統一
gotomts May 1, 2026
dff0ca8
refactor(nix): rtk overlay の version fallback を unknown に変更しコメント追加
gotomts May 1, 2026
1ff1ba1
fix(nix): git.nix で ghq.root の複数値を保持する
gotomts May 1, 2026
5053439
docs(nix): homebrew.nix の cleanup="zap" のリスクをコメント補強
gotomts May 1, 2026
15f47f6
refactor(nix): homebrew.nix の未使用引数を削除
gotomts May 1, 2026
21b621e
refactor(nix): commit.template を home.file 経由の固定パス参照に変更
gotomts May 1, 2026
7237884
docs(nix): yazi.nix に grip-preview パスの Phase B TODO を追加
gotomts May 1, 2026
14d02a4
refactor(nix): languages.nix の未使用 inputs/lib 引数を削除
gotomts May 1, 2026
e5dcd52
docs(nix): nodejs_22 固定理由を nixpkgs 24 LTS デフォルト化に基づき補強
gotomts May 1, 2026
5263d79
feat(nix): grip を python3Packages 経由で有効化 (誤情報のコメントアウト解除)
gotomts May 1, 2026
3898229
feat(nix): dart を有効化 (aarch64-darwin 対応済みのコメント誤情報を訂正)
gotomts May 1, 2026
34467bc
docs(nix): sudoers.nix に Phase A 完了時の 10_claude.zsh クリーンアップ TODO を追加
gotomts May 1, 2026
f430256
docs(nix): sudoers.nix に environment.etc 権限の実機検証ポイントをコメント追加
gotomts May 1, 2026
b67b759
docs(nix): sudoers.nix に extraConfig の連結リスク警告を追加
gotomts May 1, 2026
bf3a833
docs(nix): pam.nix の reattach 不採用根拠を確定的に明記
gotomts May 1, 2026
06e61c5
chore(nix): flake.lock を生成 + コミット
gotomts May 2, 2026
859ddbd
Merge pull request #5 from gotomts/feature/nix-migration-design
gotomts May 2, 2026
61b195f
Merge pull request #15 from gotomts/feature/nix-migration-s2-flake-sk…
gotomts May 2, 2026
c8b4f98
Merge pull request #6 from gotomts/feature/nix-migration-s1-inventory
gotomts May 2, 2026
61c338e
Merge pull request #7 from gotomts/feature/nix-migration-s3-packages
gotomts May 2, 2026
3cd865c
Merge pull request #8 from gotomts/feature/nix-migration-s4-zsh
gotomts May 2, 2026
7cb1018
Merge pull request #9 from gotomts/feature/nix-migration-s5-config
gotomts May 2, 2026
64eee1e
Merge pull request #10 from gotomts/feature/nix-migration-s6-claude
gotomts May 2, 2026
ed49fc6
Merge pull request #13 from gotomts/feature/nix-migration-s7-languages
gotomts May 2, 2026
62ff6c4
Merge pull request #11 from gotomts/feature/nix-migration-s8-rtk-overlay
gotomts May 2, 2026
e36f420
Merge pull request #12 from gotomts/feature/nix-migration-s9-homebrew
gotomts May 2, 2026
23221d3
Merge pull request #14 from gotomts/feature/nix-migration-s11-darwin-…
gotomts May 2, 2026
375dc00
chore(nix): rtk-src input を flake.nix に追加 + flake.lock 更新
gotomts May 2, 2026
af9da69
feat(nix): hosts/m5mbp/home.nix に S3-S7 modules の imports 配線
gotomts May 2, 2026
7104574
feat(nix): hosts/m5mbp/darwin.nix に S8/S9/S11 配線 + primaryUser 設定
gotomts May 2, 2026
8c70ca6
refactor(nix): homebrew.nix の brews を S3/S7 で nix 化済の分を削除
gotomts May 2, 2026
13766d9
fix(nix): Determinate Nix と nix-darwin の競合を解消 (nix.enable = false)
gotomts May 13, 2026
af4fb2c
ci(nix): nix flake check + m5mbp closure build を GitHub Actions で実行
gotomts May 13, 2026
33e46b0
ci(nix): push trigger を main 限定に絞り feature branch の重複起動を解消
gotomts May 13, 2026
8e81117
Merge pull request #16 from gotomts/feature/nix-migration-s14-ci
gotomts May 13, 2026
f7d2793
docs(claude): CLAUDE.md に Nix 環境セクション追記 (Phase A 対応)
gotomts May 13, 2026
4ac13a9
Merge pull request #17 from gotomts/feature/nix-migration-s13-claude-md
gotomts May 13, 2026
221b0bb
feat(nix): install-nix.zsh を追加 (S12 / KISSA-32)
gotomts May 13, 2026
ec4ec58
docs: ルート README を Nix 一元化版に書き換え (S12 / KISSA-32)
gotomts May 13, 2026
f9e4b95
docs(nix): README を運用・トラブルシュート役に整理 (S12 / KISSA-32)
gotomts May 13, 2026
b31bee8
Merge pull request #19 from gotomts/feature/nix-migration-s12-readme
gotomts May 13, 2026
bd45a90
refactor(nix): flake 構造のフラット化と output 統一 (S15 / KISSA-47)
gotomts May 13, 2026
5f810c9
fix(nix): 初回セットアップを nix run nix-darwin に修正 (S15 / KISSA-47)
gotomts May 13, 2026
800f292
fix(nix): activation コマンドに sudo USER=$USER を追加 (S15 / KISSA-47)
gotomts May 13, 2026
852c7ac
fix(nix): home-manager backupFileExtension と rtk 追加忘れを修正 (S15 / KISSA…
gotomts May 13, 2026
e5c522d
fix(nix): rtk overlay の cargo test を skip (S15 / KISSA-47)
gotomts May 13, 2026
7e0959c
feat(nix): homebrew casks に zed を追加
gotomts May 13, 2026
91458d0
fix(nix): zsh init に brew shellenv を追加 (S15 / KISSA-47)
gotomts May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions .github/workflows/nix-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Nix flake / nix-darwin 構成の CI 検証
#
# 目的:
# PR で nix/ が変更されるたびに `nix flake check` と system closure
# ビルドを走らせ、構文・型・依存解決の壊れを検知する。これにより main 更新
# による drift (Brewfile ↔ homebrew.nix 等) を継続検知できる。
#
# 設計判断:
# - `darwin-rebuild switch` 自体は CI で実行しない:
# ci 用に専用 host を作って switch する案を試したが、
# 実機と CI 環境 (runner / TCC / GUI / hardware) の差分を埋める
# 作業が膨らみ、本番投入の安全性向上に対して費用対効果が悪かった。
# activation の検証は実機での `darwin-rebuild build` → `switch` で行う方針。
# - runs-on: macos-latest を採用 (最新 macOS runner に自動追従)
# - DeterminateSystems/nix-installer-action: ローカル開発と同じ Determinate Nix
# - `USER=ciuser` を env で渡す: flake は username を $USER から動的解決する
# (`builtins.getEnv "USER"`)。CI runner の $USER は環境依存なため、
# リポジトリに個人情報を残さない generic 値を明示する。
#
# セキュリティ:
# - run: で github.event.* の自由文 (PR title / body / commit message 等) を
# 一切評価しない (injection 対策)
name: nix-check

on:
pull_request:
paths:
- 'nix/**'
- '.github/workflows/nix-check.yml'
push:
# feature branch への push は pull_request イベントだけで検証する
# (push と pull_request の重複起動を避ける)。main の直接 push (hotfix 等)
# のみここで拾う。
branches:
- main
paths:
- 'nix/**'
- '.github/workflows/nix-check.yml'

# 同一ブランチで複数 push があった場合、進行中のジョブをキャンセルして最新だけ走らせる
concurrency:
group: nix-check-${{ github.ref }}
cancel-in-progress: true

jobs:
flake-check:
name: nix flake check + build closure
runs-on: macos-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Nix (Determinate Systems)
uses: DeterminateSystems/nix-installer-action@main
with:
# diagnostic 送信を無効化 (Determinate 公式推奨の opt-out)
diagnostic-endpoint: ''

- name: nix flake check
working-directory: nix
env:
USER: ciuser
run: nix flake check --impure --print-build-logs

- name: Build system closure
working-directory: nix
env:
USER: ciuser
run: |
nix build .#darwinConfigurations.default.system \
--no-link --impure --print-build-logs
68 changes: 65 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

- `aliases` — シェルエイリアス定義(`~/.aliases` にシンボリックリンク)
- `aliase/` — 外部シェルスクリプト(エイリアスから呼び出される)
- `Brewfile` — Homebrew パッケージ定義
- `Brewfile` — Homebrew パッケージ定義(Phase A 期間中は読み取り専用バックアップ、Phase B で削除予定)
- `claude/` — Claude Code 設定(`~/.claude/` にシンボリックリンク)
- `claude/hooks/` — Claude Code フックスクリプト群(PreCompact / SessionStart / UserPromptSubmit)
- `claude/agents/` — マルチエージェント開発用サブエージェント定義(developer × 10 / reviewer × 3 / pr-publisher × 1 = 14 体。`~/.claude/agents/` にシンボリックリンク)
Expand All @@ -15,21 +15,24 @@
- `gitconfig` — Git 設定(`~/.gitconfig` にシンボリックリンク)
- `gitignore_global` — グローバル gitignore(`~/.gitignore_global` にシンボリックリンク)
- `grip/` — grip 設定(`~/.grip/` にシンボリックリンク)
- `setup/` — セットアップスクリプト群(シンボリックリンク対象外)
- `nix/` — nix-darwin + home-manager + flakes による環境構築定義(Phase A の主管理対象。`darwin-rebuild` から参照される。詳細は `nix/README.md`)
- `setup/` — セットアップスクリプト群(シンボリックリンク対象外。Phase B で home-manager へ完全移行後に削除予定)
- `ssh/` — SSH 設定(`~/.ssh/` にシンボリックリンク)
- `zsh/` — zsh 補完ファイル(`~/.zsh/` にシンボリックリンク)
- `zshrc` — zsh 設定(`~/.zshrc` にシンボリックリンク)
- `zshenv` — zsh 環境変数(`~/.zshenv` にシンボリックリンク)

# シンボリックリンク管理

- **Phase A 期間中の方針**: 新規 dotfiles は `nix/modules/home/` 以下で home-manager 管理に倒す。`setup/setup.zsh` の symlink ループはレガシー扱い (Phase B で削除予定)
- `setup/setup.zsh` がリポジトリルートのファイル/ディレクトリを `~/.${name}` にシンボリックリンクする
- 以下はシンボリックリンク対象外として除外されている: `setup`, `README.md`, `ssh`, `claude`, `CLAUDE.md`, `docs`
- 以下はシンボリックリンク対象外として除外されている: `setup`, `README.md`, `ssh`, `claude`, `CLAUDE.md`, `docs`, `nix`
- `ssh/` と `claude/` は専用ループで個別にシンボリックリンクされる
- ルートにファイルやディレクトリを追加する場合、シンボリックリンクが不要なものは `setup.zsh` の除外条件に追加すること

# Brewfile

- **Phase A 注記**: `Brewfile` は読み取り専用バックアップとして残し、cask / mas / 例外 brew は `nix/modules/darwin/homebrew.nix` で管理する。**Brewfile を変更したら同 PR で `homebrew.nix` も更新すること**(CI の `nix-check` で drift 検知される)。Phase B で `Brewfile` 自体を削除予定
- パッケージの追加・削除は Brewfile のみで管理する。手動の `brew install` は禁止
- 既存のパッケージのみを対象とする。ユーザーが明示的に依頼していないパッケージを追加しない
- セクションコメント(`# Utilities`, `# Shell & Terminal` 等)に従って適切な位置に追記する
Expand All @@ -56,6 +59,65 @@
- `claude/hooks/` 配下のフックスクリプトは PreCompact で未 handover 時のコンパクトをブロックし、SessionStart / UserPromptSubmit で未消費メモを Claude に通知する
- `claude/RTK.md` は rtk (Rust Token Killer) のガイドライン。`claude/CLAUDE.md` 末尾の `@RTK.md` で取り込まれ、`claude/settings.json` の `PreToolUse: Bash` matcher に追加した `rtk hook claude` と連動して Bash 出力を圧縮する。各 PC への展開は `brew bundle` + `setup.zsh` で完結し、PC ローカルな `~/Library/Application Support/rtk/filters.toml` は初回フック実行時に自動生成される。フック順序は「破壊的コマンドブロック → rtk hook」で、`rm -rf` / `git push --force` 等が rtk のリライトを通過する前に exit 2 で止まる

# Nix 環境 (Phase A)

`~/.dotfiles/nix/` 配下で nix-darwin + home-manager + flakes による宣言的環境構築を行う。詳細手順は `nix/README.md` を参照。

## 主要コマンド

```sh
cd ~/.dotfiles/nix

# 副作用なしビルド確認 (CI と同じ検証を手元で)
USER=ciuser nix build .#darwinConfigurations.default.system --no-link --impure

# 適用 (sudo 必須、USER=$USER は sudo の env_reset で USER=root になるのを回避、--impure は username 動的解決のため必須)
sudo USER=$USER darwin-rebuild switch --flake .#default --impure

# 直前世代に戻す
sudo darwin-rebuild switch --rollback

# 世代一覧
darwin-rebuild --list-generations
```

## 重要な設計判断

- **`nix.enable = false`**: ローカル PC に Determinate Nix がインストールされている前提。nix-darwin の native Nix 管理は Determinate daemon と競合するため、`nix/darwin.nix` で明示的に無効化している。実験的機能 (nix-command / flakes) は Determinate がデフォルト有効化しているため別途宣言不要
- **PC 名・ユーザー名のリポジトリ非格納**: `darwinConfigurations.default` で output 名を hostname フリーに固定し、`username = builtins.getEnv "USER"` で macOS ローカルアカウント名を実行時解決する。公開リポジトリに PC 名や個人アカウント名を晒さないための設計。`--impure` フラグが必須になる代償と引き換え (S15)
- **`homebrew.onActivation.cleanup = "zap"`**: 宣言外パッケージは Cellar ごと削除する強い管理。Brewfile 由来の旧パッケージが残らないよう破壊的に同期する。Phase A 移行期はリスクを認識した上で運用する (`nix/modules/darwin/homebrew.nix` のコメント参照)
- **`rtk` overlay**: `flake.nix` の `rtk-src` input から `rustPlatform.buildRustPackage` でビルド。`nix/modules/overlays/rtk.nix` で `pkgs.rtk` として供給され、`home/packages.nix` から参照される

## 棚卸 → triage → 翻訳ワークフロー (S10)

macOS の `defaults` 値を `defaults.nix` に翻訳するための人間 in-the-loop プロセス:

1. `zsh nix/scripts/inventory.zsh` を実行 → `docs/inventory/<hostname>-<date>.md` 生成 (READ-ONLY)
2. 生成された Markdown を開き、各項目に `nix化 / 無視 / 検討` をマーク
3. triage 結果を `nix/modules/darwin/defaults.nix` に翻訳 (`nix/darwin.nix` から import)
4. `nix build` で検証 → `darwin-rebuild switch` で適用

triage で「無視」マークした項目は OS デフォルト値が PC 間で異なる可能性があるため、複数 PC で運用する場合は PC 別に再評価する必要がある。

## CI 検証 (`nix-check` workflow)

`.github/workflows/nix-check.yml` で PR ごとに以下を検証する:

- `nix flake check` (構文・型・依存解決)
- `USER=ciuser nix build .#darwinConfigurations.default.system --no-link --impure` (closure ビルド)

`darwin-rebuild switch` の activation 自体は CI 範囲外 (環境差で消耗するため)。実機での `darwin-rebuild build` → `switch` で検証する方針。

## Phase A → Phase B

Phase A は **並存期間** (Brewfile / setup.zsh / nix の三重管理)。Phase B で:

- `Brewfile` 削除
- `setup/` 削除 (一部は `nix/scripts/` に残す)
- `aliases` / `functions` / `zshrc` 等の symlink を home-manager 経由に統一

Phase B の作業は別 plan で扱う。Phase A 完了 + 運用安定確認後に着手する。

# CLAUDE.md の自己更新

- リポジトリに新しいディレクトリやファイルを追加した場合、「リポジトリ構造」セクションを更新すること
Expand Down
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@

## Initialize Setup

1. Install XCode
1. Grant Full Disk Access to your terminal app
(System Settings → Privacy & Security → Full Disk Access)

2. Install Xcode CLT
```terminal
xcode-select --install
```

2. Install Homebrew
3. Install Nix and dotfiles
```terminal
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
git clone https://github.com/gotomts/dotfiles.git ~/.dotfiles
zsh ~/.dotfiles/nix/scripts/install-nix.zsh
cd ~/.dotfiles/nix && sudo USER=$USER nix run nix-darwin -- switch --flake .#default --impure
```

3. Install my dot files:
```terminal
zsh -c "$(curl -s https://raw.githubusercontent.com/gotomts/dotfiles/master/setup/setup.zsh)"
```
See [`nix/README.md`](nix/README.md) for details.
Loading
Loading