コンテンツにスキップ

macOSへNixでChromeをインストールする

macOSへパッケージマネージャであるNix

HomebrewやApp Storeからインストールしたアプリケーションをメモしておきます。

macOSへ Nix(Determinate Nix Installer)、nix-darwin、および nix-homebrew を新規導入し、指定されたすべてのアプリケーションを管理するための最小限かつ実用的な設定例(Flake構成)を解説します。


ディレクトリ構成

設定ファイルは ~/.config/nix-darwin 以下に集約します。

~/.config/nix-darwin/
├── flake.nix
└── darwin-configuration.nix

設定ファイル

1. flake.nix

{
  description = "Darwin configuration with Nix-Darwin and Homebrew";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    nix-darwin.url = "github:LnL7/nix-darwin";
    nix-darwin.inputs.nixpkgs.follows = "nixpkgs";

    nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew";
    nix-homebrew.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = inputs@{ self, nix-darwin, nixpkgs, nix-homebrew }:
  let
    configuration = import ./darwin-configuration.nix;
  in
  {
    darwinConfigurations."macbook" = nix-darwin.lib.darwinSystem {
      modules = [
        configuration
        nix-homebrew.darwinModules.nix-homebrew
        {
          nix-homebrew = {
            enable = true;
            enableRosetta = false;
            user = "YOUR_USERNAME"; # macOSのユーザー名に変更してください
            autoMigrate = true;
          };
        }
      ];
    };

    darwinPackages = self.darwinConfigurations."macbook".pkgs;
  };
}

2. darwin-configuration.nix

GUIアプリの多く(特にGoogle IMEやKarabiner、Forkなど)はmacOS固有の依存関係や権限管理が必要なため、nix-homebrew 経由の Homebrew Cask で管理するのが最もトラブルが少なく安定します。

{ pkgs, ... }:

{
  # Nixの実験的機能(Flakes)を有効化
  nix.settings.experimental-features = "nix-command flakes";

  # nix-darwinで管理するNixパッケージ(CLIツール・エディタなど)
  environment.systemPackages = with pkgs; [
    zed-editor
    cmux
  ];

  # Homebrew cask を使用してインストールするアプリケーション
  homebrew = {
    enable = true;
    onActivation.cleanup = "zap"; # 設定にないBrewパッケージを削除

    casks = [
      "google-chrome"
      "raycast"
      "google-japanese-input" # Google日本語入力 (Google IME)
      "aerospace"
      "karabiner-elements"
      "fork"
    ];
  };

  # システム状態の互換性バージョン
  system.stateVersion = 5;

  # システムのアーキテクチャ設定(Apple Siliconの場合)
  nixpkgs.hostPlatform = "aarch64-darwin";
}

  1. Determinate Nix Installer の実行: 公式推奨のマルチユーザーインストール. ターミナルで以下を実行し、Nixをインストールします。
curl --proto '=https' --tlsv1.2 -sSf https://install.determinate.systems/nix | sh -s -- install

インストール完了後、指示に従ってターミナルを再起動するか exec zsh で設定を読み込みます。

  1. 設定ファイルの作成: 設定ディレクトリを作成し、用意した2つのファイルを配置します。
mkdir -p ~/.config/nix-darwin
cd ~/.config/nix-darwin

注意: flake.nix 内の YOUR_USERNAME はご自身のmacOSユーザー名(whoami の実行結果)に置き換えてください。

  1. nix-darwin の初回適用: Flakeによるシステム構築. 初回インストールコマンドを実行します。
nix run nix-darwin -- switch --flake ~/.config/nix-darwin#macbook
  1. 以降の更新手順: 次回以降、設定変更を適用する場合は以下のコマンドで反映できます。
darwin-rebuild switch --flake ~/.config/nix-darwin#macbook


home.nix(Home Manager単体構成)で管理する場合、パッケージの性質(Nixpkgsに公式登録されているか、Homebrew Caskでしか提供されていないか)によって指定場所が変わります。

Zed はNixpkgsに存在するため home.packages に直接記述できますが、Google Chrome・cmux・Raycast は macOS の GUI アプリ(Cask)であるため、Homebrew 連携モジュール 側に記述するのが最も確実です。


修正後の home.nix

{ config, pkgs, ... }:

{
  home.username = "あなたのユーザー名";
  home.homeDirectory = "/Users/あなたのユーザー名";

  # 設定の互換性バージョン
  home.stateVersion = "24.05";

  # --- [1] Nixpkgs(Nix直入れ)で管理するツール ---
  home.packages = [
    pkgs.zed-editor     # Zed エディタ
  ];

  # Home Manager自身を管理するための設定
  programs.home-manager.enable = true;

  # --- [2] Homebrew 連携で管理する macOS GUI アプリ ---
  # Home Manager 経由で Homebrew/Cask を管理する設定
  targets.darwin.currentHostDefaults."com.apple.gamed".ControllerAvailable = {}; # darwin環境の有効化用

  # ※Home Managerに homebrew モジュールを取り込んでいる場合の記述
  # (nix-darwinと統合していない場合、Caskアプリは以下のように指定します)
}

おすすめの構成(nix-darwin / nix-homebrew 連携時)

もし前述の nix-darwin(または nix-homebrew)と Home Manager を統合して管理されている場合は、以下のように役割分担して記述します。

① home.nix(Home Manager 側)

{ config, pkgs, ... }:

{
  home.username = "あなたのユーザー名";
  home.homeDirectory = "/Users/あなたのユーザー名";

  home.stateVersion = "24.05";

  home.packages = [
    pkgs.zed-editor     # Zed は Nixpkgs 公式に存在します
  ];

  programs.home-manager.enable = true;
}

② configuration.nix(nix-darwin 側)

Google Chrome・cmux・Raycast を Homebrew Cask として指定します。

{ config, pkgs, ... }:

{
  homebrew = {
    enable = true;

    casks = [
      "google-chrome"
      "cmux"
      "raycast"
    ];
  };
}

パッケージの分類まとめ

アプリ名 管理方法 パッケージ名 / Cask名 理由
Zed Nix (home.packages) pkgs.zed-editor Nixpkgs に公式登録されているため
Google Chrome Homebrew Cask "google-chrome" macOS専用ビルドの安定性のため
cmux Homebrew Cask "cmux" Caskでの配布が主流のため
Raycast Homebrew Cask "raycast" macOSシステム密着型GUIアプリのため

Homebrew

macOS環境で Nix と Home Manager(スタンドアロン構成)を新規にセットアップし、Google Chrome をインストールする一連の手順です。

macOSでのNixインストールには、OSのアップデート時にも壊れにくくアンインストールも簡単な Determinate Systems製インストーラー(nix-installer)を使用するのが現在最も推奨されています。


  1. Nixのインストール: Determinate Systemsの公式インストーラーを使用します. ターミナルを開き、以下のコマンドを実行します。
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install

画面の指示に従い、Macの管理者パスワードを入力して完了させます。インストール完了後、設定を反映するためにターミナルを再起動(または新しいタブを開く)します。

動作確認:

nix --version
  1. Home Managerの初期化: Flakesを用いたスタンドアロンセットアップを行います. Home Managerの設定ファイルを配置するディレクトリを作成し、初期化します。
# 設定ディレクトリの作成と移動
mkdir -p ~/.config/home-manager
cd ~/.config/home-manager

# flake.nix と home.nix の生成
nix run home-manager/master -- init

これで ~/.config/home-manager 内に flake.nix と home.nix が作成されます。

  1. home.nix に Chrome を追加: 設定ファイルにパッケージを記述します. ~/.config/home-manager/home.nix をお好みのエディタ(nano や vim など)で開きます。

home.packages の項目を探し、pkgs.google-chrome を追加します。

{ config, pkgs, ... }:

{
  home.username = "あなたのユーザー名";
  home.homeDirectory = "/Users/あなたのユーザー名";

  # 設定の互換性バージョン(変更不要)
  home.stateVersion = "24.05";

  # インストールするパッケージを指定
  home.packages = [
    pkgs.google-chrome
  ];

  # Home Manager自身を管理するための設定
  programs.home-manager.enable = true;
}
  1. 設定の適用(Google Chromeのインストール): Home Managerを実行してインストールを完了させます. 設定ファイルが存在するディレクトリ(~/.config/home-manager)で以下のコマンドを実行します。
nix run home-manager/master -- switch

初回実行時はビルドとダウンロードが行われ、完了すると ~/Applications/Home Manager Apps ディレクトリ内に Google Chrome が配置されます。

  1. macOSでアプリケーションとして認識させる: 初回のみ必要なパス通し. Home Managerが配置したGUIアプリ(~/Applications/Home Manager Apps)をmacOSのSpotlightやLaunchpadで認識させるため、初回起動時またはエイリアスが反映されていない場合は以下のようにして起動・検索できます。

Spotlight(Cmd + Space)で Google Chrome と検索するか、Finderで ~/Applications/Home Manager Apps を開いて起動してください。


今後の運用コマンド

  • 設定更新(Chrome以外のソフトを追加・変更したとき): home.nix を編集後、以下を実行します。

    home-manager switch
    

  • パッケージの検索: インストールしたいソフトがNixに存在するか確認する場合:

    nix search nixpkgs google-chrome
    


ご提示いただいたソフトウェア群は、「CLIツール・言語スタック」と「GUIアプリケーション・フォント・macOSドライバ系」の2つに大きく分けることができます。

直前のステップで組んだ **nix-darwin + Home Manager + Homebrew** のハイブリッド構成で管理する場合、CLIツールはNix (Home Manager) で宣言し、GUIアプリやMac専用ソフトウェア(Cask / mas)は Homebrew 連携 に割り振るのが最もエラーがなく安定します。

各パッケージに対応する最新の構成例です。


1. home.nix(または flake.nix 内の Home Manager セクション)

CLIツール、プログラミング言語、Nixで公式サポートされている一部の開発系GUIツール(aerospace や zed など)を記述します。

{ pkgs, ... }:

{
  home.packages = with pkgs; [
    # --- AWS / Cloud / Infrastructure ---
    awscli2              # awscli
    terraform            # terraform
    skopeo               # skopeo

    # --- CLI Utils / Modern Alternatives ---
    eza                  # eza (lsの代替)
    ripgrep              # ripgrep (grepの代替)
    jq                   # jq
    xh                   # xh (curl/httpieの代替)
    tree                 # tree
    axel                 # axel
    fping                # fping
    nmap                 # nmap
    telnet               # telnet
    sshpass              # sshpass
    mas                  # mas (Mac App Store CLI)

    # --- Development / Languages / Runtimes ---
    go                   # go
    go-task              # go-task
    govulncheck          # govulncheck
    nodejs               # node
    sheldon              # sheldon (zsh plugin manager)
    gh                   # gh (GitHub CLI)

    # --- Python Ecosystem ---
    uv                   # uv
    mypy                 # mypy
    ruff                 # ruff
    python3Packages.pytest       # pytest
    python3Packages.pyinstaller  # pyinstaller

    # --- Security / Vulnerability Scanners ---
    osv-scanner          # osv-scanner

    # --- Editors & Window Managers ---
    neovim               # neovim
    zed-editor           # zed
    aerospace            # aerospace (i3風タイル型ウィンドウマネージャ)

    # --- Media / Video / Image ---
    ffmpeg               # ffmpeg
    libwebp              # webp
  ];
}

2. configuration.nix(nix-darwin 側の Homebrew 設定)

macOS専用のGUIアプリ、日本語入力(IME)、ドライバ権限を要するもの、および Homebrew Cask でしか提供されていないツール群を記述します。

{ config, pkgs, ... }:

{
  homebrew = {
    enable = true;
    onActivation.cleanup = "zap"; # 設定にない手動brewアプリを自動整理

    # --- フォント (Tap経由) ---
    taps = [
      "homebrew/cask-fonts"
    ];

    # --- Homebrew Casks (GUI App / System Utility) ---
    casks = [
      # --- Browsers & Communication ---
      "google-chrome"
      "slack"
      "discord"
      "webex"

      # --- Productivity & Knowledge ---
      "obsidian"
      "raindropio"
      "biscuit"

      # --- AI Tools ---
      "claude"
      "claude-code"
      "google-gemini"
      "antigravity"

      # --- Dev / Database / System Utilities ---
      "raycast"
      "karabiner-elements"
      "alt-tab"
      "cleanshot"
      "keycastr"
      "macshot"
      "fork"
      "openmtp"
      "transmit"
      "parallels-client"
      "the-unarchiver"
      "voiceink"
      "xdeck"
      "codex"
      "codexbar"
      "cmux"

      # --- Media & Graphics ---
      "audacity"
      "gimp"
      "vlc"
      "orca"

      # --- Network & Security ---
      "wireshark"          # wireshark-app
      "tigervnc-viewer"

      # --- Input Method (IME) ---
      "google-japanese-ime"

      # --- Fonts ---
      "font-udev-gothic-nf"
    ];
  };
}

注意点・補足

  1. container パッケージについて
  2. 一般的なコンテナランタイム(Docker DesktopやRancher Desktop等)を指す場合は、Homebrew Cask側に "docker" や "rancher" などを指定してください。

  3. **tigervnc と tigervnc-viewer**

  4. VNCビューア単体を利用したい場合は Cask の "tigervnc-viewer" を使い、CLIのVNCサーバー/クライアントツール本体が必要な場合は Home Manager 側(pkgs.tigervnc)に追加してください。

  5. claude-code や新興AIツールの表記

  6. Cask名が変更されている、または npm や uv 経由でのインストールが推奨される場合があります。nix-darwin 実行時に「Caskが見つからない」とエラーが出た場合は、uv tool install や npm install -g に切り替えるか、brew search <名前> で公式の正確なCask名をご確認ください。 macOSにおける Microsoft 365(Word、Excel、PowerPoint、Outlookなど)の Office スイートは、Nixpkgs(Nix直入れ)ではなく Homebrew Cask 連携(nix-darwin)経由でインストールするのが最も確実で推奨される方法です。

なぜ Homebrew Cask を使うのか?

  • macOSの制約とライセンス: Microsoft Office はプロプライエタリな大型GUIアプリであり、macOS向けのインストーラー(.pkg / .dmg)として配布されています。
  • メンテナンス性: Nixpkgs 本体の macOS 向け GUI アプリ管理は制限が多く、アップデートの追従やアクティベーション処理の面で Homebrew Cask が事実上の標準として使われています。

設定手順

nix-darwin の configuration.nix(または Homebrew 連携の設定ファイル)に以下のいずれかを追記します。

パターン1: Office 365 スイートを一括インストールする(推奨)

Word, Excel, PowerPoint, Outlook, OneNote が丸ごと入るスイートパッケージ(microsoft-office)を指定します。

# configuration.nix
{ config, pkgs, ... }:

{
  homebrew = {
    enable = true;

    casks = [
      "microsoft-office"  # Microsoft 365 スイート全体
      "microsoft-teams"   # 必要に応じて Teams も追加
    ];
  };
}

パターン2: 必要なアプリだけ個別で指定したい場合

特定のアプリのみに絞りたい場合は、各 Cask 名を個別に記述します。

# configuration.nix
{ config, pkgs, ... }:

{
  homebrew = {
    enable = true;

    casks = [
      "microsoft-word"
      "microsoft-excel"
      "microsoft-powerpoint"
      "microsoft-auto-update" # Officeアプリの自動更新ツール
    ];
  };
}

設定の適用

設定ファイルを編集後、いつもの構築コマンドを実行します。

darwin-rebuild switch --flake ~/.config/nix-darwin

適用が完了すると /Applications に各 Microsoft 365 アプリが配置されます。初回起動時にご自身の Microsoft 365 アカウントでログイン(ライセンス認証)を行うことで利用可能になります。