Към съдържанието

Плъгини за шела

Работният плот на OmarOS работи като един дългоживущ процес на Quickshell, наречен omaros-shell, и почти всичко, което виждате на екрана, е плъгин вътре в него. Лентата е плъгин. Такива са и панелите, които се спускат от нея, наслагванията на цял екран като избора на емоджи и мениджъра на клипборда, самото меню на OmarOS, заключеният екран, диалогът на polkit и услугите без интерфейс, които следят батерията ви и затоплят екрана ви през нощта.

Това не е просто детайл от реализацията. Това означава, че можете да изключвате части от работния плот, да ги заменяте или да пишете свои собствени, без да докосвате и ред от изходния код на OmarOS.

Плъгините от първа страна идват с OmarOS и живеят в $OMAROS_PATH/shell/plugins/. Всичко, което добавяте сами — вашите собствени експерименти или нещо, което сте намерили в GitHub — живее в ~/.config/omaros/plugins/. И двете се откриват по един и същ начин при стартиране, но вградените получават доверени интерфейси на шела, докато плъгините на трети страни получават ограничен интерфейс, обхващащ само собствената им услуга и жизнен цикъл. Клонингите на вградени запазват само конфигурацията, специфична за източника, и извикванията към потребителския интерфейс, необходими за оригиналното поведение.

Как да видите какво имате

omaros plugin list

Това извежда всеки открит плъгин с неговия идентификатор, дали е активиран, дали е от първа или трета страна, неговите видове и показваното му име. Добавете --json, ако го подавате на нещо друго.

Идентификаторите на плъгините са в именни пространства. Всички вградени започват с 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, а правилото се различава леко за двата вида плъгини. Плъгин на трета страна е активиран точно когато неговият идентификатор се появява някъде в този файл — като позиция в оформлението на лентата, като позиция в plugins[] или като bar.id. Плъгините от първа страна, които не са приспособления за лентата, са обратното: те са включени по подразбиране и се изключват само чрез посочване в disabledPlugins[].

Пълният плъгин за лента изобщо няма изключено състояние. Винаги има точно една лента, така че я заменяте чрез активиране на друга. Разположението на приспособленията за лентата е обхванато в горната лента.

Добавяне на плъгин от git

Плъгин на трета страна е просто git хранилище с manifest.json в корена си.

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

Преди да направи каквото и да било, той ви казва ясно, че плъгините работят като произволен, неограничен код вътре в дългоживущия ви процес на шела, показва ви URL адреса и ви иска да потвърдите. Вземете това насериозно. Интерфейсът за плъгини на трети страни не излага директно услуги за удостоверяване, а заместваща лента получава само ограничени възможности за конфигуриран потребителски интерфейс без удостоверяване. Визуалните плъгини все още споделят QML сцената на шела и могат да обхождат обикновени родителски обекти, докато целият код на плъгините работи с всичко, до което потребителският ви акаунт може да се докосне. Състоянието на удостоверяване е защитено отделно чрез държане на тези услуги извън достижимия граф на обектите на хоста. Добавяйте само хранилища, които сте готови да стартирате, и ги прочетете, преди да ги активирате.

Заместваща лента може да изобразява инсталирани приспособления, но приспособленията на трети страни, поддържани от услуги, може да имат намалена функционалност там, защото на лентата не е позволено да изисква живия обект на услугата на друг плъгин. Върнете се към вградената omaros.bar, ако такова приспособление се нуждае от придружаващата си услуга.

След това клонира хранилището в подготвителна директория, валидира манифеста, отказва инсталацията, ако друг плъгин вече претендира за този идентификатор, и го премества в ~/.config/omaros/plugins/<id>/. Без --enable пита дали искате да е включен сега, и можете да кажете не и първо да прочетете кода. Той никога не стартира нищо от плъгина, никога не изпълнява кука за инсталиране и никога не иска sudo — клонира файлове, проверява манифеста и превключва бит през IPC.

Обновяването е бързо изтегляне с fast-forward на същото копие:

omaros plugin update acme.weather
omaros plugin update

Без идентификатор обновява всеки плъгин, управляван от 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 в менюто прави за вас.

Префиксът с потребителското име запазва идентификатора на вашия клонинг ваш, така че споделянето му не се сблъсква с ничий друг. Извикванията, направени към оригиналния вграден идентификатор, се пренасочват към вашия клонинг, така че нищо, което се отнасяше до omaros.clock, не се нуждае от обновяване. И ако направите бъркотия от това, omaros plugin remove omar.clock връща вградения обратно.

Запазването на файл навсякъде под ~/.config/omaros/plugins/ презарежда кода на плъгина автоматично, така че можете да оставите редактора отворен и да гледате как промените ви влизат в сила.

Писане на ваш собствен

Плъгинът е директория с manifest.json и малко QML. Манифестът декларира schemaVersion: 1, id, name, version, един или повече kinds и обект entryPoints, сочещ към QML файла за всеки вид:

Kind What it is
bar-widget Компонент, който активната лента може да постави в секция
panel Постоянен или извикван плаващ прозорец
overlay Наслагване на цял екран
menu Извиквана повърхност на меню
service Единичен обект без интерфейс и без потребителски интерфейс
bar Пълна лента, която замества вградената

Плъгинът може да декларира няколко вида наведнъж — медийният плъгин е едновременно service и bar-widget. Приспособленията за лентата получават допълнителен блок barWidget с показвано име, категория, незадължителен defaultSection и allowMultiple, който казва дали има смисъл да имате повече от едно на лентата. Повечето приспособления го задават на false; разделителите и индикаторите го задават на true.

Преди да публикувате каквото и да било, проверете го:

omaros plugin validate ./my-plugin

Това изпълнява същите проверки, които шелът прави по време на зареждане: версията на схемата, задължителните полета, идентификатор, който не е запазен, входни точки, които са безопасни относителни пътища и действително съществуват, входна точка за всеки вид, който сте претендирали, и никакви символни връзки никъде вътре в папката.

За разработване на плъгини вижте справката за шела и каталога на плъгини от първа страна.

Споделяне на вашия със света

След като направите нещо, което харесвате, поставете го в публично git хранилище. Това е целият механизъм за разпространение — всеки след това може да изпълни omaros plugin add срещу вашия URL адрес и да го има работещ за секунди.