概要
Rigoは,macOS・Linux・Windowsで動くdotfiles管理ツールです。dotfilesの実体をVaultと呼ぶただのディレクトリに置き,本来の場所へsymlinkを張ります。名前のRigoは,環境を組み上げる rig と,実装言語の Go を合わせたものです。
設計思想
Rigoの設計は,次の3点に集約されます。
- 同期はRigoの仕事ではない
Vaultはお好みのツール(Syncthing・Dropbox・iCloud Driveなど)でマシン間同期する,ただのディレクトリです。Rigo自身は同期機構に一切関知しません。 - 「apply」の追加操作は不要
リンクされたファイルを編集すると,Vault側の実体が直接編集されます。変更はそのまま同期ツールに乗って他のマシンへ届きます。 - マニフェストもテンプレートもない
Vaultのディレクトリ木そのものが唯一の情報源で,ホームディレクトリをそのまま鏡写しにします(vault/.zshrc→~/.zshrc)。「どのファイルを管理するか」を別途リストアップするファイルは存在しません。
設定ファイル rigo.toml は存在しますが,これはVaultへの注釈(ディレクトリ単位の展開・マシンごとの選択・secretsなど)であって,マニフェストではありません。すべての項目が省略可能です。
主な機能
- ファイル単位・ディレクトリ単位のsymlink展開と,5状態(
linked/pending/unlinked/conflict/broken)による状態管理 - conflictを黙って解決しない安全設計(diffを表示して対話,または
--forceの明示を要求) .os/<darwin|linux|windows>/によるOS別エントリと,Linuxディストリビューション別のオーバーレイ- groups / include / exclude によるマシンごとの選択的展開
- タグによるグループ化と一括操作
- Windowsの非システムドライブを扱う名前付きボリューム
- 1Password(
op://参照)からsecretsを実体化するsecretsサブコマンド - Vault内トラッシュによる
forgetのやり直し(復元)
なぜ作ったか
dotfilesマネージャはすでに数多くあります。それでも新規に開発したのは,上の設計思想と機能の組み合わせを満たすものが見当たらなかったためです。
- バージョン管理を前提にしない
dotfilesにバージョン管理が必ずしも必要とは限りません。git中心のツール(yadmやbareリポジトリ運用)は同期手段がgitに固定されますが,RigoはVaultをただのディレクトリとして扱うので,Syncthing・Dropbox・iCloud Driveによる同期だけの運用ができます(履歴が欲しければVault自体をgit管理することもできます) - 編集即反映
ソース状態を実体へ複製する「apply型」(chezmoiが代表)は,編集のたびに反映操作か,ツール経由の編集が必要です。複製型の利点とされる環境の切り替えも,Rigoでは参照する設定ファイル(Vault内のrigo.toml)を変えるだけで実現できます(手順は仕組みを参照)。日常の運用は単一のVaultに対して行うので,symlinkによる編集即反映の使い勝手を優先しました - マニフェスト・テンプレートなし
dotbotのYAMLマニフェストや,chezmoiのファイル名エンコード(dot_zshrc)・テンプレートは,「Vaultの木そのものが唯一の情報源」という方針と相容れません - Windowsが一級市民
symlink系の先行ツール(GNU Stow・Mackup)はWindowsを実質サポートしません。Rigoは%APPDATA%/%LOCALAPPDATA%のセクションや名前付きボリュームまで設計に含めています - 状態の観察と安全な収束
5状態モデル・conflictの対話解決・トラッシュの組み合わせは,既存ツールでは部分的にしか得られません
もっとも近いのはGNU Stow(マニフェストなしのsymlink farm)ですが,Windows対応・OS別レイヤー・マシンごとの選択・secretsが足りません。最有力のchezmoiは多機能ですが,テンプレートとapply型のワークフローが設計思想の側と合いませんでした。
動作環境
| プラットフォーム | 要件 |
|---|---|
| macOS | 13以降 |
| Linux | — |
| Windows | 11。symlink作成のため開発者モード(設定 → システム → 開発者向け)の有効化,または管理者権限での実行が必要 |
インストール
リリースのアーカイブをダウンロードして rigo を PATH の通った場所に置くか,ソースからビルドします。
go install github.com/rinodrops/rigo@latestLinux向けには .deb / .rpm パッケージもリリースに添付されています。
最初の一歩
新しいマシンでの初回だけ,-f でVault内の設定ファイルを直接指定します。以降はVaultの場所が自動で発見されます。
# 新しいマシンでの初回だけ: Vault内の設定ファイルを直接指定する
rigo -f ~/Sync/Vault/.config/rigo/rigo.toml apply
# 以降はVaultが自動で発見される
rigo status
# ファイルの管理を始める(実体をVaultへ移し,リンクを張り戻す)
rigo add ~/.zshrcゼロから複数マシンの同期までを通しで進める手順はチュートリアル(macOS・Linux)またはチュートリアル(Windows)を,個々のコマンドの仕様はコマンドリファレンスを参照してください。仕組みの詳細(状態モデル・Vaultのレイアウト・マシンごとの選択)は仕組みで説明します。
ライセンス
MIT。ソースコードは GitHub にあります。