Dotfiles_ArchAP/quickshell/.config/quickshell/labfy-sway/applications
2026-10-08 22:00:58 +02:00
..
ApplicationsMenu.qml feat(quickshell): add applications menu and workspace separators 2026-10-08 22:00:58 +02:00
ApplicationsModel.js feat(quickshell): add applications menu and workspace separators 2026-10-08 22:00:58 +02:00
backend.py feat(quickshell): add applications menu and workspace separators 2026-10-08 22:00:58 +02:00
README.md feat(quickshell): add applications menu and workspace separators 2026-10-08 22:00:58 +02:00

Menu Applications

Le bouton Arch est le premier élément de la barre, avant Resize et les workspaces. Il ouvre un PanelWindow layer-shell sur la sortie de la barre cliquée, à 16 px du bord gauche et 12 px sous la barre. La carte mesure au plus 680 × 560 px logiques et se réduit aux dimensions disponibles. La surface ne réserve aucune place dans Sway ; sa zone transparente absorbe le clic extérieur jusqu'à la fin de l'événement souris. Le raccourci Mod+Alt+L, auparavant le lanceur Wofi drun, choisit la sortie focalisée via ~/.config/sway/scripts/applications-quickshell. Les autres usages de Wofi et Rofi restent en place. Une seule sortie possède le menu à la fois.

ApplicationsMenu.qml montre la recherche, une navigation par catégories et une grille d'icônes. ApplicationsModel.js classe les entrées fournies par DesktopEntries.applications ; l'événement applicationsChanged actualise le catalogue après une installation ou désinstallation sans relancer Sway. La recherche compare noms, noms génériques et mots-clés sans tenir compte des majuscules et accents, dans toutes les catégories. Les catégories vides sont masquées. Les icônes d'application conservent leur thème et leurs couleurs ; une icône générique est utilisée en dernier recours. Le menu utilise les couleurs du thème commun Catppuccin Mocha et donne le focus initial à la recherche. Tab et Shift+Tab passent entre recherche, catégories et grille ; les flèches choisissent, Entrée lance, Espace modifie le favori de la sélection, Échap ferme.

Les favoris ordonnés sont enregistrés sous $XDG_STATE_HOME/labfy-sway/applications-favorites.json (par défaut ~/.local/state/labfy-sway/), hors du dépôt. Le fichier privé (0600) ne contient que la version et des identifiants .desktop. L'écriture est atomique et protégée des mises à jour concurrentes. Au premier usage, Firefox, Kitty, Yazi et Neovim sont proposés seulement si leurs entrées sont présentes. Une liste existante n'est jamais écrasée ; les entrées désinstallées restent dans l'état mais sont ignorées par la grille.

Le menu transmet uniquement un identifiant desktop validé à applications/backend.py. Pour une entrée graphique ordinaire, ce helper appelle uwsm app -t service -- <identifiant> afin de préserver l'intégration de la session et de détacher l'application de QuickShell. Une entrée DBusActivatable utilise GioUnix.DesktopAppInfo.launch. Pour Terminal=true, le helper construit une entrée temporaire en mémoire et laisse Gio interpréter Exec, ses arguments et codes de champ, ainsi que Path ; la commande est encadrée par uwsm app -t service -- kitty --. Une entrée lançant déjà Kitty ne reçoit pas de second terminal. Les véritables entrées yazi.desktop et nvim.desktop ont été vérifiées dans Kitty. Le succès du helper confirme la demande de lancement, sans prétendre qu'une fenêtre est déjà apparue.

Dépendances : QuickShell 0.3.1 avec DesktopEntries, Python 3 avec PyGObject (GioUnix), UWSM, Kitty, Sway IPC, jq, quickshell ipc, la Nerd Font existante et le thème d'icônes système. Aucune base de données ni daemon n'est ajouté. Les limites : une seule sortie physique a été testée ; certaines icônes peuvent manquer dans les thèmes installés ; le résultat d'une demande UWSM ne garantit pas le démarrage complet de l'application. Les entrées desktop masquées ou exclues par l'environnement sont aussi refusées par Gio au moment du lancement.

Tests isolés : python3 -B -m unittest discover -s tests/applications -p 'test_*.py' -v et node tests/applications/test_model.js depuis la racine du dépôt. qmllint vérifie le composant et la barre. Les tests du backend emploient des entrées desktop synthétiques, sans lancer leurs commandes.