Traduction automatique du turc (Cloudflare Workers AI), non relue par l'auteur. Lire l'original en turc

← Articles

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.

· 2 min de lecture
Sommaire

Résumé : Il explique comment installer une extension Quickshell : chaque extension se compose, dans son propre répertoire, d'un metadata.json et d'un fichier QML principal ; Quickshell les découvre à l'exécution via Instantiator et Loader et 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.

Sources