ข้ามไปที่เนื้อหา

ปลั๊กอิน Shell

เดสก์ท็อป OmarOS รันเป็นกระบวนการ Quickshell เดียวที่อยู่ยาวนานชื่อ omaros-shell และแทบทุกอย่างที่คุณเห็นบนหน้าจอคือปลั๊กอินอยู่ข้างในมัน แถบคือปลั๊กอิน แผงที่เลื่อนลงมาจากมันก็เช่นกัน โอเวอร์เลย์เต็มจออย่างตัวเลือกอีโมจิและตัวจัดการคลิปบอร์ดก็เช่นกัน เมนู OmarOS เอง หน้าจอล็อก กล่องโต้ตอบ polkit และบริการไร้ส่วนหัวที่คอยดูแบตเตอรี่ของคุณและอุ่นหน้าจอตอนกลางคืนก็เช่นกัน

นั่นไม่ใช่แค่รายละเอียดการนำไปใช้ มันหมายความว่าคุณสามารถปิดชิ้นส่วนของเดสก์ท็อป สลับพวกมันออก หรือเขียนของคุณเองโดยไม่แตะต้องซอร์สโค้ดของ OmarOS สักบรรทัด

ปลั๊กอินบุคคลที่หนึ่งมาพร้อม OmarOS และอยู่ใน $OMAROS_PATH/shell/plugins/ อะไรก็ตามที่คุณเพิ่มเอง — การทดลองของคุณเอง หรืออะไรที่คุณพบบน GitHub — อยู่ใน ~/.config/omaros/plugins/ ทั้งสองถูกค้นพบในวิธีเดียวกันตอนเริ่ม แต่ปลั๊กอินในตัวได้รับอินเทอร์เฟซ shell ที่เชื่อถือได้ ขณะที่ปลั๊กอินบุคคลที่สามได้รับอินเทอร์เฟซจำกัดที่กำหนดขอบเขตเฉพาะบริการและวงจรชีวิตของตัวเอง โคลนของปลั๊กอินในตัวเก็บเฉพาะการกำหนดค่าเฉพาะแหล่งและการเรียก 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

ก่อนมันจะทำอะไร มันบอกคุณอย่างตรงไปตรงมาว่าปลั๊กอินรันเป็นโค้ดตามอำเภอใจ ไม่แซนด์บ็อกซ์ ภายในกระบวนการ shell ที่อยู่ยาวนานของคุณ แสดง URL ให้คุณ และขอให้คุณยืนยัน จงถือเรื่องนั้นให้จริงจัง อินเทอร์เฟซปลั๊กอินบุคคลที่สามไม่ได้เปิดเผยบริการยืนยันตัวตนโดยตรง และแถบแทนที่จะได้เฉพาะความสามารถจำกัดสำหรับ UI ที่ไม่ใช่การยืนยันตัวตนซึ่งกำหนดค่าไว้เท่านั้น ปลั๊กอินภาพยังคงแชร์ฉาก QML ของ shell และเดินวัตถุหลักธรรมดาได้ ขณะที่โค้ดปลั๊กอินทั้งหมดรันพร้อมทุกอย่างที่บัญชีผู้ใช้ของคุณเข้าถึงได้ สถานะการยืนยันตัวตนถูกปกป้องแยกต่างหากโดยเก็บบริการเหล่านั้นนอกกราฟวัตถุโฮสต์ที่เข้าถึงได้ เพิ่มเฉพาะรีโพที่คุณเต็มใจจะรันเท่านั้น และอ่านพวกมันก่อนเปิดใช้

แถบแทนที่สามารถแสดงวิดเจ็ตที่ติดตั้งไว้ได้ แต่วิดเจ็ตบุคคลที่สามที่พึ่งพาบริการอาจมีฟังก์ชันลดลงตรงนั้น เพราะแถบไม่ได้รับอนุญาตให้ขอวัตถุบริการสดของปลั๊กอินอื่น สลับกลับไป omaros.bar ในตัวถ้าวิดเจ็ตดังกล่าวต้องการบริการคู่หูของมัน

จากนั้นมันโคลนรีโพลงในไดเรกทอรีจัดเตรียม ตรวจสอบ manifest ปฏิเสธการติดตั้งหากปลั๊กอินอื่นอ้าง id นั้นไปแล้ว และย้ายมันเข้าไปใน ~/.config/omaros/plugins/<id>/ โดยไม่มี --enable มันถามว่าคุณอยากให้มันเปิดตอนนี้หรือไม่ และคุณสามารถปฏิเสธและไปอ่านโค้ดก่อนได้ มันไม่เคยรันอะไรจากปลั๊กอิน ไม่เคยรัน hook ติดตั้ง และไม่เคยขอ sudo — มันโคลนไฟล์ ตรวจสอบ manifest และพลิกบิตผ่าน IPC

การอัปเดตคือการ pull แบบ fast-forward ของ checkout เดียวกันนั้น:

omaros plugin update acme.weather
omaros plugin update

โดยไม่มี id มันอัปเดตปลั๊กอินที่จัดการด้วย git ทุกตัวที่คุณมี มันแสดง diff ให้คุณดูก่อนนำไปใช้ ปฏิเสธที่จะอัปเดตหากคุณมีการเปลี่ยนแปลงในเครื่องที่มัน fast-forward ผ่านไม่ได้ และย้อนกลับหากรุ่นใหม่ล้มเหลวในการตรวจสอบ

omaros plugin remove acme.weather

การลบออกจะปิดใช้ปลั๊กอินก่อน จากนั้นลบมันถ้ามันเป็น git checkout (รีโพยังอยู่ต้นทาง) หรือ unlink มันถ้ามันเป็น symlink โฟลเดอร์ปลั๊กอินทำมือที่ไม่มีรีโพ git จะถูกย้ายไปสำรองประทับเวลาภายในไดเรกทอรีปลั๊กอินแทนที่จะถูกลบออกไปเฉย ๆ

โคลนปลั๊กอินในตัวเพื่อปรับแก้มัน

นี่คือส่วนโปรดของฉัน ถ้าคุณอยากเปลี่ยนวิธีที่วิดเจ็ตในตัวทำงาน อย่าแก้ไขไฟล์ใต้ $OMAROS_PATH — พวกมันเป็นของแพ็กเกจ และการอัปเดตครั้งต่อไปจะเขียนทับพวกมัน ให้โคลนมันแทน:

omaros plugin clone omaros.clock

นั่นคัดลอกทั้งปลั๊กอินเข้าไปใน ~/.config/omaros/plugins/omar.clock (ชื่อผู้ใช้ของคุณ ไม่ใช่ของฉัน) เปลี่ยนชื่อเป็น "My Clock" เปิดใช้มัน และสลับ shell จากตัวในตัวไปเป็นสำเนาของคุณ — โดยเก็บตำแหน่งและการตั้งค่าของวิดเจ็ตแถบที่มีอยู่ไว้ เพิ่ม --edit เพื่อเปิดไดเรกทอรีใหม่ใน $EDITOR ของคุณทันที ซึ่งเป็นสิ่งที่ ตั้งค่า > Plugins > Clone Plugin ของเมนูทำให้คุณ

คำนำหน้าชื่อผู้ใช้ทำให้ id ของโคลนคุณเป็นของคุณ ดังนั้นการแชร์มันจึงไม่ชนกับของคนอื่น การเรียกไปยัง id ในตัวดั้งเดิมจะถูกส่งไปโคลนของคุณ ดังนั้นอะไรก็ตามที่อ้างถึง omaros.clock จึงไม่จำเป็นต้องอัปเดต และถ้าคุณทำมันพัง omaros plugin remove omar.clock จะเอาตัวในตัวกลับมา

การบันทึกไฟล์ที่ใดก็ตามใต้ ~/.config/omaros/plugins/ จะโหลดโค้ดปลั๊กอินซ้ำโดยอัตโนมัติ ดังนั้นคุณจึงปล่อยโปรแกรมแก้ไขเปิดไว้และดูการเปลี่ยนแปลงของคุณลงจอดได้

เขียนของคุณเอง

ปลั๊กอินคือไดเรกทอรีพร้อม manifest.json และ QML บ้าง manifest ประกาศ 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

นั่นรันการตรวจสอบเดียวกับที่ shell ทำเมื่อโหลด เวอร์ชันสคีมา ฟิลด์ที่ต้องมี id ที่ไม่ถูกสงวน จุดเริ่มต้นที่เป็นพาธสัมพัทธ์ปลอดภัยและมีอยู่จริง จุดเริ่มต้นสำหรับทุกชนิดที่คุณอ้าง และไม่มี symlink ที่ใดภายในโฟลเดอร์เลย

สำหรับการพัฒนาปลั๊กอิน ให้ดู เอกสารอ้างอิง shell และ แคตตาล็อกปลั๊กอินบุคคลที่หนึ่ง

แชร์ของคุณกับโลก

เมื่อคุณทำอะไรที่คุณชอบขึ้นมาแล้ว ให้วางมันไว้ในรีโพ git สาธารณะ นั่นคือกลไกการเผยแพร่ทั้งหมด — จากนั้นใครก็ตามก็รัน omaros plugin add กับ URL ของคุณและมีมันรันอยู่ภายในไม่กี่วินาทีได้