Ubuntu / macOS 両対応の個人用設定ファイル群。複数マシン間で同期する。
~/dotfiles/
├── install.sh # セットアップスクリプト(idempotent)
├── reset-tools.sh # 言語ツール/AI CLI を一括リセットするスクリプト
├── .env.example # .env のテンプレート
├── .env # 実体(gitignore 済、~/.env はこれへのシンボリックリンク)
├── claude-mcp/
│ └── mcp.json # Claude Code MCP 設定(${VAR} で env 参照、~/.mcp.json はこれへのシンボリックリンク)
├── .claude/ # → ~/.claude(CLAUDE.md, agents/, skills/, settings.json 等)
├── nvim/ # → ~/.config/nvim
├── tmux/ # → ~/.config/tmux
├── gh-dash/ # → ~/.config/gh-dash (GitHub Dashboard CLI)
└── fish/ # → ~/.config/fish
├── config.fish
├── fish_plugins
├── conf.d/
│ └── secrets.fish # ~/.env を読み込んで env 変数化する loader
├── completions/
├── functions/
└── themes/
シェルにセットしたい環境変数は secret / 非secret を問わず すべて ~/dotfiles/.env に集約する:
# ~/dotfiles/.env (gitignore 済み、~/.env はここへのシンボリックリンク)
GEMINI_API_KEY=xxxxx
OPENAI_API_KEY=xxxxx
SUPABASE_ACCESS_TOKEN=xxxxx
# 非secret も同様にここに
EDITOR=nvim
SOME_TOOL_HOME=/opt/some-tool- fish 起動時に
conf.d/secrets.fishが~/.env(→~/dotfiles/.env)を読み込んでset -gxする claude-mcp/mcp.jsonの${SUPABASE_ACCESS_TOKEN}等の参照もこの env から解決されるconfig.fish等に env 変数を直書きせず、必ず.env経由で設定する
git clone git@github.com:ousiass/dotfiles.git ~/dotfiles
cd ~/dotfiles
# 1. .env を作成して API キー等を記入(install.sh の前に必須)
cp .env.example .env
$EDITOR .env
# 2. セットアップ実行
./install.shinstall.sh は以下を行う:
- OS 検出(Ubuntu / macOS)
~/dotfiles/.envの存在チェック(無ければエラーで停止)- macOS の場合 Homebrew を未導入ならインストール
- システムパッケージ(fish, tmux, neovim, git, curl, rsync, Linux のみ xclip)を
aptまたはbrewで - 言語ツールを公式インストーラで(未導入のもののみ):
- uv (Python パッケージマネージャ)
- bun (JavaScript runtime/manager)
- rustup (Rust toolchain manager)
- fnm (Fast Node Manager, Rust 製の nvm 代替)
- Go (Linux: 公式 tarball を
/usr/local/goへ / macOS: brew)
- AI CLI ツール(未導入のもののみ):
- Claude Code (公式 curl インストーラ)
- OpenAI Codex CLI (
bun install -g @openai/codex) - Gemini CLI (
bun install -g @google/gemini-cli)
- 各ツールのバイナリパスを fish の
fish_user_paths(universal) に追加 - 既存の
~/.config/{nvim,tmux,fish,gh-dash},~/.claude,~/.mcp.json,~/.envを*.bak.<日付>にバックアップ - dotfiles を該当パスにシンボリックリンク(
~/.env→~/dotfiles/.env、~/.mcp.json→~/dotfiles/claude-mcp/mcp.json等) ~/.claudeのランタイムデータ(履歴・セッション等)をバックアップから dotfiles 側に移行(既存は上書きしない)- fisher(fish プラグインマネージャ)をインストール →
fish_pluginsの内容を反映 - fnm 経由で Node.js LTS をインストールしデフォルトに設定
- nvim プラグインを headless で同期(
lazy.nvim) - ログインシェルを fish に変更(必要時のみ)
何度実行しても安全(既にインストール済 / リンク済みならスキップ)。
cd ~/dotfiles
git pull
# シンボリックリンク経由で即反映reset-tools.sh で言語ツール・AI CLI 一式を削除して install.sh で再インストール:
bash ~/dotfiles/reset-tools.shCLAUDECODE=1を検出して Claude Code セッション中は自動的に拒否- 削除対象: uv / bun (codex/gemini 含む) / rustup / fnm + Node / Go / Claude Code
- 削除しないもの: fish/tmux/neovim/git, ~/.env, ~/.claude のデータ, シンボリックリンク
nvim設定は LazyVim starter ベース。初回起動時にlazy.nvimがプラグインを自動取得するfish_variables*はマシン依存の状態ファイルで git 管理外.claude/{history.jsonl,projects/,sessions/,...}はランタイムデータで git 管理外(claude-config の.gitignoreを踏襲)claude-mcp/mcp.jsonの${VAR}参照は Claude Code の env 展開機能を利用。fish 経由で起動した Claude Code は~/.env(→~/dotfiles/.env)の値を引き継ぐ- Node.js は
fnm(Rust 製、nvm 代替)で管理。fish/conf.d/fnm.fishがfnm env --use-on-cdを読み込み、.nvmrc/.node-versionのあるディレクトリで自動切替 - tmux クリップボードは OS 自動分岐(Linux:
xclip/ macOS:pbcopy)