Skip to content

skmtkytr/dotfiles-old

Repository files navigation

dotfiles

リモート devcontainer 方式のシンクライアント開発環境。 ローカル (Mac) はターミナル + nvim client のみ。実際の開発はリモートサーバ上の Docker コンテナ内で行う。

アーキテクチャ

[ローカル Mac]                         [リモートサーバ]
 Terminal + nvim --remote-ui  <-SSH->   Docker host
 devup / devfish / devnvimserver         ├── Container (owner/project)
                                         │   ├── /workspace (volume)
                                         │   ├── ~/dotfiles (GitHub から clone)
                                         │   └── nvim server :6666
                                         └── 共有 volumes (mise, nvim, fish, ghq, gh)

セットアップ

前提条件

  • macOS または Linux (Debian/Ubuntu, Arch Linux)
  • リモートサーバへの SSH 鍵認証 (1Password SSH agent 推奨)

ワンライナーインストール

curl -fsSL https://raw.githubusercontent.com/skmtkytr/dotfiles/master/install.sh | bash

以下を自動で行う:

  1. 最小限のパッケージインストール (git, fish, socat, tmux 等)
  2. dotfiles clone (~/.ghq/github.com/skmtkytr/dotfiles)
  3. Brewfile からパッケージ一括インストール (macOS のみ)
  4. シンボリックリンク展開 (~/.configdotfiles/config)
  5. mise でクロスプラットフォーム CLI ツールをインストール
  6. fisher プラグインインストール
  7. macOS デフォルト設定 (Spotlight ショートカット無効化, Dock 整理)

手動インストール

git clone https://github.com/skmtkytr/dotfiles.git ~/.ghq/github.com/skmtkytr/dotfiles
bash ~/.ghq/github.com/skmtkytr/dotfiles/install.sh

パッケージ管理

CLI ツールは mise で一元管理し、Brewfile には mise で管理できないものだけを入れる。

管理元 対象
config/mise/config.toml クロスプラットフォーム CLI ツール (bat, eza, fd, fzf, gh, ghq, ripgrep, starship, lazygit, claude-code 等)
config/Brewfile macOS 専用: システムツール (fish, neovim, tmux, docker), GUI アプリ (cask), フォント
# mise ツールの更新
mise install

# Brewfile の適用 (macOS)
brew bundle --file=~/.config/Brewfile

シンボリックリンク

~/.config ディレクトリ全体を dotfiles/config へのシンボリックリンクにする。 macOS (install.sh) でもコンテナ内 (setup.sh) でも同じ方式。

~/.config      → dotfiles/config/
  ├── tmux/tmux.conf     (tmux 3.1+ 自動検出)
  ├── git/config         (git 自動検出)
  └── ...
~/.claude      → ~/.config/claude
~/.ssh/agent.sock → 1Password SSH agent socket (macOS)

使い方

コンテナ起動

# ghq ディレクトリ内ならプロジェクトを自動検出
cd ~/.ghq/github.com/owner/repo
devup

# 明示的に指定
devup owner/repo

# ホストも明示的に指定
devup owner/repo --host user@server

# 新しい GitHub リポジトリを作成して起動
devup --new myproject --host user@server

# コンテナ再作成
devup owner/repo --remove-existing-container

# イメージ再ビルド (キャッシュなし)
devup owner/repo --rebuild-no-cache

# ローカルモード (カレントディレクトリ)
devup  # ghq外で実行

ホスト解決順序

  1. --host 引数
  2. 前回の devup で保存されたメタファイル (~/.devcontainers/<owner>/<repo>/.devup-meta)
  3. $DEVUP_DEFAULT_HOST 環境変数 または ~/.config/devup/default_host

デフォルトホストを設定しておけば --host は不要:

echo "user@server" > ~/.config/devup/default_host

シェルアクセス

# ghq ディレクトリ内なら自動検出
devfish

# 明示的に指定
devfish owner/repo

nvim 接続

# nvim サーバ起動 (socat プロキシ付き)
devnvimserver owner/repo

# nvim クライアント接続
nvim --server localhost:6666 --remote-ui

# 停止
devnvimserver owner/repo stop

ポート 6666 が使用中の場合は自動的にインクリメントされる。 表示されたポート番号で接続すること。

ポートフォワーディング

コンテナ内の dev サーバ (vite, next 等) にローカルブラウザからアクセスする。

# コンテナ内で bun run dev (port 5173) を起動した状態で
devport 5173              # ghq cwd 自動検出
devport 3000 owner/repo   # 明示指定

# ブラウザで http://localhost:5173 にアクセス

# 停止
devport 5173 stop

dev サーバは 0.0.0.0 にバインドする必要がある:

bun run dev -- --host 0.0.0.0
# または vite.config で server.host: '0.0.0.0'

コンテナ内コマンド実行 (非インタラクティブ)

devexec make test              # テスト実行
devexec cat src/main.rs        # ファイル読み取り
devexec owner/repo npm install # プロジェクト明示指定

コンテナ一覧

devls

dotfiles 同期

コンテナ内の ~/dotfiles を GitHub 最新に更新し、setup.sh を再実行する。

# ghq ディレクトリ内なら自動検出
devup --sync

# 明示的に指定
devup owner/repo --sync

コンテナ削除

# ghq ディレクトリ内なら自動検出
devdown

# 明示的に指定
devdown owner/repo

# workspace volume は残す
devdown owner/repo --keep-volume

# 全プロジェクト削除 (確認あり)
devdown --all

注意事項

イメージの自動更新チェック

devup は毎回 docker pull で最新イメージを取得する。 既存コンテナがある状態でイメージが更新された場合、黄色の警告で --remove-existing-container を促す。

Tab 補完

fish の Tab 補完に対応。~/.devcontainers/ のメタファイルから owner/repo 候補を自動生成する。

devup <Tab>     # owner/repo + オプション候補
devfish <Tab>   # owner/repo 候補
devdown <Tab>   # owner/repo 候補
devport <Tab>   # owner/repo 候補
devexec <Tab>   # owner/repo 候補

dotfiles の未 push コミット

devup はリモートモードで GitHub の master を clone する。 ローカルに未 push のコミットがあると、コンテナは古い設定で作られる。 この場合 devup 実行時に黄色の警告が表示される。

対応: devup 前に git push するか、起動後に devup --sync で更新する。

プライベートリポジトリ

初回 clone 時に認証エラーが出た場合、コンテナ内で gh auth login が必要。

devfish owner/repo
gh auth login
git clone <url> /workspace

gh の認証情報は devcontainer-gh-config volume に永続化されるため、 コンテナ再作成後も維持される。

tmux ネスト (ローカル + リモート)

ローカルとリモートで tmux が二重になる場合、F12 でローカル tmux のキーバインドを無効化できる。 全キー入力がリモートの tmux に直通する。もう一度 F12 で戻る。 ステータスバーが暗くなり [OFF] と表示されるので、どちらが操作対象か一目でわかる。

クリップボード (OSC 52)

リモート tmux 内でコピーした内容は OSC 52 経由でローカルのクリップボードに転送される。 Alacritty / Ghostty は OSC 52 対応済み。

socat とポート

  • socat >= 1.8 では SYSTEM アドレス内のコロンエスケープが必要 (自動処理済み)
  • socat プロセスはターミナルを閉じても生存する (SIGHUP 耐性あり)
  • PID ファイルは ~/.devcontainers/<owner>/<repo>/socat.pid に保存される

コンテナの自動復帰

コンテナは --restart unless-stopped ポリシーで作成される。 ホスト再起動後に自動で復帰するが、devdowndocker stop での明示的停止は尊重される。

共有 volumes

以下の volume は全コンテナで共有される。個別削除時に注意。

Volume マウント先 内容
devcontainer-mise-data ~/.local/share/mise mise のツール・shims
devcontainer-nvim-data ~/.local/share/nvim nvim プラグイン・キャッシュ
devcontainer-fish-data ~/.local/share/fish fish プラグイン
devcontainer-tmux-data ~/.local/share/tmux tmux プラグイン (tpm)
devcontainer-ghq ~/.ghq ghq リポジトリ
devcontainer-gh-config ~/.gh-config GitHub CLI 認証情報
devcontainer-claude-config ~/.claude-config Claude Code 認証情報

メタファイル

~/.devcontainers/<owner>/<repo>/.devup-meta にコンテナ情報が保存される。 手動でコンテナを削除した場合、devdown でメタファイルも掃除すること。

コマンドリファレンス

コマンド 説明
devup [project] コンテナ起動 (cwd 自動検出 or 明示指定)
devup --new <name> -h <host> 新規リポ作成 + 起動
devup [project] --sync コンテナ内 dotfiles 更新
devup [project] --remove-existing-container コンテナ再作成
devfish [project] コンテナ内シェル (cwd 自動検出)
devnvimserver [project] nvim サーバ + socat プロキシ起動
devnvimserver [project] stop nvim サーバ停止
devport <port> [project] ポートフォワーディング (dev サーバ等)
devport <port> stop ポートフォワーディング停止
devexec [project] <cmd...> コンテナ内コマンド実行 (非インタラクティブ)
devls コンテナ一覧
devdown [project] コンテナ削除 (cwd 自動検出)
devdown --all 全コンテナ削除

ファイル構成

dotfiles/
├── install.sh                           # ブートストラップスクリプト
├── config/                              # ~/.config にシンボリックリンク
│   ├── Brewfile                         # macOS パッケージ (brew/cask)
│   ├── git/config                       # Git 設定 (XDG 自動検出)
│   ├── git/config-container             # コンテナ用 Git 設定
│   ├── git/ignore                       # グローバル gitignore
│   ├── tmux/tmux.conf                   # tmux 設定 (XDG 自動検出)
│   ├── mise/config.toml                 # CLI ツール定義
│   ├── mise/config.devcontainer.toml    # コンテナ専用ツール
│   ├── devup/default_host               # デフォルトリモートホスト
│   ├── fish/                            # fish shell 設定
│   │   ├── config.fish
│   │   ├── fish_plugins                 # fisher プラグインリスト
│   │   ├── user_functions/              # 自作関数 (fisher と分離)
│   │   ├── user_completions/            # 自作補完 (fisher と分離)
│   │   ├── completions/                 # fisher 管理 (gitignore)
│   │   └── functions/                   # fisher 管理 (gitignore)
│   ├── nvim-LazyVim/                    # Neovim 設定 (LazyVim)
│   ├── alacritty/                       # Alacritty 設定
│   ├── starship.toml                    # Starship プロンプト
│   └── claude/                          # Claude Code 設定
│       ├── settings.json                # hooks 等の設定
│       └── hooks/                       # Claude Code hooks スクリプト
├── .devcontainer/
│   ├── Dockerfile                       # devcontainer イメージ
│   ├── devcontainer.json                # ローカル用設定
│   ├── remote/devcontainer.json         # リモート用設定
│   ├── setup.sh                         # コンテナ内セットアップ
│   └── nvim-server.sh                   # nvim headless 起動スクリプト
└── .github/workflows/                   # CI (イメージビルド)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors