Плъгини за шела¶
Работният плот на OmarOS работи като един дългоживущ процес на Quickshell, наречен omaros-shell, и почти всичко, което виждате на екрана, е плъгин вътре в него. Лентата е плъгин. Такива са и панелите, които се спускат от нея, наслагванията на цял екран като избора на емоджи и мениджъра на клипборда, самото меню на OmarOS, заключеният екран, диалогът на polkit и услугите без интерфейс, които следят батерията ви и затоплят екрана ви през нощта.
Това не е просто детайл от реализацията. Това означава, че можете да изключвате части от работния плот, да ги заменяте или да пишете свои собствени, без да докосвате и ред от изходния код на OmarOS.
Плъгините от първа страна идват с OmarOS и живеят в $OMAROS_PATH/shell/plugins/. Всичко, което добавяте сами — вашите собствени експерименти или нещо, което сте намерили в GitHub — живее в ~/.config/omaros/plugins/. И двете се откриват по един и същ начин при стартиране, но вградените получават доверени интерфейси на шела, докато плъгините на трети страни получават ограничен интерфейс, обхващащ само собствената им услуга и жизнен цикъл. Клонингите на вградени запазват само конфигурацията, специфична за източника, и извикванията към потребителския интерфейс, необходими за оригиналното поведение.
Как да видите какво имате¶
Това извежда всеки открит плъгин с неговия идентификатор, дали е активиран, дали е от първа или трета страна, неговите видове и показваното му име. Добавете --json, ако го подавате на нещо друго.
Идентификаторите на плъгините са в именни пространства. Всички вградени започват с omaros. — omaros.clock, omaros.network, omaros.notifications — и това именно пространство е запазено, така че плъгин на трета страна никога не може да го претендира.
Включване и изключване¶
Или използвайте менюто: Настройка > Plugins има Enable, Disable, Add, Clone и Remove, всяко с избор, който предлага само плъгините, които имат смисъл за това действие.
Състоянието на активиране се съхранява в ~/.config/omaros/shell.json, а правилото се различава леко за двата вида плъгини. Плъгин на трета страна е активиран точно когато неговият идентификатор се появява някъде в този файл — като позиция в оформлението на лентата, като позиция в plugins[] или като bar.id. Плъгините от първа страна, които не са приспособления за лентата, са обратното: те са включени по подразбиране и се изключват само чрез посочване в disabledPlugins[].
Пълният плъгин за лента изобщо няма изключено състояние. Винаги има точно една лента, така че я заменяте чрез активиране на друга. Разположението на приспособленията за лентата е обхванато в горната лента.
Добавяне на плъгин от git¶
Плъгин на трета страна е просто git хранилище с manifest.json в корена си.
Преди да направи каквото и да било, той ви казва ясно, че плъгините работят като произволен, неограничен код вътре в дългоживущия ви процес на шела, показва ви URL адреса и ви иска да потвърдите. Вземете това насериозно. Интерфейсът за плъгини на трети страни не излага директно услуги за удостоверяване, а заместваща лента получава само ограничени възможности за конфигуриран потребителски интерфейс без удостоверяване. Визуалните плъгини все още споделят QML сцената на шела и могат да обхождат обикновени родителски обекти, докато целият код на плъгините работи с всичко, до което потребителският ви акаунт може да се докосне. Състоянието на удостоверяване е защитено отделно чрез държане на тези услуги извън достижимия граф на обектите на хоста. Добавяйте само хранилища, които сте готови да стартирате, и ги прочетете, преди да ги активирате.
Заместваща лента може да изобразява инсталирани приспособления, но приспособленията на трети страни, поддържани от услуги, може да имат намалена функционалност там, защото на лентата не е позволено да изисква живия обект на услугата на друг плъгин. Върнете се към вградената omaros.bar, ако такова приспособление се нуждае от придружаващата си услуга.
След това клонира хранилището в подготвителна директория, валидира манифеста, отказва инсталацията, ако друг плъгин вече претендира за този идентификатор, и го премества в ~/.config/omaros/plugins/<id>/. Без --enable пита дали искате да е включен сега, и можете да кажете не и първо да прочетете кода. Той никога не стартира нищо от плъгина, никога не изпълнява кука за инсталиране и никога не иска sudo — клонира файлове, проверява манифеста и превключва бит през IPC.
Обновяването е бързо изтегляне с fast-forward на същото копие:
Без идентификатор обновява всеки плъгин, управляван от git, който имате. Показва ви разликата, преди да я приложи, отказва да обнови, ако имате локални промени, които не може да прескочи с fast-forward, и се връща назад, ако новата ревизия не издържи валидацията.
Премахването първо деактивира плъгина, след това го изтрива, ако е git копие (хранилището все още съществува нагоре по веригата), или го развързва, ако е символна връзка. Ръчно създадена папка за плъгин без git хранилище се премества в резервно копие с клеймо за време вътре в директорията за плъгини, вместо да бъде изтрита напълно.
Клониране на вграден плъгин, за да го промените¶
Това е любимата ми част. Ако искате да промените как се държи вградено приспособление, не редактирайте файловете под $OMAROS_PATH — те принадлежат на пакета и следващото обновление ще ги презапише. Вместо това го клонирайте:
Това копира целия плъгин в ~/.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.
Преди да публикувате каквото и да било, проверете го:
Това изпълнява същите проверки, които шелът прави по време на зареждане: версията на схемата, задължителните полета, идентификатор, който не е запазен, входни точки, които са безопасни относителни пътища и действително съществуват, входна точка за всеки вид, който сте претендирали, и никакви символни връзки никъде вътре в папката.
За разработване на плъгини вижте справката за шела и каталога на плъгини от първа страна.
Споделяне на вашия със света¶
След като направите нещо, което харесвате, поставете го в публично git хранилище. Това е целият механизъм за разпространение — всеки след това може да изпълни omaros plugin add срещу вашия URL адрес и да го има работещ за секунди.