Иди на текст

Додаци љуске

OmarOS радна површина ради као један дуготрајан Quickshell процес назван omaros-shell, а скоро све што видите на екрану је додатак унутар њега. Трака је додатак. Исто важи за панеле који падају из ње, преклапања преко целог екрана попут бирача емоџија и менаџера клипборда, сам OmarOS мени, екран за закључавање, polkit дијалог и безгласне сервисе који пазе на вашу батерију и греју екран ноћу.

То није само детаљ имплементације. То значи да можете искључити делове радне површине, заменити их или написати сопствене без дирања линије OmarOS изворног кода.

Додаци прве стране долазе са OmarOS-јем и живе у $OMAROS_PATH/shell/plugins/. Све што сами додате — ваши сопствени експерименти или нешто што сте пронашли на GitHub-у — живи у ~/.config/omaros/plugins/. Оба се откривају на исти начин при покретању, али уграђени примају поуздане интерфејсе љуске, док додаци трећих страна примају ограничени интерфејс ограничен на сопствени сервис и животни циклус. Клонови уграђених задржавају само конфигурацију специфичну за извор и UI позиве потребне за оригинално понашање.

Преглед онога што имате

omaros plugin list

То штампа сваки откривени додатак са његовим id-јем, да ли је омогућен, да ли је прве или треће стране, његовим врстама и именом за приказ. Додајте --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, а правило се мало разликује за две врсте додатака. Додатак треће стране омогућен је тачно када се његов id појављује негде у тој датотеци — као унос распореда траке, као унос у plugins[] или као bar.id. Додаци прве стране који нису виџети траке обрнуто: подразумевано су укључени и искључују се само навођењем у disabledPlugins[].

Пун додатак за траку уопште нема стање искључено. Увек постоји тачно једна трака, па је замењујете омогућавањем друге. Постављање виџета траке покривено је у горњој траци.

Додавање додатка из git-а

Додатак треће стране је једноставно git репозиторијум са manifest.json у његовом корену.

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

Пре него што било шта уради, јасно вам каже да додаци раде као произвољан, непешаковани код унутар вашег дуготрајног процеса љуске, показује вам URL и тражи потврду. Схватите то озбиљно. Интерфејс додатака трећих страна не излаже директно сервисе за аутентификацију, а заменска трака прима само ограничене могућности за конфигурисани UI који није за аутентификацију. Визуелни додаци и даље деле QML сцену љуске и могу ходати обичним родитељским објектима, док се сав код додатака извршава са свиме што ваш кориснички налог може досегнути. Стање аутентификације заштићено је одвојено држањем тих сервиса изван доступног графа објеката хоста. Додајте само репозиторијуме које сте вољни да покрећете и прочитајте их пре него што их омогућите.

Заменска трака може приказати инсталиране виџете, али виџети трећих страна подржани сервисом могу тамо имати смањену функционалност јер трака не сме да захтева живи објекат сервиса другог додатка. Вратите се на уграђени omaros.bar ако такав виџет треба сопствени пратећи сервис.

Потом клонира репозиторијум у директоријум за привремену припрему, валидира манифест, одбија инсталацију ако други додатак већ тврди тај id и помера га у ~/.config/omaros/plugins/<id>/. Без --enable пита да ли желите да буде укључен сада, а можете рећи не и прво отићи да прочитате код. Никада не покреће ништа из додатка, никада не извршава куке за инсталацију и никада не тражи sudo — клонира датотеке, проверава манифест и окреће бит преко IPC-а.

Ажурирање је fast-forward повлачење истог тог чекаута:

omaros plugin update acme.weather
omaros plugin update

Без id-ја ажурира сваки додатак којим управља git који имате. Показује вам diff пре примене, одбија ажурирање ако имате локалне промене које не може 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-а. Манифест декларише schemaVersion: 1, id, name, version, једну или више kinds и објекат entryPoints који показује на QML датотеку за сваку врсту:

Kind What it is
bar-widget Компонента коју активна трака може убацити у одељак
panel Трајан или позвани плутајући прозор
overlay Преклапање преко целог екрана
menu Позвана површина менија
service Безгласни синглтон без UI-ја
bar Пуна трака која замењује уграђену

Додатак може декларисати неколико врста одједном — медијски додатак је и service и bar-widget. Виџети траке добијају додатни блок barWidget са именом за приказ, категоријом, опционим defaultSection и allowMultiple, што говори да ли има смисла имати више од једног на траци. Већина виџета га подешава на false; размаци и индикатори га подешавају на true.

Пре него што било шта објавите, проверите га:

omaros plugin validate ./my-plugin

То покреће исте провере које љуска ради при учитавању: верзију шеме, обавезна поља, id који није резервисан, улазне тачке које су безбедне релативне путање и заправо постоје, улазну тачку за сваку врсту коју сте тврдили и без симлинкова било где унутар фасцикле.

За развој додатака погледајте референцу љуске и каталог додатака прве стране.

Дељење вашег са светом

Када направите нешто што вам се свиђа, ставите то у јавни git репозиторијум. То је цео механизам дистрибуције — свако тада може покренути omaros plugin add према вашем URL-у и имати га у раду за неколико секунди.