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 は違うということを覚悟するべき。
- Nix 経由でパッケージをインストールする方法は主に3つある:
- Setup nix, nix-darwin and home-manager from scratch on an M1 Macbook Pro
- Nix、
nix-darwin
、Home Manager を一からインストールするスクリプト
- Nix、
- 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 プラグインにも適用する。
- この人は Nix と
- 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” なパッケージインストールについて詳しく書いてある。
- Determinate Systems インストーラを使う際の注意点:
- 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 などで行うのが良さそう。