テック技報最新号へ →
コード

Homebrew・mise から Nix へ移すときの分担: 全体で使うものは Home Manager、プロジェクト固有は flake.nix

いきなり全部を Nix にせず、「ユーザー全体で使うツール」は Home Manager、「そのディレクトリだけで使う処理系」は各リポジトリの flake.nix、Home Manager にないものは当面 Homebrew、と3つに分ける。

@sorafujitani · 投稿 2026-07-19
#nix#home-manager#mise#homebrew#開発環境

どう分けるか

置き場所入れるものこれまでの担当
Home Manager(home.nix)どこでも使う CLI(git、ripgrep、jq など)と、全体で1つあればよい処理系(Node.js くらい)Homebrew、mise の global 設定
各リポジトリの flake.nix(devShell)そのプロジェクトで固定したい処理系とツールのバージョンmise の .mise.toml / .tool-versions
HomebrewHome 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 の設定例は一般的な書き方を補ったもの)
X の元の投稿を開く