NixOSとmacOS (Darwin)用の個人dotfiles。標準的なNix flakeを使用して構成されています。
.
├── systems/ # システム設定
│ ├── nixos/ # NixOS設定
│ │ ├── configurations/ # マシン別設定
│ │ │ └── homeMachine/ # NixOSマシン設定
│ │ └── modules/ # NixOSモジュール
│ │ ├── services/ # サービス設定
│ │ │ ├── services.nix # SSH/Fail2ban/Docker
│ │ │ └── ...
│ │ └── ...
│ └── darwin/ # macOS (Darwin)設定
│ ├── configurations/ # マシン別設定
│ └── modules/ # Darwinモジュール
├── home/ # Home Manager設定
│ ├── profiles/ # ユーザープロファイル
│ │ ├── bunbun/ # bunbunユーザー設定
│ │ └── shinbunbun/ # shinbunbunユーザー設定
│ └── modules/ # Home Managerモジュール
│ ├── development/ # 開発ツール
│ ├── shell/ # シェル関連
│ └── security/ # セキュリティツール
├── shared/ # 共有設定
│ └── config.nix # 中央設定ファイル
├── devshell/ # 開発環境
│ └── default.nix # Nix開発シェル
├── secrets/ # SOPS暗号化シークレット
├── terraform/ # Terraform設定
│ └── README.md # Cloudflare + Authentik Infrastructure as Code
└── flake.nix # Flakeエントリーポイント
- Nix 2.4以降(flakesサポート付き)
- SOPS(シークレット管理用)
- Age(暗号化用)
-
Nix flakesを有効化:
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
-
開発環境に入る:
nix develop
開発環境では以下のツールが利用可能です:
- Nix開発ツール: nix, nixfmt-tree, nil, nixd
- SOPS関連: age, sops, ssh-to-age
- Terraform関連: terraform, terraform-ls, cf-terraforming
- Cloudflare環境変数: SOPSから自動読み込み
-
NixOS設定を適用:
sudo nixos-rebuild switch --flake .#homeMachine
-
Nix flakesを有効化:
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
-
開発環境に入る:
nix develop
開発環境では以下のツールが利用可能です:
- Nix開発ツール: nix, nixfmt-tree, nil, nixd
- SOPS関連: age, sops, ssh-to-age
- Terraform関連: terraform, terraform-ls, cf-terraforming
-
Darwin設定を適用:
darwin-rebuild switch --flake .#macbook
base- 基本的なシステム設定(ブート、Nix設定、ユーザー、NTP)networking- ネットワーク設定(ファイアウォール、Avahi)security- セキュリティ設定(PAM、Polkit、SOPS)k3s- k3s(軽量Kubernetes)設定nfs- NFSサーバー設定system-tools- システムツール(polkit、wireguard-tools、jq、openssl、python3、gnumake)wireguard- WireGuard VPN設定vscode-server- VS Code Server設定(flake inputからの直接インポート)- services/ - サービス設定
- 基盤サービス:
services- OpenSSH/Fail2ban/Docker基盤deploy-user- deploy-rsデプロイユーザーmosh- Mosh(Mobile Shell)
- バックアップ・同期:
obsidian-livesync- Obsidian LiveSync設定routeros-backup- RouterOS設定の自動バックアップ
- 管理・アクセス系:
cockpit- Webベースのシステム管理ツールttyd- Webベースのターミナルエミュレータauthentik- IdP(Identity Provider)unified-cloudflare-tunnel- Cloudflare Tunnel統合設定desktop-cloudflare-tunnel- デスクトップ向けCloudflare Tunnel
- インフラ:
attic- Attic Nixバイナリキャッシュpeer-issuer- WireGuard peer動的発行APIargocd- ArgoCD設定
- 基盤サービス:
Note: 監視・ログ分析スタック(Prometheus、Grafana、Loki、Fluent Bit等)はnixos-observability/nixos-observability-configに移行しています。
base- macOS基本設定とHomebrewoptimise- Nixストア最適化設定wireguard- WireGuard VPN設定node-exporter- Prometheus Node Exporterfluent-bit- Fluent Bitログ収集
ai-tools- AIツール(claude-code)cloud-tools- クラウドツール(Google Cloud SDK)development-tools- 開発ツール(cocoapods - macOSのみ)editors- エディタ設定(vim)
shell-tools- シェル関連ツール(zsh、starship、direnv、lsd)tmux- tmux端末多重化version-control- Git設定
security-tools- セキュリティツール(age、sops)
監視・ログ分析基盤は nixos-observability / nixos-observability-config で管理されており、本リポジトリからflake inputとして参照しています。
各ホスト → Fluent Bit → Loki(homeMachine) → Grafana(homeMachine)
↑
Prometheus(homeMachine) ← Node Exporter(各ホスト)
- Loki (homeMachine): ログの集約と保存
- Fluent Bit (全ホスト): ログ収集エージェント(systemd-journal、macOS Unified Log)
- Prometheus (homeMachine): メトリクス収集
- Node Exporter (全ホスト): ホストメトリクスの公開
- Grafana (homeMachine): 統合ダッシュボードと可視化
このプロジェクトでは、CloudflareおよびAuthentikのインフラをTerraformで管理しています。
- DNS Records: Cloudflare Tunnel向けCNAMEレコード
- Access Applications: Cloudflare Access アプリケーション登録
- Authentik: OAuth2/Proxyプロバイダー、アプリケーション登録、ユーザー・グループ管理、認可ポリシー・バインディング、アウトポスト設定
詳細はTerraform READMEを参照してください。
# 開発シェルに入る(Cloudflare環境変数が自動読み込みされます)
nix develop
# Terraformディレクトリに移動
cd terraform
# 初期化
terraform init
# 変更内容を確認
terraform plan
# 変更を適用
terraform applyshared/config.nixファイルで以下の設定を管理:
- ユーザー名とホームディレクトリ
- ネットワーク設定(ホスト名、IPアドレス、ポート)
- SSH設定
- WireGuard VPN設定
- その他のサービス設定
shared/config.nixに必要な設定を追加systems/nixos/configurations/またはsystems/darwin/configurations/に新しいマシン設定ディレクトリを作成default.nixファイルを作成し、必要なモジュールをインポートflake.nixのnixosConfigurationsまたはdarwinConfigurationsに新しいマシンを追加
このプロジェクトではSOPSとAgeを使用してシークレットを管理しています。
-
Age鍵を生成:
age-keygen -o ~/.config/sops/age/keys.txt -
.sops.yamlに公開鍵を追加 -
シークレットを暗号化:
sops secrets/your-secret.yaml
age.keyFile = "/var/lib/sops-nix/key.txt";
鍵ファイルが正しい場所にあることを確認してください。
nix flake checkエラーメッセージを確認し、必要に応じてnix fmtを実行してください。
MIT License