Homebrew・mise から Nix へ移すときの分担: 全体で使うものは Home Manager、プロジェクト固有は flake.nix
いきなり全部を Nix にせず、「ユーザー全体で使うツール」は Home Manager、「そのディレクトリだけで使う処理系」は各リポジトリの flake.nix、Home Manager にないものは当面 Homebrew、と3つに分ける。
どう分けるか
| 置き場所 | 入れるもの | これまでの担当 |
|---|---|---|
Home Manager(home.nix) | どこでも使う CLI(git、ripgrep、jq など)と、全体で1つあればよい処理系(Node.js くらい) | Homebrew、mise の global 設定 |
各リポジトリの flake.nix(devShell) | そのプロジェクトで固定したい処理系とツールのバージョン | mise の .mise.toml / .tool-versions |
| Homebrew | Home Manager に対応していないツール、GUI アプリ(cask) | そのまま |
書き方の例
nix
# ~/.config/home-manager/home.nix(抜粋)
{ pkgs, ... }: {
home.packages = with pkgs; [ git ripgrep jq nodejs ];
}nix
# プロジェクトの flake.nix(抜粋)
{
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
outputs = { nixpkgs, ... }:
let pkgs = nixpkgs.legacyPackages.aarch64-darwin;
in {
devShells.aarch64-darwin.default = pkgs.mkShell {
packages = [ pkgs.go pkgs.nodejs_22 pkgs.pnpm ];
};
};
}nix develop で入る。direnv と nix-direnv を使い、.envrc に use flake と書けば、ディレクトリに入ったときに自動で切り替わる(mise の自動切り替えと同じ使い心地)。
注意
flake.lockをコミットしてバージョンを固定する。更新はnix flake update。- 上の例はシステム名(
aarch64-darwin)を直書きしている。複数 OS で使うなら flake-utils などで複数システム分を出す。 - チーム全員が Nix を使うとは限らないので、共有リポジトリでは mise の設定と併記するか、README に入り方を書いておく。
出典
- @sorafujitani 2026-07-19(移行の方針についての返信): @sorafujitani · 2026-07-19
(Home Manager・flake の設定例は一般的な書き方を補ったもの)