このリポジトリは、NixOS及びHome Managerを使用した、複数環境対応のシステム設定管理用dotfilesです。
- 🏠 ホスト別設定管理: 各マシンの設定を独立して管理
- 🔄 クロスプラットフォーム対応: Linux/macOS で共通設定を共有
- 📦 モジュール化: OS共通・OS固有の設定を明確に分離
- 🛠️ ヘルパーライブラリ: 新しいホストの追加が容易
- 🔒 型安全: Nix Flakesによる宣言的な設定管理
- 🐧 WSL/Ubuntu対応: 非NixOS環境でも同じ設定を使用可能
- 🍎 macOS対応: Apple Silicon・Intel Macでも同じ設定を使用可能
詳細は使用方法セクションを参照
📘 WSLセットアップガイド を参照してください。
CLI専用のツールとシェル環境を簡単にセットアップできます。
📘 macOSセットアップガイド を参照してください。
Apple Silicon・Intel Macの両方に対応しています。
dotfiles/
├── flake.nix # Flakeエントリーポイント
├── flake.lock # 依存関係のロック
├── docs/ # ドキュメント
│ ├── CI_CD.md # CI/CDパイプライン解説
│ ├── ERROR_FIX.md # エラー修正ログ
│ ├── LINTING.md # リンター・フォーマッター設定
│ ├── TODO.md # タスク管理
│ └── WSL_SETUP.md # WSLセットアップガイド
├── hosts/ # ホスト別設定
│ ├── nixos/ # NixOSデスクトップ
│ │ ├── default.nix # ホスト設定エントリー
│ │ ├── configuration.nix # NixOSシステム設定
│ │ ├── hardware-configuration.nix # ハードウェア設定
│ │ └── home.nix # このホスト用のHome Manager設定
│ ├── wsl/ # WSL環境
│ │ └── home.nix # WSL用のHome Manager設定
│ └── macbook/ # macOS環境
│ └── home.nix # macOS用のHome Manager設定
├── modules/ # 再利用可能なモジュール
│ └── home/ # Home Managerモジュール
│ ├── common/ # OS共通設定
│ │ ├── default.nix # 共通モジュール自動インポート
│ │ ├── cli.nix # CLIツール
│ │ ├── code-server.nix # VSCode Server設定
│ │ ├── development.nix # 開発ツール全般(言語固有環境・補助ツール)
│ │ ├── direnv.nix # direnv設定
│ │ ├── gh.nix # GitHub CLI設定
│ │ ├── git.nix # Git設定
│ │ ├── starship.nix # プロンプト設定
│ │ ├── zoxide.nix # zoxide設定
│ │ └── zsh.nix # Zshシェル
│ ├── linux/ # Linux固有設定
│ │ ├── default.nix # Linuxモジュール自動インポート
│ │ ├── gui.nix # GUIアプリケーション
│ │ └── zed.nix # Zedエディター
│ └── darwin/ # macOS固有設定
│ ├── default.nix # macOSモジュール自動インポート
│ └── gui.nix # macOS GUIアプリケーション
├── lib/ # ヘルパー関数
│ ├── default.nix # ライブラリエントリー
│ ├── helpers.nix # 設定生成ヘルパー
│ └── hosts.nix # ホスト定義
├── pkgs/ # カスタムパッケージ
│ ├── default.nix # パッケージエントリー
│ ├── dfx.nix # DFINITY SDK
│ └── haystack-editor.nix # Haystackエディター
├── configuration.nix # (後方互換用、非推奨)
├── hardware-configuration.nix # (後方互換用、非推奨)
└── home.nix # (後方互換用、非推奨)
システムレベル (NixOS):
- ユーザー:
t4d4 - カーネル: Linux Zen
- ブートローダー: systemd-boot
- デスクトップ環境: GNOME
- ディスプレイマネージャー: GDM
- 日本語環境:
- ロケール: ja_JP.UTF-8
- インプットメソッド: fcitx5 + Mozc
- フォント: Noto CJK、Nerd Fonts
- ネットワーク: Tailscale
- 仮想化: Docker (rootless)
- キーリマップ: xremap (CapsLock→Ctrl, Ctrl+H→Backspace)
ユーザーレベル (Home Manager):
- シェル: Zsh + Starship
- エディター: Helix (MyHelixリポジトリで管理), Zed, Cursor
- ターミナル環境: Zellij + MyHelix (スマホ向け省スペースレイアウト対応)
- 開発ツール: Git, GitHub CLI, direnv
- CLI強化: eza, bat, fd, ripgrep, fzf, zoxide
- GUIアプリ: Brave, Discord, Obsidian, Slack等
- dfx: DFINITY SDK (Internet Computer開発)
- haystack-editor: Haystackコードエディター
ユーザーレベル (Home Manager):
- シェル: Zsh + Starship
- エディター: Helix (MyHelix経由)
- 開発ツール: Git, GitHub CLI, direnv
- CLI強化: eza, bat, fd, ripgrep, fzf, zoxide
- GUIアプリ: Brave, Chrome, Discord, Ghostty, Karabiner, Notion, Obsidian, OneDrive, Orbstack, Postman, Prism Launcher, Raycast, Rectangle, Spotify, Zed等
このプロジェクトでは、Nixコードの品質を保つために以下のツールを使用:
- alejandra: コードフォーマッター
- statix: リンター(アンチパターン検出)
- deadnix: 未使用コード検出
詳細は 📘 リンター・フォーマッター設定 を参照。
# 開発シェルに入る(pre-commitフックが自動設定される)
nix developツールを個別に実行したい場合は、nix develop でシェルに入った後に以下のコマンドが使用できます。
# フォーマットの適用
alejandra .
# リンターの実行
statix check .
# 未使用コードの検出
deadnix .
# すべてのチェックを全ファイルに対して実行
pre-commit run --all-files開発用シェルに入らずに一時的に実行したい場合は、nix run を使用します。
# ワンショットでのフォーマット適用
nix run nixpkgs#alejandra -- .Push時に自動でリンター/フォーマッターがチェックされます。
- リポジトリのクローン:
git clone https://github.com/T4D4-IU/dotfiles.git ~/dotfiles
cd ~/dotfiles- 自動セットアップスクリプトの実行: OSとホスト名を自動判定して、NixOSシステム設定・Home Manager設定をすべて適用します。
nix run . -- nixos📘 macOSセットアップガイド を参照してください。
簡単な手順:
- Nixのインストール:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install- リポジトリのクローン:
git clone https://github.com/T4D4-IU/dotfiles.git ~/dotfiles- 自動セットアップスクリプトの実行: macOS(nix-darwin)およびHome Managerの設定を一括で適用します。
cd ~/dotfiles
nix run . -- macbook設定変更後の適用: すべての環境(NixOS, macOS, WSL)で以下のコマンドを実行することで、現在のマシンの設定が一括で更新されます。
cd ~/dotfiles
nix run . -- $(hostname -s)依存関係の更新:
# flake.lockを更新
cd ~/dotfiles
nix flake update
# 更新後に適用
nix run . -- $(hostname -s)もし設定の更新によってシステムやユーザー環境の挙動がおかしくなった場合は、以下の方法で以前の正常な世代(Generation)へロールバックできます。
Home Manager は適用するたびに環境の履歴を「世代」として保存しています。
# 過去の世代一覧を確認(アクティブな世代IDや作成日時が表示されます)
home-manager generations
# 以前の世代(例: 世代ID 42)へ即座にロールバック
/nix/store/<hash>-home-manager-generation-42-link/activate- NixOS (Linux): PC起動時のブートローダーメニューから以前の正常だった世代を選択して起動できます。起動後、
sudo nixos-rebuild switch --rollbackでその世代をデフォルトに固定できます。 - nix-darwin (macOS): 以下のコマンドを実行することで、macOSのシステム設定を以前の世代に戻せます。
darwin-rebuild --rollback
# Flake全体の検証(注意: ビルドを実行するため時間がかかります)
nix flake check
# 構造の確認のみ
nix flake show
# 設定の評価のみ
nix eval .#nixosConfigurations.nixos.config.networking.hostName
nix eval .#homeConfigurations.\"t4d4@nixos\".config.home.usernamelib/hosts.nix に新しいホストを追加:
{
# 既存のnixosホスト
nixos = { ... };
# 新しいホスト(例: MacBook)
macbook = {
system = "aarch64-darwin";
hostname = "macbook";
username = "t4d4";
homeDirectory = "/Users/t4d4";
features = {
gui = true;
development = true;
};
homeModules = [
../hosts/macbook/home.nix
];
};
}mkdir -p hosts/macbookhosts/macbook/home.nix:
{ config, pkgs, ... }:
{
home.username = "t4d4";
home.homeDirectory = "/Users/t4d4";
home.stateVersion = "24.11";
imports = [
../../modules/home/common # 共通設定
../../modules/home/darwin # macOS専用設定
];
programs.home-manager.enable = true;
nixpkgs.config.allowUnfree = true;
}flake.nix の homeConfigurations に追加:
homeConfigurations = {
"t4d4@nixos" = helpers.mkHomeConfiguration {
inherit inputs;
system = hosts.nixos.system;
username = hosts.nixos.username;
homeDirectory = hosts.nixos.homeDirectory;
modules = hosts.nixos.homeModules;
};
# 新しいホスト
"t4d4@macbook" = helpers.mkHomeConfiguration {
inherit inputs;
system = hosts.macbook.system;
username = hosts.macbook.username;
homeDirectory = hosts.macbook.homeDirectory;
modules = hosts.macbook.homeModules;
};
};nix run . -- macbook# 古いgenerationを削除
nix-collect-garbage -d
# システム全体のガベージコレクション (要root)
sudo nix-collect-garbage -d
# ストレージ最適化
sudo nix-store --optimise# 詳細なエラー情報を表示
nix flake check --show-trace
# 特定の設定を評価
nix eval .#nixosConfigurations.nixos.config.system.build.toplevel --show-trace# Home Managerの世代を確認
home-manager generations
# 前の世代にロールバック
home-manager switch --flake .#t4d4@nixos --rollbackGitHub Actionsで以下を自動チェック:
- ✅ Flake設定の妥当性検証 - メタデータと構造の確認
- ✅ カスタムパッケージのビルド - dfx, haystack-editor
- ✅ NixOSシステム設定の評価 - configuration.nixの検証
- ✅ 複数ホストのHome Manager設定 - nixos, wsl, macbook全てをテスト
- ✅ モジュールの構文チェック - 個別モジュールの独立性確認
Linux (ubuntu-latest):
- パッケージビルド(並列実行)
- NixOS設定のドライビルド
- Home Manager設定(nixos, wsl)のビルド
- モジュール構文チェック
macOS (macos-latest):
- Darwin固有モジュールの構文チェック
- macOS Home Manager設定のビルド
- Cachix統合: ビルドキャッシュで高速化
- 並列実行: 複数ジョブの同時実行
- 段階的チェック: 軽量チェックから重いビルドへ
MIT License
このdotfilesは、以下の記事を参考に複数環境対応を実装しました: