Nix で管理するマルチプラットフォーム対応dotfiles
macOS、Linux(NixOS / 非NixOS)、WSL2 に対応した宣言的・再現可能な開発環境を構築します。
| プラットフォーム | 管理ツール | 状態 |
|---|---|---|
| macOS (Apple Silicon) | nix-darwin + home-manager | ✅ |
| macOS (Intel) | nix-darwin + home-manager | ✅ |
| Linux (NixOS) | NixOS + home-manager | 🚧 テンプレート |
| Linux (非NixOS) | standalone home-manager | 🚧 テンプレート |
| WSL2 | standalone home-manager | 🚧 テンプレート |
| Windows | winget | ✅ |
# 1. Nixをインストール(Determinate Systems推奨)
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# 2. クローン
git clone https://github.com/ta93abe/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 3. 個人設定を作成
cp personal.nix.example personal.nix
vim personal.nix # hostname, username, git設定を編集
# 4. 適用
nix run .#switch
# 5. Fishをデフォルトシェルに設定
echo $(which fish) | sudo tee -a /etc/shells
chsh -s $(which fish)# 1. Nixをインストール
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# 2. クローン
git clone https://github.com/ta93abe/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 3. 個人設定を作成
cp personal.nix.example personal.nix
vim personal.nix # hostname, username を編集
# 4. flake.nixのhomeConfigurationsを有効化して設定
# (コメントアウトを解除し、自分の設定を追加)
# 5. 適用
home-manager switch --flake .#username@hostname
# 6. Fishをデフォルトシェルに設定
echo $(which fish) | sudo tee -a /etc/shells
chsh -s $(which fish)# 1. dotfilesをクローン
git clone https://github.com/ta93abe/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 2. 個人設定を作成
cp personal.nix.example personal.nix
vim personal.nix
# 3. マシン設定を作成
cp machines/nixos/example.nix machines/nixos/$(hostname).nix
# hardware-configuration.nixをインポート
# 4. flake.nixのnixosConfigurationsを有効化
# 5. 適用
sudo nixos-rebuild switch --flake .#hostname# === Windows側 ===
# 1. WSL2をインストール
wsl --install
# 2. dotfilesをクローン
git clone https://github.com/ta93abe/dotfiles.git
cd dotfiles\windows
# 3. wingetでパッケージをインストール
.\setup.ps1
# === WSL2側(Ubuntu)===
# 上記「Linux(非NixOS / WSL2)」の手順に従うnix run .#switch # 設定を適用
nix run .#build # ビルドのみ(テスト)
nix run .#update # flake inputsを更新sudo nixos-rebuild switch --flake .#hostname
sudo nixos-rebuild build --flake .#hostname # テスト
nix flake update # 更新home-manager switch --flake .#username@hostname
home-manager build --flake .#username@hostname # テスト
nix flake update # 更新# macOS
darwin-rebuild rollback
# NixOS
sudo nixos-rebuild switch --rollback
# home-manager
home-manager generations # 世代一覧
home-manager switch --flake .#username@hostname # 再適用dotfiles/
├── flake.nix # エントリポイント(マルチシステム対応)
├── personal.nix # 個人設定(gitignored)
├── personal.nix.example # 個人設定テンプレート
│
├── modules/
│ ├── common/
│ │ └── nix.nix # Nix基本設定(共通)
│ ├── darwin/
│ │ ├── default.nix # macOSエントリ
│ │ ├── system.nix # Dock, Finder, Touch ID, キーボード
│ │ └── homebrew.nix # Homebrew casks(GUIアプリ)
│ └── nixos/
│ └── default.nix # NixOS共通設定
│
├── home/
│ ├── default.nix # Home Managerエントリ
│ ├── packages.nix # パッケージリスト(プラットフォーム分岐)
│ ├── xdg.nix # Ghostty, Zellij設定
│ └── programs/ # 各プログラム設定
│ ├── fish.nix
│ ├── git.nix
│ ├── starship.nix
│ ├── helix.nix
│ ├── fzf.nix
│ ├── zoxide.nix
│ ├── mcfly.nix
│ └── claude.nix
│
├── machines/
│ ├── darwin/ # macOSマシン固有設定
│ │ └── 000355-M.nix
│ ├── nixos/ # NixOSマシン固有設定
│ │ └── example.nix
│ └── linux/ # 非NixOS Linux設定
│ └── example.nix
│
├── lib/ # ヘルパー関数
│ ├── default.nix
│ ├── mkDarwinSystem.nix
│ ├── mkNixosSystem.nix
│ └── mkHomeConfig.nix
│
└── windows/ # Windows用(winget)
├── packages.json
├── setup.ps1
└── README.md
| カテゴリ | macOS | Linux | Windows |
|---|---|---|---|
| CLIツール | Nix (home-manager) | Nix (home-manager) | WSL2経由でNix |
| GUIアプリ | Homebrew Cask | nixpkgs / Flatpak | winget |
| システム設定 | nix-darwin | NixOS / 手動 | - |
# 1. 検索
nix search nixpkgs <package>
# 2. 追加
# 共通: home/packages.nix の commonPackages
# macOS専用: home/packages.nix の darwinPackages
# Linux専用: home/packages.nix の linuxPackages
# 3. 適用
nix run .#switch # macOS
home-manager switch --flake .#user@host # Linux# 1. modules/darwin/homebrew.nix の casks に追加
# 2. nix run .#switch# 1. パッケージIDを検索
winget search <name>
# 2. windows/packages.json に追加
# 3. winget import -i windows/packages.json| カテゴリ | ツール |
|---|---|
| シェル | Fish, Starship, Zellij |
| エディタ | Helix |
| 検索 | ripgrep, fd, fzf, broot |
| Git | gh, gitui, tig, lefthook |
| 監視 | bottom, procs, bandwhich |
| データ処理 | jq, yq, xsv |
| ネットワーク | xh, dog, nmap, mtr |
| DB | pgcli, mycli, litecli, usql |
| K8s | k9s, helm, kubectx, stern |
| クラウド | awscli, azure-cli, gcloud |
| 言語 | Node.js, Python, Rust, Go, Zig, etc. |
xclip, wl-clipboard, inotify-tools, strace, htop, iotop, ncdu, duf, etc.
cocoapods, Homebrew Casksで管理するGUIアプリ
Tokyo Night で統一:
- Ghostty(ターミナル)
- fzf(ファジーファインダー)
- Zellij(ターミナルマルチプレクサ)
Monokai:
- Starship(プロンプト)
- Helix(エディタ)
mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf# Nixストア全体
nix-collect-garbage -d
# home-managerの古い世代
home-manager expire-generations "-30 days"# 詳細なエラー表示
nix run .#build 2>&1 | less
# 特定パッケージのビルド
nix build nixpkgs#<package> --show-trace# systemdが有効か確認
systemctl --version
# 有効でない場合、/etc/wsl.conf を作成
[boot]
systemd=true
# WSLを再起動
wsl --shutdownmachines/darwin/<hostname>.nixを作成flake.nixのdarwinConfigurationsに追加
machines/nixos/<hostname>.nixを作成hardware-configuration.nixをインポートflake.nixのnixosConfigurationsに追加
machines/linux/<hostname>.nixを作成(オプション)flake.nixのhomeConfigurationsに追加
MIT