home-manager を使用した Linux (Ubuntu / WSL) 環境向けの dotfiles リポジトリです。
- 対象OS: Linux (Ubuntu / Windows Subsystem for Linux)
- ファイル管理: home-manager (Nix Flake)
- パッケージ管理: Nix + home-manager
- シークレット管理: Doppler (GPG/SSH キーも含む)
- シェル: zsh
dotfiles/
├── .github/workflows/ # GitHub Actions CI 定義
│ ├── lint.yaml # shellcheck・nixfmt Lint
│ ├── integration-test.yaml # Cachix を使った home-manager ビルド検証
│ ├── nix.yaml # Nix flake check
│ ├── nix-update-pr.yaml # Renovate 時のハッシュ自動更新
│ ├── update-flake-lock.yaml # 週次 flake.lock 更新
│ ├── e2e-setup-test.yaml # セットアップ E2E テスト
│ └── renovate.yaml # Renovate 設定
├── config/ # home-manager が配置する設定ファイル群
│ ├── git/
│ │ └── hooks/
│ │ └── pre-commit # Git pre-commit フック (gitleaks)
│ ├── claude/ # Claude Code 設定
│ │ ├── hooks/notify.sh # WSL 向け Windows Toast 通知
│ │ ├── settings.json # フック・プラグイン設定
│ │ └── skills/ # Claude Code スキル定義
├── nix/ # Nix Flake + home-manager 設定
│ ├── flake.nix # フレーク定義
│ ├── home.nix # パッケージ・ファイル配置の宣言
│ └── modules/ # 機能別 Nix モジュール
│ ├── packages.nix # コアパッケージ
│ ├── git.nix # Git 設定・GPG 署名
│ ├── gpg.nix # GPG/SSH キー管理 (Doppler)
│ ├── shell.nix # zsh・starship・direnv
│ ├── ssh.nix # SSH 設定
│ ├── claude.nix # Claude Code 設定配置
│ ├── gitleaks.nix # gitleaks
│ ├── npm/ # npm/pnpm パッケージ管理
│ │ ├── default.nix
│ │ └── packages/ # パッケージ定義 (例: difit.nix)
│ ├── packages/ # カスタムパッケージ (actrun, git-wt など)
│ └── scripts/ # カスタムスクリプト
├── install/ # セットアップスクリプト
│ ├── common/ # OS 共通スクリプト (nix.sh, home-manager.sh, chsh-zsh.sh, setup-local-hooks.sh)
│ └── ubuntu/ # Ubuntu / Debian 系固有スクリプト
└── setup.sh # セットアップエントリポイント
- Ubuntu / Debian 系 Linux または WSL
curlがインストールされていること
git clone https://github.com/rito528/dotfiles.git ~/dotfiles
cd ~/dotfiles./setup.shNix をインストールした場合は、シェルを再起動するか以下を実行してください:
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh各インストールスクリプトは単体でも実行可能です(冪等性あり):
# Ubuntu パッケージのみインストール
./install/ubuntu/packages.sh
# Nix のみインストール
./install/common/nix.sh
# home-manager 設定の適用のみ
./install/common/home-manager.sh| カテゴリ | ソースファイル | 展開先 |
|---|---|---|
| Shell | nix/modules/shell.nix (programs.zsh) |
宣言的管理 (ファイルなし) |
| Git hooks | config/git/hooks/pre-commit |
~/.config/git/hooks/pre-commit |
| Claude Code | config/claude/ |
~/.claude/ |
シークレット検出には gitleaks を使用しています(pre-commit フックで実行)。
ファイルの配置は nix/home.nix の home.file で宣言的に管理されています。
# 設定を適用
home-manager switch --flake ./nix
# ドライランで確認(実際には変更しない)
home-manager build --flake ./nix
# 世代の一覧
home-manager generationsプロジェクトごとに独立した Nix 開発環境を提供するテンプレートを管理しています。
rustscalatypescript
# プロジェクトディレクトリで初期化
nix flake init -t github:rito528/dotfiles?dir=nix#rust
nix flake init -t github:rito528/dotfiles?dir=nix#scala
nix flake init -t github:rito528/dotfiles?dir=nix#typescript# Rust 環境に入る
nix develop 'github:rito528/dotfiles?dir=nix#rust'
# Scala 環境に入る
nix develop 'github:rito528/dotfiles?dir=nix#scala'
# TypeScript 環境に入る
nix develop 'github:rito528/dotfiles?dir=nix#typescript'プロジェクトディレクトリに .envrc を作成することで、ディレクトリに入ると自動的に開発環境が有効になります:
echo "use flake" > .envrc
direnv allow
.envrcはプロジェクト固有の設定のため、global gitignore に追加することを推奨します。