はじめに
home-manager を使用した Linux (Ubuntu / WSL) 環境向けの dotfiles リポジトリです。
概要
- 対象OS: Linux (Ubuntu / Windows Subsystem for Linux)
- ファイル管理: home-manager (Nix Flake)
- パッケージ管理: Nix + home-manager
- シークレット管理: Doppler (GPG/SSH キーも含む)
- シェル: zsh
管理対象と構成
具体的なディレクトリ構成やファイル一覧は変更頻度が高く、この文書と二重管理すると必ず乖離します。
最新の構造は CLAUDE.md と各ディレクトリの README・AGENTS.md を正本としてください。
詳細な配置ルールは config/AGENTS.md と config/README.md を参照してください。
プロファイルによる環境の使い分け(personal / work)
flake.nix の各マシン定義は profile に "personal" または "work" を持ち、
home.nix の profileImports がこの値に応じて import するモジュールを切り替えます。
業務用マシンの設定を追加・変更する場合
- 差分は
if分岐ではなくprofileImports = { personal = [...]; work = [...]; }というテーブルで 列挙する方針です。個別の module 内でprofileを見て分岐させることはしません。 - 実マシンの
profileはflake.nixのmachines/darwinMachinesに定義します。
セットアップ手順
前提条件
- Ubuntu / Debian 系 Linux または WSL
curlがインストールされていること- Doppler CLI がインストール済みで
doppler loginによるログインが完了していること(個人アカウントのブラウザ認証のみで完結します)- CA証明書・GPG鍵・SSH鍵は Doppler(project
keys, configprd)から自動取得されます。未ログインのまま進めると、これらの手順は警告を出して silently スキップされ、鍵なしの状態でセットアップが完了してしまいます。
- CA証明書・GPG鍵・SSH鍵は Doppler(project
1. リポジトリをクローン
git clone https://github.com/rito528/dotfiles.git ~/dotfiles
cd ~/dotfiles
2. セットアップスクリプトを実行
./setup.sh
3. シェルを再起動
Nix をインストールした場合は、シェルを再起動するか以下を実行してください:
. /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
macOS (nix-darwin) の場合
現状 setup.sh は Ubuntu/WSL 専用です。macOS では Determinate Nix 等で Nix 本体を別途導入したうえで、nix-darwin を直接使います。
git clone https://github.com/rito528/dotfiles.git ~/dotfiles
cd ~/dotfiles
# 初回のみ: nix-darwin をブートストラップする
sudo nix run nix-darwin -- switch --flake .#<エントリ名>
# 2回目以降
darwin-rebuild switch --flake .#<エントリ名>
<エントリ名> は flake.nix の darwinMachines に定義したキーです。新しい Mac を追加する場合は、ここに実マシンのエントリを追加してください。
modules/darwin/default.nix で homebrew.enable = true にしているため、Homebrew(未導入なら要インストール)経由で karabiner-elements などの cask も導入されます。
Karabiner-Elements の初期設定
config/karabiner/ のキーリマップルールは配置されるだけで自動有効化はされないため、初回のみ以下を行ってください。
- 初回起動時に表示される入力監視の権限許可を許可する
- Karabiner-Elements の「Complex Modifications」タブから「Add rule」を行い、配置されたルールを有効化する
Ghostty
macOS ではターミナルとして Ghostty を導入します(modules/ghostty.nix)。タブ・分割まわりのキーバインドは Windows Terminal に合わせてあります。
- アプリ本体は
~/Applications/Home Manager Apps/Ghostty.appに実体コピーされます(targets.darwin.copyApps.enable)。symlink のままだと Spotlight がインデックスせず、Spotlight や Launchpad から見つからないためです。 - 設定は
~/.config/ghostty/configに生成されます。darwin-rebuild switchのたびにghostty +validate-configで検証されるため、キー名を間違えると切り替え時に検出されます。
日常操作
セットアップ後、設定を変更した際は以下のコマンドで反映・確認します。
# 設定を適用
home-manager switch --flake .
# ドライランで確認(実際には変更しない)
home-manager build --flake .
# 世代の一覧
home-manager generations
Codex と Claude Code から Grafana MCP を使う
mcp-grafana は Nix パッケージとしてインストールされ、Codex と Claude Code が同じ
起動設定を使います。起動時に Doppler から必要な環境変数を受け取り、読み取り専用
モードで Grafana に接続します。あらかじめ Doppler CLI へログインしてください。
- Grafana に最小限の RBAC 権限を持つ Service Account を作成し、トークンを発行します。
- Doppler の project
mcp、configprdにGRAFANA_URLとGRAFANA_SERVICE_ACCOUNT_TOKENの 2 変数だけを登録します。 - Home Manager の設定を反映して、各クライアントから MCP サーバーを確認します。
トークンの値を dotfiles に保存したり、Codex の親プロセスに設定したりしません。
home-manager switch --flake .
codex mcp list
claude mcp list
Codex と Claude Code を再起動した後、それぞれの /mcp でも接続状態を確認できます。
Grafana Cloud ではスタックの URL を GRAFANA_URL に設定します。ホスト上の Grafana
へ接続する場合は、http://localhost:3000 のような URL を指定できます。
--disable-write は誤操作を防ぐための補助策であり、Grafana 側の RBAC に代わるものでは
ありません。MCP サーバーは必須扱いにしていないため、Doppler や Grafana への接続に
失敗しても Codex や Claude Code 全体の起動は止まりません。
開発環境テンプレート
プロジェクトごとに独立した Nix 開発環境を提供するテンプレートを管理しています(templates/ 参照)。
Neovim の Treesitter parser runtime は 2 層で管理します。
- Home Manager:
lua,markdown,markdown_inline,json,yaml,tomlのような共通 grammar を配る
- template devShell:
rust,sql,typescript,javascript,scala,hclのような project 固有 grammar を追加する
Neovim 本体の設定正本は modules/neovim/ にあります。
自分のプロジェクトで使う場合
# プロジェクトディレクトリで初期化(例)
nix flake init -t github:rito528/dotfiles#seichi-infra
direnv との連携
direnv は personal プロファイル限定です(modules/direnv.nix)。work プロファイルでは有効になりません。
プロジェクトディレクトリに .envrc を作成することで、ディレクトリに入ると自動的に開発環境が有効になります:
# テンプレートで初期化したプロジェクトの場合
echo "use flake" > .envrc
direnv allow
# dotfiles のテンプレートを直接参照する場合
echo "use flake 'github:rito528/dotfiles?dir=templates/rust'" > .envrc
direnv allow
.envrcはプロジェクト固有の設定のため、global gitignore に追加することを推奨します。
nix-init-env コマンド
nix-init-env は、プロジェクトディレクトリに .envrc を対話的に生成するコマンドです。
このリポジトリで管理されているテンプレート一覧を取得し、選択した内容で .envrc を作成します。
# プロジェクトディレクトリで実行
nix-init-env
- fzf がインストールされている場合はインタラクティブに選択できます
localを選択するとuse flake(ローカル flake 参照)が生成されます- それ以外を選択すると
use flake 'github:rito528/dotfiles#<template>'が生成されます .envrcが既に存在する場合は上書き確認を行います- 生成後、
direnv allowを実行するか確認します