設定リファレンス
Rigoの設定は,Vault内の固定位置 <vault>/.config/rigo/rigo.toml にある単一のTOMLファイルだけです。他の管理対象ファイルと同様に ~/.config/rigo/rigo.toml へリンクされるため,どのマシンで編集しても全マシンに行き渡ります。
このファイルはVaultへの注釈であって,マニフェストではありません。「どのファイルを管理するか」はVaultのディレクトリ木が決めます。以下のすべてのキーは省略可能で,空のファイルも有効です。未知のキーはエラーになります(typoの検出のため)。
一部のキーはRigo自身も書き換えます。rigo add --dir は dirs に,--tag は [tags] に追記し,Windowsで未宣言ボリュームを使うと [volumes] に宣言が追加され,rigo forget は該当エントリへの参照を取り除きます。
全体例
# 1本のsymlinkとして展開するディレクトリ(中に増えたファイルも自動で
# 追従)。ここに挙げないディレクトリは,中のファイルが個別に
# 管理される。
dirs = [".hammerspoon/"]
# 追加のignoreパターン(Vault相対パスに対するgitignore風グロブ)。
# OSのゴミと同期サービスのアーティファクトは組み込みで除外済み。
ignore = ["*.bak", "**/node_modules/"]
# .os/linux/ 直下のどのディレクトリがディストリビューション
# オーバーレイかの宣言。/etc/os-release の ID フィールドと照合される。
distros = ["ubuntu", "debian"]
[tags] # タグ名 → メンバー。ディレクトリを挙げると
vim = [".vim/", ".vimrc"] # ディレクトリ単位展開の宣言を兼ねる
[groups] # グループ → ホスト(Ansibleインベントリ流)
work = ["workpc", "buildbox"]
[include] # ホスト/グループ → これだけを展開(allowlist)
servers = ["zsh", ".gitconfig"]
[exclude] # ホスト/グループ → これは展開しない
work = ["vim"]
[volumes] # Windowsドライブの名前付きボリューム
data = { default = "d", workpc = "e" }
[secrets] # 書き出し先パス → パスワードマネージャー参照
".netrc" = { ref = "op://Personal/netrc/notesPlain", mode = 0o600 }
".config/gh/token" = "op://Personal/GitHub/token"パスと名前の書式
キーの説明に先立って,2つの共通書式を定義します。
- 論理パス
ホーム相対・スラッシュ区切りのパス(例.zshrc・.config/gh/token)。先頭の/や~,..は使えません。末尾の/はディレクトリ単位展開の宣言として意味を持ちます(dirs/tags) - ホスト・グループ名
小文字のみ・ドット不可。実行時のホスト名照合が大文字小文字に依存しないための制約です。defaultは[volumes]のフォールバック用に予約されています
トップレベルキー
dirs
ディレクトリ単位(1本のsymlink)で展開するVault内ディレクトリの論理パスの配列です。ここに(または [tags] に)挙げられていないディレクトリは,それ自体は管理対象にならず,中のファイルが個別に管理されます。
- ディレクトリだけを挙げられます。Vault側で実体がファイルだとスキャン時にエラーになります
- ディレクトリ単位エントリの内側のパスを別の宣言で挙げることはできません(スキャン時にエラー)
- 宣言があるのにVaultに実体がない場合は警告が出ます
ignore
スキャンから除外する追加パターンの配列です。Vault相対パスに対するgitignore風のグロブで照合します。
/を含まないパターンは,任意の深さのベース名に一致します(例*.bak)**はディレクトリをまたぎます(例**/node_modules/)- 末尾
/はディレクトリ限定です
OSのゴミ(.DS_Store・Thumbs.db など)と主要同期サービスのアーティファクト(Syncthing・Dropbox・iCloud Drive・Google Drive・OneDrive・Nextcloud/ownCloud・Resilio Sync・Synology・NFS/FUSEの一時ファイルなど)は組み込みで除外済みです。conflictコピー名がローカライズされるサービス(Dropbox・Nextcloud)は英語形のみ組み込みなので,他言語環境ではここで補います。
ignoreに一致するパスは rigo add も拒否します(追加しても見えなくなるため)。
distros
.os/linux/ 直下のどのディレクトリがディストリビューションオーバーレイかを宣言する配列です。値は /etc/os-release の ID フィールド(小文字の機械可読ID。例 ubuntu・debian・arch)です。
宣言されたディレクトリは,ID が一致するLinuxマシンにだけ重ねられます。宣言のないディレクトリは通常のホーム内容と見なされます(ホストのdistro名と偶然一致していると警告が出ます)。
os_dir / abs_dir / trash_dir
構造用ディレクトリの名前の変更です。パス区切りを含まない単一のディレクトリ名だけが指定できます。
| キー | 既定値 | 役割 |
|---|---|---|
os_dir | .os | OS別レイヤーの置き場 |
abs_dir | .abs | ホーム外絶対パスの置き場(各OSレイヤー内) |
trash_dir | .trash | forget のトラッシュ |
[tags]
タグ名 → メンバー(論理パスの配列)の表です。タグは2つの役割を持ちます。
rigo tag link/unlink/show <name>による一括操作の単位[include]/[exclude]の項目としての参照名
メンバーに末尾 / 付きでディレクトリを挙げると,dirs と同様にディレクトリ単位展開の宣言を兼ねます。
[tags]
vim = [".vim/", ".vimrc"]
zsh = [".zshrc", ".zprofile"][groups]
グループ名 → ホスト名の配列の表です。Ansibleのインベントリと同じ発想で,[include] / [exclude] / [volumes] からホストの集合を名前で参照できるようにします。
- ホスト名は,そのマシンのホスト名の最初のドットまでを小文字化したものです(
rigo statusのヘッダで確認できます) - 同じ名前をグループ名とホスト名の両方に使うことはできません
[include] / [exclude]
ホスト名またはグループ名 → 項目(論理パスまたはタグ名)の配列の表で,マシンごとの展開を選択します。
あるホストのeffective include / excludeは,ホスト自身のエントリと所属する全グループのエントリの和です。そのうえで,
- effective includeが空のホストはexcludeモード(既定): すべて展開し,effective excludeに該当するものだけ除外します
- effective includeが1つでもあるホストはincludeモード(allowlist): effective includeに該当するものだけ展開し,そこからさらにeffective excludeを除きます
項目のパスはそのエントリ自身に一致し,ディレクトリを書いた場合はその配下のエントリすべてにも一致します。たとえば ".config" と書けば .config/ 配下の個別エントリすべてが対象です。
[include]
servers = ["zsh", ".gitconfig"] # serversはzshタグと.gitconfigだけを展開
[exclude]
work = ["vim"] # workのマシンはvimタグを展開しない選択から外れたエントリは status で excluded と表示され,apply / link の対象外になります。secretsにも同じ選択が適用されます。
[volumes]
Windowsの名前付きボリュームの表です。ボリューム名 → ドライブレターの対応を宣言し,.os/windows/.abs/<ボリューム名>/... のエントリがどのドライブに展開されるかを決めます。
値は2形式あります。
[volumes]
media = "m" # 全ホストでM:\
data = { default = "d", workpc = "e" } # 既定はD:\,workpcではE:\- ドライブレターは小文字1文字です
- テーブル形式のキーは
default(フォールバック),ホスト名,グループ名です。優先順位はホスト自身 > グループ >defaultで,ホストの所属グループどうしが異なるレターを割り当てているとエラーになります - このホストで解決できないボリュームのエントリはスキップされ,警告が出ます
- 組み込みボリューム
systemは%SystemDrive%に解決され,宣言不要です(上書きは可能)
[secrets]
ターゲットの論理パス → パスワードマネージャー参照の表です。rigo secrets apply がバックエンドから値を取得し,実ファイルとして書き出します。実体はVaultに入らず,同期にも乗りません。
値は2形式あります。
[secrets]
".config/gh/token" = "op://Personal/GitHub/token" # 短縮形(refのみ)
".netrc" = { ref = "op://Personal/netrc/notesPlain", mode = 0o600, os = ["darwin", "linux"] }| キー | 必須 | 説明 |
|---|---|---|
ref | ○ | バックエンド参照。スキーム付きURI形式で,現在サポートされるのは1Passwordの op://(要 op CLI)です |
mode | — | 書き出すファイルのパーミッション。既定は 0o600 |
os | — | 適用するOSの配列("darwin" / "linux" / "windows")。省略時は全OS |
- ターゲットパスは論理パス(ホーム相対)で,通常のエントリと同じ規則で各OSの実パスに解決されます
- 同じパスをVaultエントリとsecretの両方にすることはできません(symlink展開と実体書き出しは両立しないため,実行時にエラー)
[include]/[exclude]によるマシンごとの選択はsecretsにも適用されます
検証エラー
rigo.toml は読み込み時に検証され,違反は具体的なメッセージ付きのエラーになります。主なもの:
- 未知のキー(typo検出)
- 論理パスの規則違反(絶対パス・
~始まり・..を含む) - ホスト・グループ名の規則違反(大文字・ドット・予約名
default) - グループ名とホスト名の重複
distrosの値が小文字のos-release IDでない[volumes]のドライブレターが小文字1文字でない[secrets]のrefにスキームがない,modeが範囲外,osの値が不正os_dir/abs_dir/trash_dirが単一のディレクトリ名でない