9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mac用 Nix、nix-darwin、home-manager セットアップ完全手順 (2024年6月改訂版)

Posted at

前提条件

  • ARM系チップ搭載のMac
  • macOS Sonoma (14.0) 以上

1. Nixのインストール

  1. ターミナルを開き、以下のコマンドを実行:
sh <(curl -L https://nixos.org/nix/install)
  1. インストール完了後、新しいターミナルを開くか、以下のコマンドで環境を更新:
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
  1. Nixのインストールを確認:
nix --version

2. 環境変数の設定

以下のコマンドで必要な環境変数を設定します:

export DARWIN_USER=$(whoami)
export DARWIN_HOST=$(hostname -s)

これらの環境変数を永続化するには、.zshrc.bash_profileに追加することをおすすめします。

3. Flakes機能の有効化

Nix設定ファイルを作成または編集:

mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf

4. プロジェクトの設定

  1. プロジェクトディレクトリを作成:
mkdir ~/nixconfig
cd ~/nixconfig
  1. flake.nixファイルを作成:
{
  description = "Darwin system flake";
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    nix-darwin = {
      url = "github:LnL7/nix-darwin";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };
  outputs = { self, nixpkgs, nix-darwin, home-manager }: 
    let
      darwinUser = builtins.getEnv "DARWIN_USER";
      darwinHost = builtins.getEnv "DARWIN_HOST";
      
      mkDarwinSystem = { hostname, username }: nix-darwin.lib.darwinSystem {
        system = "aarch64-darwin";
        modules = [
          ./configuration.nix
          home-manager.darwinModules.home-manager
          {
            networking.hostName = hostname;
            users.users.${username}.home = "/Users/${username}";
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.users.${username} = { pkgs, lib, ... }: 
              import ./home.nix { inherit pkgs lib username; };
          }
        ];
        specialArgs = { 
          inherit (nixpkgs) lib; 
          inherit username; 
        };
      };
    in {
      darwinConfigurations.${darwinHost} = mkDarwinSystem {
        hostname = darwinHost;
        username = darwinUser;
      };
    };
}
  1. configuration.nixファイルを作成:
{ pkgs, ... }:
{
  # システムにインストールするパッケージ
  environment.systemPackages = with pkgs; [
    vim
    git
  ];

  # Nixデーモンの自動アップグレードを有効化
  services.nix-daemon.enable = true;
  nix.package = pkgs.nix;

  # zshの設定
  programs.zsh.enable = true;

  # 非自由パッケージを許可
  nixpkgs.config.allowUnfree = true;

  # Finder設定
  system.defaults.finder = {
    # 全てのファイル拡張子を表示: trueにすると、すべてのファイルの拡張子が表示されます。
    # ファイルタイプを一目で確認できるため、ファイル管理が容易になります。
    AppleShowAllExtensions = true;

    # 隠しファイルを表示: trueにすると、通常は非表示のファイル(.で始まるファイル)も表示されます。
    # 開発作業や詳細な設定を行う際に便利ですが、通常使用では不要なファイルも表示されるため注意が必要です。
    AppleShowAllFiles = true;

    # デスクトップアイコンの非表示: falseにすると、デスクトップ上のアイコンが非表示になります。
    # クリーンな作業環境を好む場合や、デスクトップの整理を強制する場合に有用です。
    CreateDesktop = false;

    # 拡張子変更時の警告を無効化: falseにすると、ファイル拡張子を変更する際の警告が表示されなくなります。
    # 頻繁にファイル拡張子を変更する作業を行う場合、作業効率が向上します。
    FXEnableExtensionChangeWarning = false;

    # パスバーを表示: trueにすると、Finderウィンドウの下部にファイルパスが表示されます。
    # 現在の位置を把握しやすくなり、ディレクトリ間の移動が容易になります。
    ShowPathbar = true;

    # ステータスバーを表示: trueにすると、Finderウィンドウの下部に選択したアイテムの情報が表示されます。
    # ファイル数や容量などの情報を素早く確認できるため、ファイル管理に役立ちます。
    ShowStatusBar = true;
  };

  # Dock設定
  system.defaults.dock = {
    # Dockの自動非表示: trueの場合、Dockを自動で隠します。
    # これを有効にすると画面を広く使えるため、作業スペースが拡大します。
    autohide = true;

    # 最近使用したアプリケーションの非表示: falseにすると、Dockに最近のアプリが表示されなくなります。
    # プライバシーを重視する場合や、Dockをシンプルに保ちたい場合に有用です。
    show-recents = false;

    # Dockアイコンのサイズ: ピクセル単位でアイコンサイズを設定します。
    # 50pxは中程度のサイズで、見やすさと省スペースのバランスが取れています。
    tilesize = 50;

    # Dockアイコンの拡大機能: trueにすると、マウスオーバー時にアイコンが拡大表示されます。
    # アイコンの識別が容易になり、特に多くのアプリがDockにある場合に便利です。
    magnification = true;

    # 拡大時のアイコンサイズ: マウスオーバー時のアイコンサイズをピクセル単位で設定します。
    # 64pxは適度な拡大サイズで、アイコンの詳細が見やすくなります。
    largesize = 64;

    # Dockの位置: "bottom"、"left"、"right"のいずれかを指定できます。
    # 画面下部に配置すると、一般的なmacOSの外観に近くなります。
    orientation = "bottom";

    # ウィンドウ最小化エフェクト: "scale"は縮小エフェクトを使用します。
    # このエフェクトは視覚的に分かりやすく、システムの応答が速く感じられます。
    mineffect = "scale";

    # アプリケーション起動時のアニメーションを無効化: falseにすると、起動アニメーションが表示されなくなります。
    # システムの応答が速く感じられ、特に低スペックのマシンで有用です。
    launchanim = false;
  };

  # 下位互換性のため(変更時はchangelogを確認)
  system.stateVersion = 4;

  # ターゲットプラットフォーム
  nixpkgs.hostPlatform = "aarch64-darwin";
}
  1. home.nixファイルを作成:
{ pkgs, lib, username, ... }:

{
  home.packages = with pkgs; [
    ripgrep
    fd
    jq
  ];

  # ユーザー情報
  home.username = username;
  # lib.mkForceを使用しているのは、nix-darwinの既知のバグ(Issue #682)に対処するためです。
  # https://github.com/LnL7/nix-darwin/issues/682
  # このバグが修正されたら、単に "/Users/${username}" と設定できるようになる可能性があります。
  home.homeDirectory = lib.mkForce "/Users/${username}";

  # home-managerのバージョン(変更時は注意)
  home.stateVersion = "23.05";

  # home-managerの有効化
  programs.home-manager.enable = true;
}

5. システムの構築と適用

以下のコマンドでシステムを構築し適用します。--impureフラグを使用することで、環境変数を正しく読み取ることができます:

darwin-rebuild switch --flake . --impure

注意: --impureフラグは、ビルド中に環境変数にアクセスすることを許可します。これにより、DARWIN_USERDARWIN_HOSTなどの環境変数を正しく読み取ることができます。

6. 確認

以下のコマンドで、パッケージが正しくインストールされたか確認:

which git
which vim
which fd
which rg
which jq

設定の更新と管理

  • 設定変更後は、必ずdarwin-rebuild switch --flake . --impureを実行して変更を適用してください。
  • システムとパッケージの更新は以下のコマンドで行います:
nix flake update
darwin-rebuild switch --flake . --impure
  • nix-darwinやhome-managerのアップデートの際は、各プロジェクトの変更ログを確認し、必要に応じて設定を調整してください。
  • 定期的に設定ファイル(特にconfiguration.nix)内のコメントを確認し、記載されている設定の説明を参考に、必要に応じて設定をカスタマイズしてください。

トラブルシューティング

設定適用時にエラーが発生した場合は、以下の手順を試してください:

  1. 環境変数が正しく設定されているか確認します:

    echo $DARWIN_USER
    echo $DARWIN_HOST
    
  2. Nixのキャッシュをクリアします:

    nix store gc
    
  3. フラグを追加してビルドを再試行します:

    darwin-rebuild switch --flake . --impure --show-trace --verbose
    
  4. 問題が解決しない場合は、エラーメッセージを注意深く読み、関連する設定ファイル(flake.nix, configuration.nix, home.nix)を確認します。

  5. 最新のnix-darwinやhome-managerのドキュメントを参照し、設定方法に変更がないか確認します。

この手順で、M1 MacにNix、nix-darwin、home-managerの環境が整います。FinderとDockの設定に焦点を当てていますが、必要に応じて他の設定もカスタマイズできます。--impureフラグの使用により、環境変数を適切に扱うことができ、より柔軟な設定が可能になります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?