L'écosystème des extensions Quickshell : extensions communautaires et structure modulaire
Note —Écriture d'extensions indépendantes pour Omarchy et Quickshell, hiérarchie des répertoires, chargement des modules QML et pratiques d'exécution sécurisée.
Sommaire
Résumé : Il explique comment installer une extension Quickshell : chaque extension se compose, dans son propre répertoire, d'un
metadata.jsonet d'un fichier QML principal ; Quickshell les découvre à l'exécution viaInstantiatoretLoaderet les ajoute au panneau. Une extension défectueuse n'arrête qu'elle-même, pas tout le bureau. La dernière partie donne en exemple les extensions de sécurité que j'ai écrites pour Omarchy.
Ce qui rend vraiment puissant un shell de bureau, ce ne sont pas seulement les fonctionnalités offertes par les développeurs du noyau ; c'est une architecture d'extensions (plugins) souple, à laquelle la communauté peut facilement contribuer. Omarchy Shell et Quickshell, grâce à leur structure de composants modulaire, transforment le développement d'extensions en un jeu d'enfant.
Des milliers d'extensions communautaires sont partagées sur le catalogue d'extensions Omarchy (plugins.omarchy.org) et les utilisateurs peuvent les intégrer à leur bureau avec une seule commande.
1. Anatomie d'une extension Quickshell
Chaque extension se compose, dans son propre répertoire indépendant, d'un fichier de déclaration (metadata.json) et d'un fichier QML principal :
~/.config/quickshell/plugins/badusb-shield/
├── metadata.json
├── Plugin.qml
└── assets/
└── icon.svg
Exemple de manifeste metadata.json
{
"name": "BadUSB Shield",
"id": "org.omarchy.badusb-shield",
"version": "1.2.0",
"author": "Ozan Özdil",
"description": "USB veri yollarını anlık izleyen donanım güvenlik eklentisi",
"entryPoint": "Plugin.qml",
"category": "security"
}
2. Chargement dynamique de l'extension
Quickshell, en utilisant les composants Instantiator ou Loader, découvre les extensions installées à l'exécution et les place dans le panneau :
import QtQuick 2.15
import Quickshell 1.0
Row {
spacing: 6
Repeater {
model: PluginManager.installedPlugins
Loader {
source: modelData.entryPointUrl
}
}
}
Même si une erreur se produit dans le code d'une extension, grâce au mécanisme d'isolation de Quickshell, tout le bureau ne plante pas ; seule l'extension concernée est arrêtée en mode sécurisé.
3. Nos extensions communautaires
Les outils de cybersécurité et de système que nous avons apportés à l'écosystème Omarchy (BadUSB Shield, CVE Radar, DNS Leak Guard, Ghost MAC, etc.) sont parmi les exemples les plus concrets de l'architecture modulaire d'extensions de Quickshell.
Mon analyse
- Une extension commence avec deux fichiers : un fichier de manifeste et un composant QML suffisent.
- L'isolation protège le bureau : une erreur dans une extension n'arrête que cette extension.
- Le catalogue facilite la distribution : les extensions peuvent être installées en une seule commande depuis le catalogue Omarchy.