Omarchy の環境を「レシピ」として公開する omasushi を作った

Omarchy を使い始めてから、マシンが増えるたびに同じことをやっている自分に気づいた。AUR からいつものパッケージを入れて、omarchy plugin add を何回か叩いて、フォントを設定して、kitty と tmux と nvim の設定を持ってきて、Claude Code のスキルを ~/.claude/skills にコピーして……。
最初は自分用に shares という小さな Go のツールを書いて凌いでいたのだけど、「これ、自分の環境そのものを人に渡せたら面白くない?」と思って、公開できる形に作り直した。それが omasushi 🍣。
コンセプト: 環境を git リポジトリにする
omasushi では、環境の定義を レシピ と呼ぶ。中身はただの git リポジトリで、こんな構成になっている。
my-recipe/
├── omasushi.yaml # パッケージ・プラグイン・デフォルト・ファイルの対応表
├── files/ # dotfiles。apply で symlink される
├── skills/ # Claude Code のスキル -> ~/.claude/skills/<name>
└── commands/ # Claude Code のコマンド -> ~/.claude/commands/<name>.md
omasushi.yaml はこんな感じ。
name: my-setup
packages:
aur: [ttf-udev-gothic, slack-desktop, google-chrome]
omarchy:
font: "UDEV Gothic NF"
defaults:
browser: chrome
editor: nvim
terminal: kitty
plugins:
- url: https://github.com/crmne/omarchy-hyprmoncfg.git
enable: true
herdr:
plugins:
- source: polidog/herdr-gh-issue-label
claude:
skills: skills
commands: commands
files:
files/kitty/kitty.conf: ~/.config/kitty/kitty.conf
files/tmux/tmux.conf: ~/.config/tmux/tmux.conf
hosts:
laptop:
packages: { aur: [brightnessctl] }
hosts.<hostname> に書いたものはそのマシンでだけベースに重ねられるので、GPU ドライバやモニタ設定のようなマシン固有のものも同じレシピに同居できる。
使い方
インストールは go install 一発。
go install github.com/polidog/omasushi/cmd/omasushi@latest
誰かのレシピを使うときは use して、plan で差分を眺めて、apply で反映する。
omasushi use polidog/omasushi # GitHub の owner/repo、URL、ローカルパスのどれでも
omasushi plan # 何が変わるかを表示
omasushi apply # 足りないものを入れて、ファイルを symlink
plan の出力はこんな雰囲気。
+ aur install ttf-udev-gothic slack-desktop
+ font -> UDEV Gothic NF
+ omarchy-add add https://github.com/crmne/omarchy-hyprmoncfg.git (enable=true)
+ file-link files/kitty/kitty.conf -> ~/.config/kitty/kitty.conf
+ skill-link skills/omasushi -> ~/.claude/skills/omasushi
installed but not in any recipe (run `omasushi export` to record):
? packages.aur: google-cloud-cli
レシピは複数重ねられる(use した順に後勝ち)。「会社共通のレシピ」+「自分のレシピ」みたいな使い方を想定している。omasushi update で全部まとめて git pull する。
自分の環境を公開する側
こっちが本命。init で雛形を作って、export で今のマシンの状態を書き出す。
omasushi init my-recipe
cd my-recipe
omasushi export # AUR パッケージ、Omarchy/Herdr プラグイン、フォント、デフォルトを記録
cp ~/.config/kitty/kitty.conf files/kitty.conf # dotfiles は files/ にコピーして files: に書く
cp -r ~/.claude/skills/my-skill skills/ # スキルはディレクトリごと skills/ へ
git init && git add . && git commit -m "my setup"
gh repo create --public --push
あとは誰でも omasushi use you/my-recipe で同じ環境になる。
export は 追加しかしない。手で書いた内容を消さないし、apply も削除は一切やらない。マニフェストにないものは ? として見せるだけ。同期ツールで一番怖いのは「消される」ことなので、ここは意図的に保守的にしている。
設計で決めたこと
再実装しない。 yay も git clone も自前でやらず、omarchy-pkg-aur-add、omarchy-plugin-add、omarchy-font-set、herdr plugin install といった既存の CLI をそのまま叩く。omasushi がやるのは「望ましい状態」と「実機」の差分計算と、その差分を既存コマンドに変換することだけ。Go で 1,000 行ちょっと。
スキルは個別 symlink。 ~/.claude/skills ディレクトリごとリンクすると、そのマシンで作ったスキルが置き場を失う。なのでレシピの skills/ 配下を 1 つずつ ~/.claude/skills/<name> にリンクして、自前のスキルと共存できるようにした。commands も同じ。
dotfiles は symlink。 既存の実ファイルがあれば .bak に退避してからリンクする。ひとつ注意点として、omarchy font set や omarchy theme set はターミナル設定を sed -i で書き換えるので、symlink が実ファイルに戻る。そのときは新しいファイルをレシピにコピーし直して apply すればいい(plan に file-link が再び出るのが合図)。
Omarchy のバーから使う
CLI だけだと差分が溜まっていることに気づかないので、バーウィジェットも同じリポジトリに入れた。
omarchy plugin add https://github.com/polidog/omasushi.git --enable
バーに 🍣 と未適用のアクション数が出て、クリックするとレシピ一覧・pending・未記録の extras が見える。Apply / Export / Update ボタンは Omarchy のフローティングターミナルで実行される(yay が対話的に聞いてくることがあるので、裏で黙って走らせたくなかった)。j/k で移動、a で apply、r で再チェック。
裏側は omasushi plan --json を叩いて QML で描いているだけ。ウィジェットが CLI の JSON を読む、という分担にしておくと、ロジックを 2 か所に持たなくて済む。
Claude Code と組み合わせる
リポジトリには omasushi 自身を操作するための Claude Code スキルも入っていて、omasushi use polidog/omasushi すると ~/.claude/skills/omasushi に入る。「この環境を同期して」と言えば plan を見せてから apply してくれるし、「今のマシンの状態を記録して」で export まで面倒を見てくれる。
環境構築の手順書を人間向けに書く代わりに、レシピ(機械が読む)+スキル(エージェントが読む)の組で残す、というのがしっくりきている。
まとめ
- Omarchy の環境を git リポジトリ = レシピとして公開・取り込みできる
- パッケージ、Omarchy/Herdr プラグイン、フォント、デフォルトアプリ、dotfiles、Claude Code のスキル/コマンドが対象
- 既存 CLI の薄いラッパーで、削除は絶対にしない
- バーウィジェットと Claude Code スキル付き
自分の Omarchy 環境、公開してみませんか。