背景

Nix Flakes 入門 nix-darwin 編です。先日購入した Mac Mini を期待通りに操作できるよう、 Nix 等で環境構築しました。

設定

System Settings

macOS の設定も nix-darwin から実施できますが、今回は手動で設定しました (出オチ?) 。

英語設定 + JIS キーボード

macOS の言語設定を英語、キーボード設定を JIS にしました。バグなのか、一度言語設定を日本語にしなければ JIS キーボードになりませんでした。

Mission Control

Mission Control のショートカットを有効化しました。これは yabai (後述) よりも高速でデスクトップの切り替えができるため、おすすめです:

2025-07-27-mission-control.png

Nix

nix-darwin の導入

NixOS 用の flake.nix があったので、 Mac 用のユーザを登録します。 nix-darwin の導入後、以下のコマンドで設定を反映できました:

sudo nix run nix-darwin --extra-experimental-features 'flakes nix-command' -- switch --flake .#mac switch

ファイル分割

Nix のファイル構成に関しては、 takeokunn/nixos-configuration を読んでおけば OK です。

Fish をログインシェルにする

nix-darwin#1237 の通りです:

  environment.shells = [ pkgs.fish ];
  programs.fish.enable = true;
  users.knownUsers = [ "mac" ]; # ユーザ名が mac の場合
  users.users.mac.shell = pkgs.fish;
  users.users.mac.uid = 501;

Bash を non-interactive shell にする

少なくとも skhd に関しては、 system-side なシェルを設定することで bash が使われるようになります:

  environment.variables.SHELL = "/bin/bash";

Homebrew 関連の設定

nix-darwin 経由で Homebrew のパッケージも宣言的にインストールできます。インストール時のオプションは、 nix-darwin#314 の通り設定できます。

Emacs

現在の Emacs は macOS (Sequoia) でのビルドに問題があり、各所で issue が立っていました。現在は nixpkgs の unstable ブランチに修正が入っている (nixpkgs#423403) ため、 Nix では特に追加設定無しでインストールできます。

Karabiner Elements

我らが Karabiner Elements ですが、 IME の切り替えのみ設定しました。

2025-07-27-karabiner.png
Figure 1: Karabiner Elements の設定

yabai / skhd

yabai の導入には SIP の無効化script addition の有効化 が必要です。 Script addition の有効化コマンドは、 yabai のサービス起動後に毎回設定が必要です:

sudo nix run nix-darwin --extra-experimental-features 'flakes nix-command' -- switch --flake .#mac switch
+yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
+sudo yabai --load-sa

若干 yabai のレスポンスが悪いので、デスクトップの切り替えでは Mission Control のショートカットを使っています。

まとめ

最低限の macOS の設定を実施しました。 Nix の macOS サポートは人手が足りておらず、特に GUI アプリは Homebrew が必須の場合が多いです。