Salta el contingut

Connectors de l'intèrpret d'escriptori

L'escriptori d'OmarOS s'executa com un únic procés Quickshell de llarga durada anomenat omaros-shell, i gairebé tot el que veus en pantalla és un connector a dins seu. La barra és un connector. També ho són els panells que en baixen, les superposicions a pantalla completa com el selector d'emojis i el gestor del porta-retalls, el mateix menú d'OmarOS, la pantalla de bloqueig, el diàleg de polkit i els serveis sense interfície que observen la teva bateria i escalfen la pantalla a la nit.

Això no és només un detall d'implementació. Vol dir que pots apagar peces de l'escriptori, intercanviar-les o escriure'n de pròpies sense tocar ni una línia del codi font d'OmarOS.

Els connectors oficials venen amb OmarOS i viuen a $OMAROS_PATH/shell/plugins/. Qualsevol cosa que afegeixis tu mateix — els teus propis experiments, o alguna cosa que hagis trobat a GitHub — viu a ~/.config/omaros/plugins/. Tots dos es descobreixen de la mateixa manera a l'arrencada, però els integrats reben interfícies de l'intèrpret de confiança mentre que els connectors de tercers reben una interfície limitada restringida al seu propi servei i cicle de vida. Els clons dels integrats conserven només la configuració i les crides a la interfície d'usuari específiques de l'origen necessàries per al comportament original.

Veure què tens

omaros plugin list

Això imprimeix cada connector descobert amb el seu identificador, si està habilitat, si és oficial o de tercers, les seves menes i el seu nom de visualització. Afegeix-hi --json si ho estàs passant a alguna altra cosa.

Els identificadors de connector tenen espai de noms. Els integrats comencen tots amb omaros. — omaros.clock, omaros.network, omaros.notifications — i aquell espai de noms està reservat, de manera que un connector de tercers no el podrà reclamar mai.

Activar-los i desactivar-los

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

O fes servir el menú: Configuració > Connectors té Habilita, Deshabilita, Afegeix, Clona i Elimina, cadascú amb un selector que només ofereix els connectors que tenen sentit per a aquella acció.

L'estat d'habilitació es desa a ~/.config/omaros/shell.json, i la regla difereix lleugerament per a les dues menes de connector. Un connector de tercers està habilitat exactament quan el seu identificador apareix en algun lloc d'aquell fitxer — com a entrada de disposició de la barra, com a entrada a plugins[], o com a bar.id. Els connectors oficials que no són ginys de la barra funcionen a l'inrevés: estan activats per defecte i només s'apaguen si apareixen a disabledPlugins[].

Un connector de barra completa no té cap estat d'apagada. Sempre hi ha exactament una barra, de manera que la substitueixes habilitant-ne una altra. La col·locació dels ginys de la barra es tracta a la barra superior.

Afegir un connector des de git

Un connector de tercers és simplement un repositori git amb un manifest.json a l'arrel.

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

Abans de fer res, et diu clarament que els connectors s'executen com a codi arbitrari i sense contenidor dins del teu procés d'intèrpret de llarga durada, et mostra l'URL i et demana que ho confirmis. Pren-t'ho seriosament. La interfície de connectors de tercers no exposa directament els serveis d'autenticació, i una barra de substitució rep només capacitats limitades per a la interfície d'usuari sense autenticació configurada. Els connectors visuals continuen compartint l'escena QML de l'intèrpret i poden recórrer objectes pare normals, mentre que tot el codi de connector s'executa amb tot allò a què el teu compte d'usuari pot arribar. L'estat d'autenticació es protegeix per separat mantenint aquells serveis fora del graf d'objectes de l'amfitrió accessible. Només afegeix repositoris que estiguis disposat a executar, i llegeix-los abans d'habilitar-los.

Una barra de substitució pot renderitzar els ginys instal·lats, però els ginys de tercers amb servei poden tenir una funcionalitat reduïda allà perquè la barra no té permís per demanar l'objecte de servei en directe d'un altre connector. Torna a la omaros.bar integrada si un giny com aquest necessita el seu servei company.

Després clona el repositori en un directori de preparació, valida el manifest, rebutja la instal·lació si un altre connector ja reclama aquell identificador i el mou a ~/.config/omaros/plugins/<id>/. Sense --enable et demana si el vols activat ara, i pots dir que no i anar a llegir el codi primer. No executa mai res del connector, no executa mai cap ganxo d'instal·lació i no demana mai sudo: clona fitxers, comprova el manifest i commuta un bit per IPC.

Actualitzar és un pull d'avanç ràpid d'aquella mateixa còpia:

omaros plugin update acme.weather
omaros plugin update

Sense cap identificador, actualitza cada connector gestionat per git que tinguis. Et mostra la diferència abans d'aplicar-la, es nega a actualitzar si tens canvis locals que no pot avançar ràpid, i fa marxa enrere si la revisió nova falla la validació.

omaros plugin remove acme.weather

L'eliminació deshabilita primer el connector i després l'elimina si és una còpia git (el repositori continua sent a l'origen) o en treu l'enllaç si és un enllaç simbòlic. Una carpeta de connector feta a mà sense cap repositori git es mou a una còpia de seguretat amb marca de temps dins del directori de connectors en lloc d'eliminar-se del tot.

Clonar un integrat per modificar-lo

Aquesta és la meva part preferida. Si vols canviar com es comporta un giny integrat, no editis els fitxers de sota de $OMAROS_PATH — aquells pertanyen al paquet i la propera actualització els sobreescriurà. Clona'l en el seu lloc:

omaros plugin clone omaros.clock

Això copia tot el connector a ~/.config/omaros/plugins/omar.clock (el teu nom d'usuari, no el meu), el reanomena a "My Clock", l'habilita i fa passar l'intèrpret de l'integrat a la teva còpia — conservant la posició i la configuració d'un giny de barra existent. Afegeix-hi --edit per obrir el directori nou al teu $EDITOR immediatament, que és el que fa per tu l'opció Configuració > Connectors > Clona un connector del menú.

El prefix de nom d'usuari fa que l'identificador del teu clon sigui teu, de manera que compartir-lo no xoca amb el de ningú més. Les crides fetes a l'identificador integrat original es redirigeixen al teu clon, de manera que res del que es referia a omaros.clock necessita actualització. I si en fas un embolic, omaros plugin remove omar.clock torna a posar l'integrat.

Desar un fitxer en qualsevol lloc de sota de ~/.config/omaros/plugins/ torna a carregar automàticament el codi del connector, de manera que pots deixar l'editor obert i veure com arriben els teus canvis.

Escriure el teu propi

Un connector és un directori amb un manifest.json i una mica de QML. El manifest declara schemaVersion: 1, un id, un name, una version, una o més kinds i un objecte entryPoints que apunta al fitxer QML de cada mena:

Mena Què és
bar-widget Un component que la barra activa pot col·locar en una secció
panel Una finestra flotant persistent o invocada
overlay Una superposició a pantalla completa
menu Una superfície de menú invocada
service Un singleton sense interfície d'usuari
bar Una barra completa que substitueix la integrada

Un connector pot declarar diverses menes alhora: el connector multimèdia és alhora un service i un bar-widget. Els ginys de barra reben un bloc barWidget addicional amb un nom de visualització, una categoria, un defaultSection opcional i allowMultiple, que diu si té sentit tenir-ne més d'un a la barra. La majoria de ginys el posen a false; els separadors i els indicadors el posen a true.

Abans de publicar res, comprova-ho:

omaros plugin validate ./my-plugin

Això executa les mateixes comprovacions que fa l'intèrpret en carregar: la versió de l'esquema, els camps obligatoris, un identificador que no sigui reservat, punts d'entrada que siguin rutes relatives segures i que existeixin de debò, un punt d'entrada per a cada mena que hagis reclamat i cap enllaç simbòlic enlloc dins de la carpeta.

Per al desenvolupament de connectors, consulta la referència de l'intèrpret i el catàleg de connectors oficials.

Compartir el teu amb el món

Un cop hagis fet alguna cosa que t'agradi, posa-ho en un repositori git públic. Aquest és tot el mecanisme de distribució: llavors qualsevol pot executar omaros plugin add contra el teu URL i tenir-lo en funcionament en qüestió de segons.