Mac OS + nix-darwinで綺麗なシステムを作る

Nixとは

nixos.org

Nix is a tool that takes a unique approach to package management and system configuration. Learn how to make reproducible, declarative and reliable systems. 

Nixはシステムの設定とパッケージ管理をするためのツールです。NixOSは、Nixによって提供されるパッケージのみで構成されたLinuxです。

本記事では、NixのMacOSDarwin)用モジュールであるnix-darwinを用いてMacOSを綺麗に設定する方法を紹介します。尚、この作業を行う前に重要なファイルをバックアップしてMac OSクリーンインストールを行うことをお勧めします。これは、OSをできる限りNixに依存させるためです。買ったばかりのMacで、何も設定していなければこの作業は不要です。また、外部のソフトウェア(Homebrew含む)はまだインストールしないでください。

 

Nixのインストール

ターミナルアプリを開いて、以下のコマンドを実行してください。(管理者権限が必要)

sh <(curl -L https://nixos.org/nix/install)

画面に表示された案内に従ってインストールを完了させてください。

nix-darwinのインストール

以下のコマンドを実行してください。

nix-build https://github.com/LnL7/nix-darwin/archive/master.tar.gz -A installer

resultというディレクトリが作られます。その中のコマンドを実行します。

./result/bin/darwin-installer

画面上の指示に従ってインストールを完了させてください。実行が完了したら、resultディレクトリは削除しても大丈夫です。

nix-darwinの設定

以下のコマンドを実行してください。(nanoでも可。この時点では必ずMac OSに組み込まれたパッケージのみを用いてください。Homebrewを用いてのパッケージ管理もNix内で完結します。)

vi ~/.nixpkgs/darwin-configuration.nix

エディタが開いたら、下のコードをコピペしてください。

{ pkgs, ... }:
{
  # List packages installed in system profile. To search by name, run:
  # $ nix-env -qaP | grep wget
  environment.systemPackages =
    [ pkgs.vim
    ];

  # Auto upgrade nix package and the daemon service.
  services.nix-daemon.enable = true;
  nix.package = pkgs.nix;
}

保存してエディタを終了してください。

エディタが終了したら、以下のコマンドを実行してください。

darwin-rebuild switch

これで、vimがインストールされました。

Homebrewとの連携

以下のコードを~/.nixpkgs/darwin-configuration.nixの二個目の {}内に追記してください。

    homebrew = {
      enable = true;
      casks = [
        "firefox"
      ];
    };

全体的にこのようになれば大丈夫です。

{ pkgs, ... }:
{
  # List packages installed in system profile. To search by name, run:
  # $ nix-env -qaP | grep wget
  environment.systemPackages =
    [ pkgs.vim
    ];
  homebrew = {
    enable = true;
    casks = [
      "firefox"
    ];
  };
  # Auto upgrade nix package and the daemon service.
  services.nix-daemon.enable = true;
  nix.package = pkgs.nix;
}

再度darwin-rebuild switchを実行してください。

おめでとうございます。Firefoxが勝手にインストールされました。