背景
Nix Flakes 入門 nix-darwin
編です。先日購入した Mac Mini を期待通りに操作できるよう、 Nix 等で環境構築しました。
設定
System Settings
macOS の設定も nix-darwin
から実施できますが、今回は手動で設定しました (出オチ?) 。
英語設定 + JIS キーボード
macOS の言語設定を英語、キーボード設定を JIS にしました。バグなのか、一度言語設定を日本語にしなければ JIS キーボードになりませんでした。
Mission Control
Mission Control のショートカットを有効化しました。これは yabai (後述) よりも高速でデスクトップの切り替えができるため、おすすめです:

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 の切り替えのみ設定しました。

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 が必須の場合が多いです。