feat(nix): per-host 構成を追加 (DOT-39)#32
Merged
Merged
Conversation
6b64e83 to
5985cbd
Compare
複数 Mac で dotfiles を運用するため、role 別の Homebrew profile を導入する。 .dotfiles-role ファイル (gitignored) で profile を切り替え、Homebrew パッケージを core (両 role 共通) と default-only (role == "default" のみ) に分割する。 - flake.nix: builtins.readFile で .dotfiles-role を解決。# コメント行・ 空行を無視して最初の content 行を採用。未知の値は throw で停止。 flakes は store にコピーされるため path リテラル は使えず、既存の builtins.getEnv "USER" 同様 HOME 相対の絶対パスで解決する - darwin.nix: specialArgs から role を受け取り後段モジュールへ流す - homebrew.nix: casks / masApps / brews を core + default-only に分割。 docker-desktop は orbstack で代替済みのため両 role で削除 - .dotfiles-role.example: tracked。コピーして使う。コメント行と空行は parser が無視する - .gitignore: \`.dotfiles-role\` のみ ignore (\`.example\` は除外) - 認める role: "default" | "sub-1" - ファイル不在時は default フォールバック (CI もこの経路) 検証: USER=ciuser nix build .#darwinConfigurations.default.system --no-link --impure - default -> brews 6 / casks 29 / masApps 6 - sub-1 -> brews 4 / casks 25 / masApps 2 - 未知値 -> throw で停止 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
DOT-39 で導入した role 別構成を活用し、sub-1 role では手動 brew install や 手動の Mac App Store インストールを switch 時に削除しないようにする。 default role は従来通り cleanup = "zap" で declarative 厳格管理を維持。 - nix/modules/darwin/homebrew.nix: cleanup = if role == "sub-1" then "none" else "zap" に変更。コメントで role 別ポリシーを明示 - AGENTS.md: Homebrew section の policy を role 別記述に更新。sub-1 で手動 install したものは別 PC で復元されない注意を明記 検証: - USER=ciuser nix build .#darwinConfigurations.default.system 通過 (default 経路) - .dotfiles-role=sub-1 で別 derivation hash の build 成功 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
home-manager 製の ~/.zshrc は shellAliases (zsh.nix) で alias を直接定義し ており、~/.aliases は source されないまま symlink だけ残っていた dead file 状態だった。aliases ファイル内 23 entries は全て shellAliases / initContent に移植済みであることを audit で確認したので、互換層を畳む。 - aliases (repo root): git rm で削除 - nix/modules/home/zsh.nix: home.file.".aliases" 宣言とそのコメント (旧 zshrc 互換性のため残してあった部分) を削除 - AGENTS.md: リポジトリ構造の `- aliases` 行を削除 memory feedback_aliases_to_home_manager_phase_a.md に従い、今後の新規 alias は引き続き nix/modules/home/zsh.nix に追加する運用。 検証: USER=ciuser nix build .#darwinConfigurations.default.system 通過 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5985cbd to
5d98975
Compare
sudo USER=$USER で darwin-rebuild を呼ぶと sudo の env_reset で HOME=/var/root に書き換わり、role file (~/.dotfiles/.dotfiles-role) を見失って default に silent fallback してしまう問題があった。HOME が root home の場合に明示的に throw して silent fail を防ぐ。 運用ドキュメント (ルート README / nix/README / install-nix.zsh / AGENTS.md) の sudo コマンド例も sudo USER=$USER HOME=$HOME に統一する。 ルート README には新規 Mac セットアップで role 宣言を行うステップを追加し、 fallback で意図せず default が選択される事故を防ぐ。
defaults.nix の persistent-apps を実 Dock 並びに合わせて更新 (19→17 件)。 - 追加: Nani.app / Microsoft Teams.app / Microsoft Outlook.app - 削除: Linear.app / Cursor.app / Xcode.app / Simulator.app / Transporter.app Nani は気に入ったため両 role でインストールしたく coreCasks に追加。 Microsoft Teams / Outlook は MDM など別経路で配布される前提のため homebrew.nix には宣言しないが Dock の宣言には含める。
sudo darwin-rebuild 実行時に Nix の security 機構が HOME を passwd の root home (/var/root) にフォールバックさせるため、HOME ベースで role を 解決するアプローチは構造的に機能しない。 role は machine-wide な identity でありユーザー単位の設定ではないので /etc/ 配下が semantically 正しい。/etc/dotfiles-role に root 所有の ファイルとして置く方式に変更する。 初回セットアップ: echo sub-1 | sudo tee /etc/dotfiles-role 副次的に sudo USER=$USER HOME=$HOME を sudo USER=$USER に戻す。 不要になった .dotfiles-role.example と .gitignore (.dotfiles-role 関連のみだった) を削除。
Homebrew が linear-linear -> linear に rename したことを brew bundle の 警告で検出 (Warning: linear-linear was renamed to linear)。 alias が消える前に宣言を新名に追従する。
dotfiles を home-manager 管理に移行した後の対応漏れだった symlink を追加: - ~/.claude/skills (dir-symlink) - ~/.zshrc, ~/.zshenv (file-symlink) - ~/.config/yazi/keymap.toml (file-symlink) これらは古い setup.zsh で作られた symlink で、未 migrate のまま darwin-rebuild switch を実行すると clobber エラーで activation が 止まる (backupFileExtension は target 違いの symlink には効かない)。 同時に migrate_dir_symlink に nix store 判定を追加し、既に home-manager 管理済みの dir-symlink を warning ではなく SKIP として 扱うようにする (migrate_file_symlink と対称化)。 nix/README.md の対応表も更新。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
DOT-39 で導入した per-host role の運用問題への対応と Dock / cask の実態同期。
Changes
0b3fb4c)sudo の env_reset で HOME が root home に書き換わり default に silent fallback する問題を修正。関連ドキュメントの sudo コマンドも
HOME=$HOME必須に統一。248d04d)defaults.nixの persistent-apps を 19→17 件に更新。Nani.app と MS Teams/Outlook を追加し、Dock から外れていたアプリを削除。coreCasksに nani を追加。/etc/dotfiles-roleに移行 (60b061c)Nix の HOME ownership fallback (root として走るプロセスがユーザー所有 HOME を信頼しない security 機構) により HOME ベースの解決は構造的に成立しないため、
/etc/配下の machine-wide 設定に移行。sudo USER=\$USER ...の運用に戻す。.dotfiles-role.exampleと.gitignoreを削除。linear-linearを rename 後のlinearに追従 (f424b7b)Homebrew の rename warning に対応。
d675d8e)~/.claude/skills(dir-symlink) と.zshrc/.zshenv/.config/yazi/keymap.toml(file-symlink) を migrate 対象に追加。migrate_dir_symlink側にも nix store 判定を入れてmigrate_file_symlinkと対称化。Test plan
Notes
既存 PC では `migrate-symlinks.zsh` を `darwin-rebuild switch` の 前に実行する。新規 PC では `nix/README.md` の sub-1 セットアップ手順を参照。