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