Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

はじめに

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.mdconfig/README.md を参照してください。

プロファイルによる環境の使い分け(personal / work)

flake.nix の各マシン定義は profile"personal" または "work" を持ち、 home.nixprofileImports がこの値に応じて import するモジュールを切り替えます。

業務用マシンの設定を追加・変更する場合

  • 差分は if 分岐ではなく profileImports = { personal = [...]; work = [...]; } というテーブルで 列挙する方針です。個別の module 内で profile を見て分岐させることはしません。
  • 実マシンの profileflake.nixmachines / darwinMachines に定義します。

セットアップ手順

前提条件

  • Ubuntu / Debian 系 Linux または WSL
  • curl がインストールされていること
  • Doppler CLI がインストール済みで doppler login によるログインが完了していること(個人アカウントのブラウザ認証のみで完結します)
    • CA証明書・GPG鍵・SSH鍵は Doppler(project keys, config prd)から自動取得されます。未ログインのまま進めると、これらの手順は警告を出して silently スキップされ、鍵なしの状態でセットアップが完了してしまいます。

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.nixdarwinMachines に定義したキーです。新しい Mac を追加する場合は、ここに実マシンのエントリを追加してください。

modules/darwin/default.nixhomebrew.enable = true にしているため、Homebrew(未導入なら要インストール)経由で karabiner-elements などの cask も導入されます。

Karabiner-Elements の初期設定

config/karabiner/ のキーリマップルールは配置されるだけで自動有効化はされないため、初回のみ以下を行ってください。

  1. 初回起動時に表示される入力監視の権限許可を許可する
  2. 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 へログインしてください。

  1. Grafana に最小限の RBAC 権限を持つ Service Account を作成し、トークンを発行します。
  2. Doppler の project mcp、config prdGRAFANA_URLGRAFANA_SERVICE_ACCOUNT_TOKEN の 2 変数だけを登録します。
  3. 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 を実行するか確認します