Skip to content

T4D4-IU/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

273 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nix Check

T4D4's NixOS Dotfiles

このリポジトリは、NixOS及びHome Managerを使用した、複数環境対応のシステム設定管理用dotfilesです。

✨ 特徴

  • 🏠 ホスト別設定管理: 各マシンの設定を独立して管理
  • 🔄 クロスプラットフォーム対応: Linux/macOS で共通設定を共有
  • 📦 モジュール化: OS共通・OS固有の設定を明確に分離
  • 🛠️ ヘルパーライブラリ: 新しいホストの追加が容易
  • 🔒 型安全: Nix Flakesによる宣言的な設定管理
  • 🐧 WSL/Ubuntu対応: 非NixOS環境でも同じ設定を使用可能
  • 🍎 macOS対応: Apple Silicon・Intel Macでも同じ設定を使用可能

🚀 クイックスタート

NixOS環境

詳細は使用方法セクションを参照

WSL/Ubuntu環境

📘 WSLセットアップガイド を参照してください。

CLI専用のツールとシェル環境を簡単にセットアップできます。

macOS環境

📘 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 (x86_64-linux)

システムレベル (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コードエディター

ホスト: macbook (aarch64-darwin)

ユーザーレベル (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時に自動でリンター/フォーマッターがチェックされます。

🚀 使用方法

初回セットアップ (NixOS)

  1. リポジトリのクローン:
git clone https://github.com/T4D4-IU/dotfiles.git ~/dotfiles
cd ~/dotfiles
  1. 自動セットアップスクリプトの実行: OSとホスト名を自動判定して、NixOSシステム設定・Home Manager設定をすべて適用します。
nix run . -- nixos

初回セットアップ (macOS)

📘 macOSセットアップガイド を参照してください。

簡単な手順:

  1. Nixのインストール:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
  1. リポジトリのクローン:
git clone https://github.com/T4D4-IU/dotfiles.git ~/dotfiles
  1. 自動セットアップスクリプトの実行: 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)へロールバックできます。

1. Home Manager (ユーザー環境) のロールバック

Home Manager は適用するたびに環境の履歴を「世代」として保存しています。

# 過去の世代一覧を確認(アクティブな世代IDや作成日時が表示されます)
home-manager generations

# 以前の世代(例: 世代ID 42)へ即座にロールバック
/nix/store/<hash>-home-manager-generation-42-link/activate

2. システム環境のロールバック

  • 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.username

➕ 新しいホストの追加方法

1. ホスト定義の追加

lib/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
    ];
  };
}

2. ホスト専用ディレクトリの作成

mkdir -p hosts/macbook

3. ホスト設定ファイルの作成

hosts/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;
}

4. flake.nixに追加

flake.nixhomeConfigurations に追加:

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;
  };
};

5. 適用

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の世代を確認
home-manager generations

# 前の世代にロールバック
home-manager switch --flake .#t4d4@nixos --rollback

📊 CI/CD

GitHub Actionsで以下を自動チェック:

🔍 主要なチェック

  • Flake設定の妥当性検証 - メタデータと構造の確認
  • カスタムパッケージのビルド - dfx, haystack-editor
  • NixOSシステム設定の評価 - configuration.nixの検証
  • 複数ホストのHome Manager設定 - nixos, wsl, macbook全てをテスト
  • モジュールの構文チェック - 個別モジュールの独立性確認

🚀 CI/CDワークフロー

Linux (ubuntu-latest):

  • パッケージビルド(並列実行)
  • NixOS設定のドライビルド
  • Home Manager設定(nixos, wsl)のビルド
  • モジュール構文チェック

macOS (macos-latest):

  • Darwin固有モジュールの構文チェック
  • macOS Home Manager設定のビルド

📈 最適化

  • Cachix統合: ビルドキャッシュで高速化
  • 並列実行: 複数ジョブの同時実行
  • 段階的チェック: 軽量チェックから重いビルドへ

📚 参考資料

📝 ライセンス

MIT License

🙏 謝辞

このdotfilesは、以下の記事を参考に複数環境対応を実装しました:

About

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages