個人用のNixOS/macOS dotfiles リポジトリです。Nix Flakesを使用してシステム設定を宣言的に管理しています。
このリポジトリは、継続的に進化する、再現可能な開発環境の実現を目的とした個人用dotfiles管理プロジェクトです。
単なる設定のバックアップではなく、所有者と共に成長し、常に最適な状況へと適応し続ける*「生きた作業基盤」*として設計されています。ツールや環境の制約から開発者を解放し、本来の創造的な作業に完全集中できる状態を実現します。
- 摩擦のない作業環境: 環境構築の煩わしさ、OS間の差異、設定変更に伴うリスクを極限まで削減
- 思考の流れを維持: 設定変更による待ち時間や手作業を排除し、開発者の集中力を持続
- アグレッシブな改善: 変更のコストを下げることで、システムの継続的な進化を促進
- 迅速な再現性: 新規ホストのセットアップが、リポジトリのcloneから30分以内に完了
- 完全な可搬性: LinuxとmacOSの間で、作業感に差異が感じられない
- 高速な継続サイクル: 軽微な設定変更から適用完了まで1分以内で完了し、集中力が途切れない
- 体系的な知識管理: 設計思想や決定背景がドキュメント化され、未来の自分が迅速に理解できる
このリポジトリは、複数のホスト(Linux/macOS)にわたるシステム設定をNix Flakesを使って管理する個人用dotfilesです。NixOSとnix-darwinの両方に対応しており、Home Managerを使用してユーザー環境を統合的に管理します。
goal-modelで定義された4つの主要ゴールを技術的に実現する特徴群:
- 高速ビルド: 分散ビルドとキャッシュ利用により、軽微な設定変更を1分以内で適用
- 自動化: pre-commit hooks、CI/CD、タスクランナーによる反復作業の効率化
- モジュラー設計: 再利用可能なコンポーネント構造で影響範囲を限定
- Nix Flakes: 依存関係を固定した宣言的なシステム設定
- クロスプラットフォーム: NixOS(Linux)とnix-darwin(macOS)の統一管理
- Home Manager: ユーザー環境とdotfilesの統合管理
- SOPS: 暗号化された秘密情報の安全な管理と自動復号
- ロールバック機能: Git + Nixによる安全な設定変更とロールバック
- CI/CD: GitHub Actionsによる事前ビルドとテスト
- 副作用の排除: Nixによるクリーンな環境維持
- 問題・改善管理: GitHub Issuesによるアイデアとタスクの体系的管理
- 更新通知: 使用アプリケーションの更新情報の自動通知
- 文書化: 設計思想と決定背景の体系的記録
- lawliet: x86_64-linux デスクトップシステム
- watari: aarch64-darwin (macOS) システム
- ryuk: x86_64-linux ラボメインシステム
- rem: x86_64-linux ラボサブシステム
dotfiles/
├── applications/ # アプリケーション別設定(emacs, neovim, git等)
├── homes/ # Home Manager設定(プラットフォーム別)
├── systems/ # システムレベル設定(プラットフォーム別・ホスト別)
├── modules/ # 再利用可能なモジュール
├── pkgs/ # カスタムパッケージ定義
├── overlays/ # nixpkgsオーバーレイ
├── secrets/ # SOPS暗号化された秘密情報
├── infra/ # Infrastructure as Code(Terraform)
├── flake.nix # メインFlake設定
└── Makefile # ビルドツール設定
- Nix(Flakes有効)
- make(標準で利用可能)
# 現在のシステム設定をビルド
make build
# 全システム設定をビルド
make build-all
# システム設定を適用
nh os switch -H {hostname} # NixOS用
nh darwin switch -H {hostname} # macOS用
# 開発環境シェルに入る
nix develop
# コード整形
nix fmt
# Pre-commitフックを実行
nix flake check# Linux (x86_64) システムのビルド
make x86_64-linux
# macOS (aarch64) システムのビルド
make aarch64-darwin- デフォルトユーザー:
kaki - シェル: Fish
- 認証: GPG agentによるSSH認証
- 日本語入力: fcitx5 + SKK/Mozc(Linux)
- 分散ビルド: クロスプラットフォームビルド対応
- エディタ: Emacs(org-mode設定), Neovim
- ターミナル: Kitty, Wezterm, Alacritty
- ブラウザ: Qutebrowser, Google Chrome, Vivaldi
- Git: lazygit統合
- シェル: Fish + Starship プロンプト
SOPS(age暗号化)を使用して秘密情報を管理:
- メインファイル:
secrets/default.yaml - age キー:
~/.config/sops/age/keys.txt(Linux) - GPG ホーム:
${config.xdg.dataHome}/.gnupg(macOS)
infra/ ディレクトリにTerraformを使用したインフラ設定:
- Cloudflare DNS/トンネル設定
- GitHub リポジトリ管理
goal-modelで定義された達成基準に対する現在の進捗状況:
- ✅ 分散ビルドとキャッシュ: 全ての対象ホストで動作し、ビルド時間を大幅短縮
- ✅ SOPS暗号化: 機密情報の安全な管理と自動復号が実現
- ✅ CI/CD: GitHub Actionsでビルド確認、Cachixでバイナリキャッシュ
- ✅ Garbage Collection: 週次の自動実行で容量問題を回避
- 🔄 軽微な設定変更1分以内: 通常は達成できるが、Emacsビルドがボトルネック
- 🔄 pre-commit hooks: 設定済みだが、具体的な動作範囲の把握が不足
- 🔄 文書化: ゴールモデルは作成済み、詳細な設計思想の記録が課題
- ❌ 30分セットアップ: 新規ホストでの再現性検証が未実施
- ❌ flake自動更新: 手動実行のままで自動化が未完了
- ❌ nur-packages CI: 独自パッケージリポジトリのCI未構築
- フォーマッター: nixfmt、biome、shfmt、stylua、yamlfmt、terraform fmt
- Pre-commitフック: nil (Nix linter)、shellcheck、treefmt
- CI/CD: GitHub Actionsによる全プラットフォームビルド検証
個人用設定のため、参考程度にご利用ください。