コンテンツにスキップ

シェルプラグイン

OmarOS デスクトップは omaros-shell と呼ばれる単一の長期稼働する Quickshell プロセスとして動作し、画面上に見えるほぼすべてはその内部のプラグインです。バーはプラグインです。そこからの下がるパネル、絵文字ピッカーやクリップボードマネージャーなどのフルスクリーンオーバーレイ、OmarOS メニュー自体、ロック画面、polkit ダイアログ、そしてバッテリーを監視し夜に画面を温かく保つヘッドレスサービスも同様です。

これは単なる実装の詳細ではありません。デスクトップの一部をオフにしたり、交換したり、独自のものを書いたりするのに、OmarOS のソースを1行も触らないで済むということです。

ファーストパーティプラグインは OmarOS に同梱され、$OMAROS_PATH/shell/plugins/ に存在します。独自の実験や GitHub で見つけた何かを自分で追加したものは、~/.config/omaros/plugins/ に存在します。どちらも起動時に同じ方法で発見されますが、内蔵プラグインは信頼済みのシェルインターフェースを受け取るのに対して、サードパーティプラグインは独自のサービスとライフサイクルに限定されたインターフェースを受け取ります。内蔵プラグインのクローンは、元の振る舞いに必要な、ソース固有の設定と UI 呼び出ししか保持しません。

有するものを確認する

omaros plugin list

これにより、発見されたすべてのプラグインと、その id、有効かどうか、ファーストパーティかサードパーティか、その種類(kinds)、表示名が表示されます。他の何かに渡す場合は --json を追加してください。

プラグイン id は名前空間化されています。内蔵はすべて omaros. で始まります — omaros.clock、omaros.network、omaros.notifications — そしてその名前空間は予約済みであるため、サードパーティプラグインは決してそれを主張できません。

オンとオフの切り替え(切り替え)

omaros plugin enable omaros.tailscale
omaros plugin disable omaros.weather

あるいはメニューを使ってください:設定 > Plugins には Enable、Disable、Add、Clone、Remove があり、各々にはそのアクションに適合するプラグインのみを提案するピッカーがあります。

有効状態は ~/.config/omaros/shell.json 内に保存され、ルールは2種類のプラグインでわずかに異なります。サードパーティプラグインは、その id がバーレイアウトエントリとして、plugins[] のエントリとして、または bar.id としてそのファイルのどこかにある場合にまさに有効になります。バーウィジェットでないファーストパーティプラグインは逆です:デフォルトでオンであり、disabledPlugins[] に登録されることによってのみオフになります。

完全なバープラグインにはオフ状態がまったくありません。常にバーは正確に1つ存在するため、別のバーを有効にすることで置き換えます。バーウィジェットの配置は 上部バー で扱われます。

git からプラグインを追加する

サードパーティプラグインは、ルートに manifest.json がある単なる git リポジトリです。

omaros plugin add https://github.com/acme/omaros-weather.git --enable

何かを行う前に、それはあなたにプラグインが長期稼働するシェルプロセス内部で任意のサンドボックス化されていないコードとして実行される旨を率直に告げ、URL を表示し、確認を求めます。それを真剣に受け止めてください。サードパーティプラグインのインターフェースは認証サービスを直接露出しておらず、置き換えバーは、設定された非認証 UI 向けに限られた能力のみを受け取ります。視覚プラグインは依然としてシェルの QML シーンを共有し、通常の親オブジェクトをたどることができます。一方、すべてのプラグインコードはあなたのユーザーアカウントが到達できるもののすべてとともに動作します。認証状態は、それらのサービスを到達可能なホストオブジェクトグラフの外部に保持することで別個に保護されます。あなたが実行しても構わないリポジトリのみを追加し、有効にする前に読んでください。

置き換えバーはインストールされたウィジェットを表示できますが、サービスに支えられたサードパーティウィジェットは、バーが別のプラグインのライブサービスオブジェクトを要求することが許されていないため、そこで機能が制限されることがあります。そのウィジェットがコンパニオンサービスを必要とする場合、内蔵の omaros.bar へ切り替え戻してください。

次にそれはリポジトリを staging ディレクトリにクローンし、manifest を検証し、別のプラグインがすでにその id を主張している場合インストールを拒否し、それを ~/.config/omaros/plugins/<id>/ へ移動します。--enable なしでは、今すぐオンにするか尋ねられ、no と答えてまずコードを読めます。プラグインの何かを実行したり、インストールフックを実行したり、sudo を求めたりすることは決してありません — ファイルをクローンし、manifest をチェックし、IPC 経由でビットを切り替えるだけです。

更新は、その同じチェックアウトの fast-forward pull です:

omaros plugin update acme.weather
omaros plugin update

id なしで実行すると、あなたが持つすべての git 管理プラグインを更新します。適用前に差分を表示し、fast-forward できないローカル変更がある場合更新を拒否し、新しいリビジョンが検証に失敗した場合はロールバックします。

omaros plugin remove acme.weather

削除はまずプラグインが無効化し、次に git チェックアウトであれば削除(リポジトリは依然アップストリームにあります)、シンボリックリンクであればリンクを解除します。git リポジトリのない手製のプラグインフォルダは、丸ごと削除する代わりに、プラグインディレクトリ内のタイムスタンプ付きバックアップへ移動されます。

変更するための内蔵のクローン

これは私のお気に入りの部分です。内蔵ウィジェットの振る舞いを変更したい場合は、$OMAROS_PATH 下のファイルを編集しないでください — それらはパッケージに属し、次の更新で上書きされます。代わりにクローンしてください:

omaros plugin clone omaros.clock

これによりプラグイン全体が ~/.config/omaros/plugins/omar.clock(私ではなく、あなたのユーザー名)へコピーされ、「My Clock」に改名され、有効化され、シェルが内蔵からあなたのコピーへと切り替えられます — 既存のバーウィジェットの位置と設定を保持します。--edit を追加すれば新しいディレクトリがあなたの $EDITOR ですぐに開きます。これはメニューの 設定 > Plugins > Clone Plugin があなたのために行うことです。

ユーザー名の接頭辞により、あなたのクローンの id はあなた独自のものに保たれるため、共有しても他人のものと衝突しません。元の内蔵 id への呼び出しはあなたのクローンへルーティングされるため、omaros.clock を参照したものはどれも更新する必要はありません。そして混乱してしまった場合、omaros plugin remove omar.clock で内蔵が戻ってきます。

~/.config/omaros/plugins/ 下のどこかのファイルが保存されるとプラグインコードは自動でリロードされます。そのためエディタを開きっぱなしにして変化が届くのを見られます。

独自のものを書く

プラグインは manifest.json といくらかの QML のあるディレクトリです。manifest は schemaVersion: 1、id、name、version、1つ以上の kinds、そして各 kind 向けの QML ファイルを指す entryPoints オブジェクトを宣言します:

Kind What it is
bar-widget 有効なバーがセクション内へ差し込めるコンポーネント
panel 永続的または呼び出されるフローティングウィンドウ
overlay フルスクリーンオーバーレイ
menu 呼び出されるメニューサーフェス
service UI のないヘッドレスシングルトン
bar 内蔵バーを置き換える完全なバー

プラグインは一度に複数の kind を宣言できます — メディアプラグインは service であると同時に bar-widget でもあります。バーウィジェットは、表示名、カテゴリ、任意の defaultSection、そして allowMultiple を含む barWidget ブロックが別途付いていて、これはバー上に複数置く意味があるかどうかを示します。ほとんどのウィジェットは false に設定し、スペーサーやインジケーターは true に設定します。

何かを公開する前に、確認してください:

omaros plugin validate ./my-plugin

これにより、シェルがロード時に行う同じチェックが実行されます:スキーマバージョン、必須フィールド、予約されていない id、安全な相対パスで実際に存在するエントリポイント、主張したすべての kind 向けにエントリポイント、フォルダ内のどこにもシンボリックリンクがないことのすべてです。

プラグイン開発については、シェルリファレンス と ファーストパーティプラグインカタログ を参照してください。

あなたのものを世界にシェアする

気に入るものを作ったら、公開の git レポジトリに入れてください。それが配信の仕組みのすべてです — そうしたら誰かがあなたの URL に対して omaros plugin add を実行でき、数秒で実行できます。