विषय पर बढ़ें

Shell Plugins

OmarOS डेस्कटॉप omaros-shell नामक एकल दीर्घकालिक Quickshell प्रक्रिया के रूप में चलता है, और स्क्रीन पर आप जो कुछ भी देखते हैं वह लगभग सभी उसके अंदर एक प्लगइन है। बार एक प्लगइन है। इसी तरह वे पैनल जो उससे नीचे गिरते हैं, इमोजी पिकर और क्लिपबोर्ड प्रबंधक जैसे फ़ुलस्क्रीन ओवरले, स्वयं 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

या मेनू का उपयोग करें: Setup > 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 पर एक बिट पलट देता है।

अपडेट करना उसी चेकआउट का फ़ास्ट-फ़ॉरवर्ड पुल है:

omaros plugin update acme.weather
omaros plugin update

कोई id न होने पर यह आपके पास मौजूद हर git-प्रबंधित प्लगइन को अपडेट करता है। यह लागू करने से पहले आपको diff दिखाता है, अगर आपके पास स्थानीय बदलाव हैं जिन्हें यह फ़ास्ट-फ़ॉरवर्ड नहीं कर सकता तो अपडेट से इनकार कर देता है, और अगर नया संशोधन सत्यापन में विफल होता है तो वापस ले लेता है।

omaros plugin remove acme.weather

हटाने से पहले प्लगइन अक्षम हो जाता है, फिर अगर यह git चेकआउट है तो इसे हटा दिया जाता है (रिपॉज़िटरी अभी भी अपस्ट्रीम है) या अगर यह सिमलिंक है तो इसे अनलिंक कर दिया जाता है। बिना git रिपॉज़िटरी वाला हाथ से बनाया गया प्लगइन फ़ोल्डर पूरी तरह हटाए जाने के बजाय प्लगइन डायरेक्टरी के अंदर समय-मुद्रित बैकअप में ले जाया जाता है।

इसे संशोधित करने के लिए अंतर्निहित को क्लोन करना

यह मेरा पसंदीदा हिस्सा है। अगर आप बदलना चाहते हैं कि कोई अंतर्निहित विजेट कैसे व्यवहार करता है, तो $OMAROS_PATH के अंतर्गत फ़ाइलें संपादित न करें — वे पैकेज की हैं और अगला अपडेट उन्हें अधिलेखित कर देगा। इसके बजाय इसे क्लोन करें:

omaros plugin clone omaros.clock

यह पूरे प्लगइन को ~/.config/omaros/plugins/omar.clock (आपका उपयोगकर्ता नाम, मेरा नहीं) में कॉपी करता है, इसका नाम बदलकर "My Clock" कर देता है, इसे सक्षम करता है, और शेल को अंतर्निहित से आपकी प्रति पर स्विच कर देता है — मौजूदा बार विजेट की स्थिति और सेटिंग रखते हुए। नई डायरेक्टरी को अपने $EDITOR में तुरंत खोलने के लिए --edit जोड़ें, जो मेनू का Setup > Plugins > Clone Plugin आपके लिए करता है।

उपयोगकर्ता नाम उपसर्ग आपके क्लोन की id को आपकी बनाए रखता है, इसलिए इसे साझा करने से किसी और के साथ टकराव नहीं होता। मूल अंतर्निहित id पर की गई कॉल आपके क्लोन पर भेजी जाती हैं, इसलिए omaros.clock का संदर्भ देने वाली किसी भी चीज़ को अपडेट करने की आवश्यकता नहीं है। और अगर आप इसकी गड़बड़ कर देते हैं, तो omaros plugin remove omar.clock अंतर्निहित को वापस रख देता है।

~/.config/omaros/plugins/ के अंतर्गत कहीं भी फ़ाइल सहेजने से प्लगइन कोड स्वतः फिर से लोड हो जाता है, इसलिए आप संपादक खुला छोड़ सकते हैं और अपने बदलावों को लागू होते देख सकते हैं।

अपना स्वयं का लिखना

प्लगइन एक डायरेक्टरी है जिसमें manifest.json और कुछ QML है। मेनिफ़ेस्ट schemaVersion: 1, एक id, name, version, एक या अधिक kinds, और प्रत्येक प्रकार के लिए QML फ़ाइल की ओर इंगित करने वाला entryPoints ऑब्जेक्ट घोषित करता है:

Kind What it is
bar-widget एक घटक जिसे सक्रिय बार किसी अनुभाग में डाल सकता है
panel स्थायी या बुलाई गई तैरती हुई विंडो
overlay फ़ुलस्क्रीन ओवरले
menu बुलाई गई मेनू सतह
service बिना UI वाला हेडलेस सिंगलटन
bar पूर्ण बार जो अंतर्निहित को प्रतिस्थापित करता है

प्लगइन एक साथ कई प्रकार घोषित कर सकता है — मीडिया प्लगइन service और bar-widget दोनों है। बार विजेट को प्रदर्शन नाम, श्रेणी, वैकल्पिक defaultSection और allowMultiple के साथ एक अतिरिक्त barWidget ब्लॉक मिलता है, जो बताता है कि क्या बार पर एक से अधिक रखना समझ में आता है। अधिकांश विजेट इसे false पर सेट करते हैं; स्पेसर और संकेतक इसे true पर सेट करते हैं।

कुछ भी प्रकाशित करने से पहले, इसकी जाँच करें:

omaros plugin validate ./my-plugin

यह वही जाँच चलाता है जो शेल लोड समय पर करता है: स्कीमा संस्करण, आवश्यक फ़ील्ड, आरक्षित न होने वाली id, सुरक्षित सापेक्ष पथ वाले और वास्तव में मौजूद प्रवेश बिंदु, आपके द्वारा दावा किए गए हर प्रकार के लिए एक प्रवेश बिंदु, और फ़ोल्डर के अंदर कहीं भी कोई सिमलिंक नहीं।

प्लगइन डेवलपमेंट के लिए, शेल संदर्भ और प्रथम-पक्ष प्लगइन कैटलॉग देखें।

अपना दुनिया के साथ साझा करना

एक बार जब आप कुछ बना लें जो आपको पसंद है, तो इसे सार्वजनिक git रिपॉज़िटरी में डालें। यही पूरी वितरण विधि है — फिर कोई भी आपके URL के विरुद्ध omaros plugin add चला सकता है और इसे सेकंडों में चला सकता है।