第四話 macOS を Nix で管理する方法を調べる

2025-03-20

Last updated: 2025-03-21

macOS で Nix を使用するガイドや事例、Homebrew から Nix に移行する方法を読んだ。

資料のメモ

  • OPENLOGI で働くこのエンジニアの方は公式インストーラじゃなくて Determinate Systems インストーラを使っている:Nixで整える開発環境
  • macOS に Home Manager のみを使ってインストールすると、デスクトップアプリがアプリケーション一覧に表示されないらしい 開発マシンの環境セットアップをAnsibleからNixに移行した
    • nix-darwin 経由の Homebrew でのインストールであれば、アプリケーション一覧に表示されるので、対策はある。
    • Nix マキシマリズムは諦めて、別途に Nix 経由ではなく、普通に Homebrew をインストールして、GUI アプリは Homebrew から直接ダウンロードするというのも一つの方法:https://gist.github.com/orzklv/c7cdda429ec2f3fe88f0662c7c9925ec
  • How to Learn Nix, Part 19: Switching from Homebrew to Nix
    • brew leaves で depedency じゃない Homebrew formulae の一覧を取得できる。これは Homebrew からの移行時に大いに役に立ちそう。
  • How to migrate from Homebrew to Nix
    • Nix 経由でパッケージをインストールする方法は主に3つある:
      • nix-shell -p <package-name>: パッケージを少し試してみたい時に便利。
      • nix-env -iA nixpkgs.<package-name>: これは brew install <package-name> に一番近いが、命令的(imperative)であるため、“the Nix way” ではない。
      • パッケージを configuration Flake に追加する:これぞ宣言的(declarative)で、“the Nix way” な方法。
    • このように分けるのは自分の Nix に対する認識を変えた。希望として、Nix には Homebrew に一時的なシェルや開発環境も構築できる上位互換であって欲しいと思っていた。brew install のコマンド一つ実行すればパッケージが手に入るように、nix install 的なコマンドを求めていた。けど Nix は違うということを覚悟するべき。
  • Setup nix, nix-darwin and home-manager from scratch on an M1 Macbook Pro
    • Nix、nix-darwin、Home Manager を一からインストールするスクリプト
  • Reproducible macOS Configurations with Nix
    • この人は Nix と nix-darwin を使っているが、Home Manager は使っていない。よく考えればこれは可能であるのだが、nix-darwin を使っているのを見てきた人たちは漏れなく Home Manager も使っていた。
    • Why I’m Ditching Nix Home Manager - And What I’m Using Instead
      • この人は過去に Home Manager を使っていたが、GNU Stow に戻った。
      • Home Manager を使用すると、システムの dotfile の変更を反映させるために home-manager switch を実行して変更を同期させないといけない。これは Lazy で管理する Neovim プラグインにも適用する。
  • Homebrew管理下のCLIをNixに移してみる
    • Determinate Systems インストーラを使う際の注意点:--determinate フラグをインストールコマンドに追加するとカスタムの “Determinate Nix” がインストールされ、これは “Nix” とは別物であって、他のソフトウェアと上手く連携できなくなるかもしれない:https://github.com/LnL7/nix-darwin/issues/149#issuecomment-2442971641--determinate をインストールコマンドから削除しても、インストール中に “Determinate Nix” をインストールするかを聞かれるので、“No” と答えるように注意しなければならない。 
      • これは nix-darwin と干渉しているから発生する問題みたいだが、この問題は2025-02に両者によって改善された?https://determinate.systems/posts/nix-darwin-updates/ とはいえ、スタンダードじゃない “Nix” をインストールするのは初心者にとっていずれにせよ分かりづらくなるだろう
        • nix-darwin は macOS の設定に限らず、Nix のインストールも管理しようとしていた。Determinate も Nix のインストールを管理しようとしているためコンフリクトしていた。でも2025-02のアップデートにより nix-darwin 側による Nix インストールの管理をオフにできる。
    • Homebrew から Nix への移行ガイドとしてはこの記事がとても役に立ちそう。Flake を使った “the Nix way” なパッケージインストールについて詳しく書いてある。
  • Homebrew管理下のCLIをNixに移してみる Home Manager篇
    • 上の便利なシリーズの続き。
  • Homebrew管理下のGUIもNixに移してみる nix-darwin篇
    • 上の便利なシリーズの続き。
  • Nixing Homebrew: Streamlining package management on your machine
    • この人は nix-darwin 非推奨派みたい。あまりにも nix-darwin が嵌入的であると感じているため。
    • ただ Home Manager の使用はシェルの設定のために推奨している。
  • 私が使うターミナルエミュレータ Ghostty の開発者、そして Terraform などを手がける HashiCorp 創業者 Mitchell Hashimoto の NixOS:https://github.com/mitchellh/nixos-config
    • 彼は macOS の GUI アプリケーションを使ったり、Home Manager を使用しているが、VMWare Fusion で NixOS の VM を立ち上げて、そっちでターミナルやその他開発ツールを使っている。
    • 環境について本人が詳しく説明している動画:https://www.youtube.com/live/LA8KF9Fs2sk?si=a257VvCMFrXLn0lS&t=1054

自分はどうするか

Nix は当然使うわけだが、あとは Home Manager と nix-darwin を使うかどうかを選ばなければいけない。それぞれで出来るとされていることを考えると手を出したくなる。ただ実際に試した人たちが敬遠していたり、代わりのツールを使っているとなると、興を削がれる。Mitchell Hashimoto のようにマシン自体は macOS を使い、VM 上で NixOS を使うのも一つの手だが、それもそれで手間が多そう。けど nix-darwin のややこしさや不安定さが改善されなければ試してみる価値はありそう。

不安定なツールはあまり使いたくはないけど、試してみたいプロジェクトがあるので、そのために nix-darwin は自分のマシンで使ってみる。Home Manager は保留として、dotfile の管理は GNU Stow などで行うのが良さそう。