Plugins κελύφους¶
Η επιφάνεια εργασίας OmarOS εκτελείται ως μια μοναδική μακρόβια διεργασία Quickshell που ονομάζεται omaros-shell, και σχεδόν όλα όσα βλέπετε στην οθόνη είναι ένα plugin μέσα σε αυτή. Η γραμμή είναι ένα plugin. Το ίδιο ισχύει για τα πάνελ που πέφτουν από αυτή, τις επικαλύψεις πλήρους οθόνης όπως ο επιλογέας emoji και ο διαχειριστής προχείρου, το ίδιο το μενού του OmarOS, την οθόνη κλειδώματος, το παράθυρο διαλόγου polkit και τις υπηρεσίες χωρίς κεφαλή που παρακολουθούν την μπαταρία σας και ζεσταίνουν την οθόνη σας τη νύχτα.
Αυτό δεν είναι απλώς μια λεπτομέρεια υλοποίησης. Σημαίνει ότι μπορείτε να απενεργοποιήσετε κομμάτια της επιφάνειας εργασίας, να τα αντικαταστήσετε, ή να γράψετε τα δικά σας χωρίς να αγγίξετε μία γραμμή του πηγαίου κώδικα του OmarOS.
Τα plugins πρώτου κατασκευαστή συνοδεύουν το OmarOS και ζουν στο $OMAROS_PATH/shell/plugins/. Οτιδήποτε προσθέσετε εσείς οι ίδιοι — τα δικά σας πειράματα, ή κάτι που βρήκατε στο GitHub — ζει στο ~/.config/omaros/plugins/. Και τα δύο ανακαλύπτονται με τον ίδιο τρόπο κατά την εκκίνηση, αλλά τα ενσωματωμένα λαμβάνουν αξιόπιστες διεπαφές κελύφους ενώ τα plugins τρίτων λαμβάνουν μια περιορισμένη διεπαφή περιορισμένη στη δική τους υπηρεσία και στον κύκλο ζωής τους. Οι κλώνοι των ενσωματωμένων διατηρούν μόνο τη διαμόρφωση που αφορά την πηγή και τις κλήσεις UI που χρειάζονται για την αρχική συμπεριφορά.
Βλέποντας τι έχετε¶
Αυτό εκτυπώνει κάθε ανακαλυφθέν plugin με το id του, αν είναι ενεργοποιημένο, αν είναι πρώτου κατασκευαστή ή τρίτου, τα είδη του και το εμφανιζόμενο όνομά του. Προσθέστε --json αν το τροφοδοτείτε σε κάτι άλλο.
Τα id των plugins είναι ονοματοδοτημένα. Τα ενσωματωμένα ξεκινούν όλα με omaros. — omaros.clock, omaros.network, omaros.notifications — και αυτός ο χώρος ονομάτων είναι δεσμευμένος, οπότε κανένα plugin τρίτου δεν μπορεί ποτέ να τον διεκδικήσει.
Ενεργοποίηση και απενεργοποίησή τους¶
Ή χρησιμοποιήστε το μενού: το Ρύθμιση > Plugins έχει Enable, Disable, Add, Clone και Remove, καθεμία με έναν επιλογέα που προσφέρει μόνο τα plugins που έχουν νόημα για εκείνη την ενέργεια.
Η κατάσταση ενεργοποίησης αποθηκεύεται στο ~/.config/omaros/shell.json, και ο κανόνας διαφέρει ελαφρώς για τα δύο είδη plugin. Ένα plugin τρίτου ενεργοποιείται ακριβώς όταν το id του εμφανίζεται κάπου μέσα σε αυτό το αρχείο — ως καταχώριση διάταξης γραμμής, ως καταχώριση στο plugins[], ή ως bar.id. Τα plugins πρώτου κατασκευαστή που δεν είναι widgets γραμμής ισχύουν αντίστροφα: είναι ενεργοποιημένα από προεπιλογή και απενεργοποιούνται μόνο με το να καταχωρούνται στο disabledPlugins[].
Ένα πλήρες plugin γραμμής δεν έχει καθόλου κατάσταση απενεργοποίησης. Πάντα υπάρχει ακριβώς μία γραμμή, οπότε την αντικαθιστάτε ενεργοποιώντας μια άλλη. Η τοποθέτηση των widgets γραμμής καλύπτεται στη την πάνω γραμμή.
Προσθήκη ενός plugin από το git¶
Ένα plugin τρίτου είναι απλώς ένα αποθετήριο git με ένα manifest.json στη ρίζα του.
Πριν κάνει οτιδήποτε, σας λέει ξεκάθαρα ότι τα plugins εκτελούνται ως αυθαίρετος, μη περιφραγμένος κώδικας μέσα στη μακρόβια διεργασία κελύφους σας, σας δείχνει τη διεύθυνση URL και σας ζητά να επιβεβαιώσετε. Πάρτε το στα σοβαρά. Η διεπαφή των plugins τρίτων δεν εκθέτει απευθείας υπηρεσίες ταυτοποίησης, και μια γραμμή αντικατάστασης λαμβάνει μόνο περιορισμένες δυνατότητες για διαμορφωμένο UI χωρίς ταυτοποίηση. Τα οπτικά plugins εξακολουθούν να μοιράζονται τη σκηνή QML του κελύφους και μπορούν να περπατήσουν τα συνηθισμένα αντικείμενα γονέα, ενώ όλος ο κώδικας των plugins εκτελείται με όλα όσα μπορεί να φτάσει ο λογαριασμός χρήστη σας. Η κατάσταση ταυτοποίησης προστατεύεται χωριστά με το να κρατώνται εκείνες οι υπηρεσίες έξω από το προσιτό γράφημα αντικειμένων του κεντρικού υπολογιστή. Προσθέστε μόνο αποθετήρια που είστε διατεθειμένοι να εκτελέσετε, και διαβάστε τα πριν τα ενεργοποιήσετε.
Μια γραμμή αντικατάστασης μπορεί να αποδώσει εγκατεστημένα widgets, αλλά τα widgets τρίτων που στηρίζονται σε υπηρεσίες μπορεί να έχουν μειωμένη λειτουργικότητα εκεί, επειδή η γραμμή δεν επιτρέπεται να ζητήσει το ζωντανό αντικείμενο υπηρεσίας ενός άλλου plugin. Επιστρέψτε στην ενσωματωμένη omaros.bar αν ένα τέτοιο widget χρειάζεται τη συνοδευτική υπηρεσία του.
Στη συνέχεια κλωνοποιεί το αποθετήριο σε έναν προσωρινό κατάλογο προετοιμασίας, επικυρώνει το manifest, αρνείται την εγκατάσταση αν ένα άλλο plugin διεκδικεί ήδη εκείνο το id, και το μετακινεί στο ~/.config/omaros/plugins/<id>/. Χωρίς το --enable ρωτά αν το θέλετε ενεργοποιημένο τώρα, και μπορείτε να πείτε όχι και να διαβάσετε πρώτα τον κώδικα. Ποτέ δεν εκτελεί τίποτα από το plugin, ποτέ δεν εκτελεί hook εγκατάστασης και ποτέ δεν ζητά sudo — κλωνοποιεί αρχεία, ελέγχει το manifest και γυρίζει ένα bit μέσω IPC.
Η ενημέρωση είναι μια γρήγορη προώθηση pull του ίδιου checkout:
Χωρίς id ενημερώνει κάθε plugin που διαχειρίζεται από git και έχετε. Σάς δείχνει τη διαφορά πριν την εφαρμόσει, αρνείται να ενημερώσει αν έχετε τοπικές αλλαγές που δεν μπορεί να παρακάμψει με γρήγορη προώθηση, και επιστρέφει πίσω αν η νέα αναθεώρηση αποτύχει στην επικύρωση.
Η αφαίρεση απενεργοποιεί πρώτα το plugin, και στη συνέχεια το διαγράφει αν είναι ένα checkout git (το αποθετήριο βρίσκεται ακόμα upstream) ή το αποσυνδέει αν είναι ένας συμβολικός σύνδεσμος. Ένας χειροποίητος φάκελος plugin χωρίς αποθετήριο git μετακινείται σε ένα αντίγραφο ασφαλείας με σφραγίδα ώρας μέσα στον κατάλογο plugins αντί να διαγράφεται εντελώς.
Κλωνοποίηση ενός ενσωματωμένου για να το τροποποιήσετε¶
Αυτό είναι το αγαπημένο μου μέρος. Αν θέλετε να αλλάξετε πώς συμπεριφέρεται ένα ενσωματωμένο widget, μην επεξεργάζεστε τα αρχεία κάτω από το $OMAROS_PATH — αυτά ανήκουν στο πακέτο και η επόμενη ενημέρωση θα τα αντικαταστήσει. Αντί αυτού κλωνοποιήστε το:
Αυτό αντιγράφει ολόκληρο το plugin στο ~/.config/omaros/plugins/omar.clock (το δικό σας όνομα χρήστη, όχι το δικό μου), το μετονομάζει σε "My Clock", το ενεργοποιεί και μετατρέπει το κέλυφος από το ενσωματωμένο στο αντίγραφό σας — διατηρώντας τη θέση και τις ρυθμίσεις ενός υπάρχοντος widget γραμμής. Προσθέστε το --edit για να ανοίξετε τον νέο κατάλογο στον επεξεργαστή $EDITOR σας αμέσως, κάτι που κάνει για εσάς το Ρύθμιση > Plugins > Clone Plugin του μενού.
Το πρόθεμα του ονόματος χρήστη κρατά το id του κλώνου σας δικό σας, οπότε η κοινή του χρήση δεν συγκρούεται με κανενός άλλου. Οι κλήσεις που γίνονται στο αρχικό ενσωματωμένο id δρομολογούνται στον κλώνο σας, οπότε τίποτα που αναφερόταν στο omaros.clock δεν χρειάζεται ενημέρωση. Και αν τα κάνετε μαντάρα, το omaros plugin remove omar.clock επαναφέρει το ενσωματωμένο.
Η αποθήκευση ενός αρχείου οπουδήποτε κάτω από το ~/.config/omaros/plugins/ επαναφορτώνει αυτόματα τον κώδικα του plugin, ώστε να μπορείτε να αφήσετε τον επεξεργαστή ανοιχτό και να παρακολουθείτε τις αλλαγές σας να εφαρμόζονται.
Γράφοντας τα δικά σας¶
Ένα plugin είναι ένας κατάλογος με ένα manifest.json και λίγο QML. Το manifest δηλώνει schemaVersion: 1, ένα id, ένα name, μια version, ένα ή περισσότερα kinds και ένα αντικείμενο entryPoints που δείχνει στο αρχείο QML για κάθε είδος:
| Είδος | Τι είναι |
|---|---|
bar-widget |
Ένα συστατικό που η ενεργή γραμμή μπορεί να τοποθετήσει σε μια ενότητα |
panel |
Ένα επίμονο ή καλούμενο αιωρούμενο παράθυρο |
overlay |
Μια επικάλυψη πλήρους οθόνης |
menu |
Μια καλούμενη επιφάνεια μενού |
service |
Ένα μονότονο στοιχείο χωρίς κεφαλή και χωρίς UI |
bar |
Μια πλήρης γραμμή που αντικαθιστά την ενσωματωμένη |
Ένα plugin μπορεί να δηλώσει πολλά είδη ταυτόχρονα — το media plugin είναι και service και bar-widget. Τα widgets γραμμής λαμβάνουν ένα επιπλέον μπλοκ barWidget με ένα εμφανιζόμενο όνομα, μια κατηγορία, ένα προαιρετικό defaultSection και το allowMultiple, το οποίο λέει αν έχει νόημα να έχετε περισσότερα από ένα στη γραμμή. Τα περισσότερα widgets το ορίζουν στο false· οι αποστάτες και οι δείκτες το ορίζουν στο true.
Πριν δημοσιεύσετε οτιδήποτε, ελέγξτε το:
Αυτό εκτελεί τους ίδιους ελέγχους που κάνει το κέλυφος κατά τη φόρτωση: την έκδοση σχήματος, τα απαιτούμενα πεδία, ένα id που δεν είναι δεσμευμένο, σημεία εισόδου που είναι ασφαλείς σχετικές διαδρομές και πράγματι υπάρχουν, ένα σημείο εισόδου για κάθε είδος που δηλώσατε και κανένας συμβολικός σύνδεσμος πουθενά μέσα στον φάκελο.
Για ανάπτυξη plugin, δείτε τα την αναφορά του κελύφους και τον κατάλογο plugins πρώτου κατασκευαστή.
Μοιραζόμενοι τα δικά σας με τον κόσμο¶
Μόλις φτιάξετε κάτι που σας αρέσει, βάλτε το σε ένα δημόσιο αποθετήριο git. Αυτός είναι ολόκληρος ο μηχανισμός διανομής — ο καθένας μπορεί τότε να εκτελέσει omaros plugin add στη διεύθυνση URL σας και να το έχει να τρέχει σε δευτερόλεπτα.