% Environnement de bureau # Spécification de l'Environnement de Bureau en Rust ## Objectifs - Développer un environnement de bureau performant et robuste en **Rust**. - Prioriser la **vitesse d'exécution**, la **robustesse** et l'**ergonomie**. - Permettre une **interopérabilité** avec toutes les bibliothèques graphiques existantes sous GNU/Linux. - Assurer une **gestion adaptative des tailles de fenêtres** en fonction de la résolution du moniteur (similaire à macOS). - Fonctionner principalement sous **Wayland**, avec une compatibilité optionnelle pour **X11**. ## Architecture ### 1. Gestion de l'affichage - Utilisation de **Wayland** via `smithay` pour la composition. - Support possible de **X11** via `x11-rs` ou `xcb` pour la compatibilité avec d'anciennes applications. - Intégration avec **wlroots** pour une gestion avancée des sorties et entrées. ### 2. Interface Graphique et Rendu - **Moteurs graphiques supportés**: - `wgpu` (Rust-native, performant, compatible Vulkan/OpenGL/Metal) - `gtk-rs` pour compatibilité GTK - `qt-rs` via `cxx` pour Qt - `druid` ou `skia-rs` pour un rendu custom - **Gestion du redimensionnement automatique des fenêtres**: - Récupération des informations de moniteur via `wl_output` - Ajustement dynamique des fenêtres en fonction du DPI et de la résolution - Positionnement intelligent pour optimiser l'espace disponible ### 3. Gestionnaire de Fenêtres - Basé sur **smithay** et inspiré des gestionnaires comme Mutter (Gnome) et Xfwm (XFCE). - Prise en charge des **animations fluides** pour le redimensionnement. - Compatibilité avec XWayland pour les applications non natives Wayland. - Intégration d'un **tiling dynamique optionnel**. ### 4. Gestion des Entrées et Sessions - Utilisation de **libinput** pour la gestion du clavier et de la souris. - Gestion des sessions via **elogind** ou **systemd-logind**. - Support des événements tactiles. ### 5. Composants Clés - **Explorateur de fichiers**: intégration avec `gio` ou `rfd`. - **Barre des tâches et menu d’applications** inspirés de Rofi/KRunner. - **Gestion des notifications** via D-Bus et Freedesktop. - **Panneau de configuration** pour l’ergonomie et l’adaptabilité. ## Optimisation et Interopérabilité - **Gestion efficace des threads** via `tokio` ou `async-std`. - Communication entre composants via **D-Bus** (`zbus`). - Système de configuration modulaire avec **fichiers TOML/YAML**. ## Contraintes Ergonomiques (À définir) - …