前提条件
- ARM系チップ搭載のMac
- macOS Sonoma (14.0) 以上
1. Nixのインストール
- ターミナルを開き、以下のコマンドを実行:
sh <(curl -L https://nixos.org/nix/install)
- インストール完了後、新しいターミナルを開くか、以下のコマンドで環境を更新:
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
- 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. プロジェクトの設定
- プロジェクトディレクトリを作成:
mkdir ~/nixconfig
cd ~/nixconfig
-
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;
};
};
}
-
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";
}
-
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_USER
やDARWIN_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
)内のコメントを確認し、記載されている設定の説明を参考に、必要に応じて設定をカスタマイズしてください。
トラブルシューティング
設定適用時にエラーが発生した場合は、以下の手順を試してください:
-
環境変数が正しく設定されているか確認します:
echo $DARWIN_USER echo $DARWIN_HOST
-
Nixのキャッシュをクリアします:
nix store gc
-
フラグを追加してビルドを再試行します:
darwin-rebuild switch --flake . --impure --show-trace --verbose
-
問題が解決しない場合は、エラーメッセージを注意深く読み、関連する設定ファイル(
flake.nix
,configuration.nix
,home.nix
)を確認します。 -
最新のnix-darwinやhome-managerのドキュメントを参照し、設定方法に変更がないか確認します。
この手順で、M1 MacにNix、nix-darwin、home-managerの環境が整います。FinderとDockの設定に焦点を当てていますが、必要に応じて他の設定もカスタマイズできます。--impure
フラグの使用により、環境変数を適切に扱うことができ、より柔軟な設定が可能になります。