Kihagyás

Shell-bővítmények

Az OmarOS asztal egyetlen hosszú életű Quickshell-folyamatként fut, az omaros-shell néven, és szinte minden, amit a képernyőn látsz, annak egy bővítménye. A sáv bővítmény. Ugyanúgy a róla lenyíló panelek, a teljes képernyős rátakarások, mint az emoji-választó és a vágólapkezelő, az OmarOS menü maga, a zárolási képernyő, a polkit párbeszédablaka és a fejnélküli szolgáltatások, amelyek figyelik az akkumulátorod, és éjszaka felmelegítik a képernyődet.

Ez nem csak egy implementációs részlet. Ez azt jelenti, hogy az asztal egyes részeit kikapcsolhatod, kicserélheted, vagy írhatsz sajátokat, anélkül, hogy az OmarOS forráskódjának egyetlen sorát is megérintenéd.

Az első fél bővítményei az OmarOSval érkeznek, és a $OMAROS_PATH/shell/plugins/ helyen élnek. Bármi, amit magad adsz hozzá — saját kísérleteid, vagy valami, amit a GitHubon találtál — a ~/.config/omaros/plugins/ helyen él. Mindkettő ugyanazon a módon fedeződik fel induláskor, de a beépítettek megbízható shell-felületeket kapnak, míg a harmadik felek korlátozott felületet kapnak, saját szolgáltatásuk és életciklusuk megkötve. A beépítettek klónjai csak az eredeti viselkedéshez szükséges forrásspecifikus konfigurációt és felületi hívásokat őrzik meg.

Megnézni, hogy mi van

omaros plugin list

Ez kiír minden felismert bővítményt azonosítójával, azzal együtt, hogy engedélyezett-e, első vagy harmadik fél, típusaival és megjelenítési nevével. Add hozzá a --json lehetőséget, ha valami másnak eteted.

A bővítmény-azonosítók névtérbe tartoznak. A beépítettek mindegyike omaros. előtaggal kezdődik — omaros.clock, omaros.network, omaros.notifications —, és ez a névtér fenntartott, így harmadik fél bővítménye soha nem követelheti magának.

Be- és kikapcsolásuk

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

Vagy használd a menüt: a Setup > Plugins menüpontban van Enable, Disable, Add, Clone és Remove, mindegyik olyan választóval, amely csak az akcióhoz értelmes bővítményeket kínálja.

Az engedélyezési állapot a ~/.config/omaros/shell.json fájlban tárolódik, és a szabály egyaránt különbözik a kétféle bővítményre. Egy harmadik fél bővítménye éppen akkor engedélyezett, ha az azonosítója valahol megjelenik abban a fájlban — sáv-kialakítási bejegyzésként, a plugins[] listában bejegyzésként, vagy bar.id-ként. Azok az első fél bővítmények, amelyek nem sáv-widgetek, ellentétes irányúak: alapértelmezetten be vannak kapcsolva, és csak akkor kapcsolnak ki, ha a disabledPlugins[] listában vannak.

Egy teljes sáv-bővítménynek egyáltalán nincs kikapcsolt állapota. Mindig pontosan egy sáv van, így egy másik engedélyezésével tudod az eredetit helyettesíteni. A sávwidget-elhelyezésről a felső sáv rész szól.

Bővítmény hozzáadása gitből

Egy harmadik fél bővítménye éppen egy git-repo, amelynek gyökerében van egy manifest.json fájl.

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

Mielőtt bármit tenne, őszintén megmondja, hogy a bővítmények tetszőleges, nem szandált kódként futnak a hosszú élettartamú shell-folyamatodban, megmutatja a címcím URL-jét, és megerősítést kér. Ezt vedd komolyan. A harmadik felek bővítmény-felülete közvetlenül nem fed fel hitelesítési szolgáltatásokat, és egy helyettesítő sáv is csak korlátozott képességeket kap a konfigurált nem-hitelesítési felülethez. A vizuális bővítmények továbbra is ugyanabban a shell-QML jelenetben élnek, és mindennapi szülő objektumokat járhatnak be, miközben minden bővítménykód a felhasználói fiókoddal elérhető mindennél fut. A hitelesítési állapotot külön védjük azáltal, hogy ezeket a szolgáltatásokat kívül tartjuk az elérhető gazdaobjektum-gráfon. Csak olyan repókat adj hozzá, amelyeket hajlandó vagy futni, és előtte először olvass utána.

Egy helyettesítő sáv megjelenítheti a telepített widgeteket, de ott a szolgáltatási támogatású harmadik fél widgetek csökkentett funkcionalitással rendelkezhetnek, mert a sávnak nem szabad másik bővítmény élő szolgáltatás-objektumát kérni. Válts vissza a beépített omaros.bar sávra, ha az adott widget a kísérő szolgáltatást igényli.

Ezután klónozza a repót egy előkészítési könyvtárba, érvényesíti a manifest tényét, megtagadja a telepítést, ha másik bővítmény már követeli az azonosítót, és átmásolja a ~/.config/omaros/plugins/<id>/ helyre. A --enable nélkül megkérdezi, szeretnéd-e most bekapcsolni, és nemmel válaszolhatsz, és először elolvashatod a kódot. A bővítményből semmit sem futtat, soha nem futtat telepítési hookot, és soha nem kér sudo felhatalmazást — fájlokat klónoz, ellenőrzi a manifestet, és egy bitet billent az IPC-n keresztül.

A frissítés ugyanannak a checkoutnak egy gyorsítómásolás (fast-forward) levonása:

omaros plugin update acme.weather
omaros plugin update

Azonosító nélkül frissíti minden git által kezelt bővítményedet. Megmutatja a különbséget az alkalmazás előtt, megtagadja a frissítést, ha olyan helyi módosításokat tartalmaz, amelyeket nem tud gyorsítómásolni, és visszavonja, ha az új revízió hibásan érvényesül.

omaros plugin remove acme.weather

Az eltávolítás először letiltja a bővítményt, majd törli, ha git-checkout (a repo még mindig upstream), vagy leválasztja, ha szimbolikus hivatkozás. Egy kézzel készült bővítmény-mappa git-repo nélkül egy időbélyegzővel ellátott biztonsági másolatba kerül a bővítmények könyvtárán belül, anélkül, hogy egyenesen törölnék.

Beépített klónozása módosításhoz

Ez a kedvenc részem. Ha meg akarod változtatni egy beépített widget viselkedését, ne szerkeszd a $OMAROS_PATH alatti fájlokat — azok a csomaghoz tartoznak, és a következő frissítés felülírja őket. Klónozd őket helyette:

omaros plugin clone omaros.clock

Ez az egész bővítményt átmásolja a ~/.config/omaros/plugins/omar.clock helyre (a te felhasználóneved, nem az enyém), átnevezi „My Clock"-ra, engedélyezi, és átkapcsolja a shellt a beépítettől a saját példányodra — megtartva egy meglévő sávwidget helyét és beállításait. Add hozzá a --edit lehetőséget, ha rögtön meg akarod nyitni az új könyvtárat a $EDITOR-ban, és ehhez a menü Setup > Plugins > Clone Plugin pontja is hasonlóképpen tesz.

A felhasználónévi előtag megtartja a klón azonosítódat a tiédként, így a megosztás nem ütközik senki máséval. Az eredeti beépített azonosítóhoz intézett hívások az Ön klónjaihoz kerülnek irányításra, így semmi, ami az omaros.clock azonosítóra hivatkozott, nem igényel frissítést. És ha nem jössz belőle össze, az omaros plugin remove omar.clock parancs visszaállítja a beépítettet.

Ha ment egy fájlt bárhol a ~/.config/omaros/plugins/ helyen, akkor a bővítménykód automatikusan újratöltődik, így nyitva hagyhatod a szerkesztőt, és figyelheted a változások beérkezését.

Saját bővítmény írása

Egy bővítmény egyetlen könyvtár, benne egy manifest.json fájllal és némi QML-lel. A manifest kinyilvánítja a schemaVersion: 1 értékét, egy id, name, version, egy vagy több kinds és egy entryPoints objektumot, amely minden típus QML-fájljára mutat:

Típus Micsoda
bar-widget Egy komponens, amelyet az aktív sáv egy szakaszba ejthet
panel Egy tartós vagy meginvitált úszó ablak
overlay Egy teljes képernyős rátakarás
menu Egy meginvitált menüfelület
service Fejnélküli singleton felület nélkül
bar Egy teljes sáv, ami a beépítettet váltja

Egy bővítmény egyszerre több típust is kijelenthet — a média-bővítmény egyszerre service és bar-widget. A sávwidgetek egy extra barWidget blokkot kapnak megjelenítési névvel, kategóriával, egy opcionális defaultSection lehetőséggel, és az allowMultiple beállítással, ami megmondja, van-e értelme többet tenni a sávra. A legtöbb widget false-ra állítja; a térköz-változtatók és a jelzők true-ra állítják.

Mielőtt bármit közzétennél, ellenőrizd őt:

omaros plugin validate ./my-plugin

Ez ugyanazokat az ellenőrzéseket futtatja, mint a shell betöltés közben: a séma-verziót, a szükséges mezőket, egy olyan azonosítót, ami nincs fenntartva, belépési pontokat, amelyek biztonságos, relatív utak, és ténylegesen léteznek, belépési pontot minden deklarált típushoz, és az abszolút szimbolikus hivatkozások hiányát a mappán belül bárhol.

Bővítményfejlesztéshez lásd a shell-hivatkozást és az első fél bővítmény-katalógust.

A sajátodd megosztása a világgal

Ha egyszer készítettél valamit, amit szeretsz, tedd egy nyilvános git-repóba. Ez az egész terjesztési mechanizmus — bárki futtathat egy omaros plugin add parancsot az URL-jénél, és másodperceken belül működik.