# Manifeste Flatpak — Galerie de thèmes # # ┌───────────────────────────────────────────────────────────────────────────┐ # │ À LIRE AVANT DE PUBLIER : cette application est un mauvais candidat au │ # │ bac à sable. Trois de ses fonctions ne peuvent pas marcher telles quelles │ # │ sous Flatpak (détail dans « LIMITES » plus bas). Ce manifeste est fourni │ # │ pour construire et tester, pas comme une promesse de parité. │ # └───────────────────────────────────────────────────────────────────────────┘ # # Nom de fichier = app-id : Flathub exige que le manifeste, l'id AppStream, le # fichier .desktop et l'icône portent exactement le même nom. Il porte ici # « io.github._0emirhan.GnomeGallery », ce qui suppose la propriété du domaine # emirhan.dev. Sinon, tout doit être renommé en io.github.emirhan.ThemeGallery # — décision du propriétaire, voir le compte rendu de packaging. # # Construction : # flatpak install flathub org.gnome.Platform//50 org.gnome.Sdk//50 # flatpak-builder --user --install --force-clean build-fp \ # flatpak/io.github._0emirhan.GnomeGallery.yaml # flatpak run io.github._0emirhan.GnomeGallery id: io.github._0emirhan.GnomeGallery runtime: org.gnome.Platform # 50 est la branche stable actuelle du runtime GNOME. Elle fournit python3 et # PyGObject : aucun module Python à empaqueter. runtime-version: '50' sdk: org.gnome.Sdk command: theme-gallery finish-args: # --- Affichage --------------------------------------------------------- - --share=ipc - --socket=wayland - --socket=fallback-x11 - --device=dri # --- Réseau ------------------------------------------------------------ # Onglet Télécharger : api.opendesktop.org (gnome-look), captures d'écran, # archives du catalogue curé (github.com). - --share=network # --- Thèmes de l'utilisateur ------------------------------------------- # Lecture pour l'aperçu, écriture pour l'installation et la suppression. # « :create » car ces dossiers n'existent pas toujours. - --filesystem=~/.themes:create - --filesystem=~/.icons:create - --filesystem=xdg-data/themes:create - --filesystem=xdg-data/icons:create # --- Configuration GTK de l'hôte --------------------------------------- # « Appliquer à libadwaita » pose gtk.css entre marqueurs dans ces dossiers, # et l'accent personnalisé y écrit aussi. Sans ces droits, ces deux # fonctions échouent silencieusement. # Un relecteur Flathub demandera une justification : c'est une écriture # dans la configuration hôte d'autres applications. Elle est réversible # depuis l'application (« Tout rétablir »). - --filesystem=xdg-config/gtk-3.0:create - --filesystem=xdg-config/gtk-4.0:create # --- dconf / GSettings de l'hôte --------------------------------------- # Nécessaire pour écrire org.gnome.desktop.interface (thème GTK, icônes, # curseur, accent) dans la base dconf de l'hôte et non dans une copie # confinée. Trio standard recommandé par Flatpak. - --filesystem=xdg-run/dconf - --filesystem=~/.config/dconf:ro - --talk-name=ca.desrt.dconf - --env=DCONF_USER_CONFIG_DIR=.config/dconf # --- État propre à l'application --------------------------------------- # accent.json et gtk4.json (mémoire de ce qui a été posé, pour le retrait) # vont dans ~/.local/share/theme-gallery. Le code utilise Path.home(), donc # sous Flatpak ils atterrissent dans ~/.var/app//... : correct, mais un # état écrit hors bac à sable (installation native) ne sera pas relu ici. # ┌── LIMITES CONNUES ────────────────────────────────────────────────────────┐ # │ │ # │ 1. ONGLET PAQUETS : NE FONCTIONNE PAS. packages.py appelle « pacman -Qq / │ # │ -Si » et « pkexec pacman -S / -Rns ». Ni pacman ni pkexec n'existent │ # │ dans le bac à sable, et rien ne permet d'y accéder proprement : │ # │ --talk-name=org.freedesktop.Flatpak (spawn sur l'hôte) est refusé par │ # │ Flathub pour une application non-développeur, et pkexec au travers du │ # │ portail n'existe pas. L'onglet se dégradera en « pkexec est absent : │ # │ installez polkit » et la liste des paquets sera vide (packages.py │ # │ intercepte OSError). Fonctionnellement : onglet mort. │ # │ │ # │ 2. THÈME DU SHELL : NE FONCTIONNE PAS EN L'ÉTAT. settings.py lit et écrit │ # │ la clé de l'extension User Themes avec la commande « dconf », et │ # │ interroge « gnome-extensions ». Aucun des deux binaires n'est dans le │ # │ runtime (gnome-extensions appartient à gnome-shell, jamais présent │ # │ dans un bac à sable). Résultat : extension toujours vue « absente », │ # │ thème du Shell jamais appliqué — sans message d'erreur, les appels │ # │ étant enveloppés dans des suppress(OSError). │ # │ Correctifs possibles, hors périmètre packaging : │ # │ • empaqueter dconf (module meson) pour retrouver la commande, la │ # │ base dconf de l'hôte étant déjà accessible ci-dessus ; │ # │ • remplacer les appels à « gnome-extensions » par l'interface D-Bus │ # │ org.gnome.Shell.Extensions (+ --talk-name correspondant). │ # │ │ # │ 3. THÈMES SYSTÈME : INVISIBLES. scan.py balaie /usr/share/themes et │ # │ /usr/share/icons ; dans le bac à sable, /usr est celui du runtime. │ # │ Flatpak ne peut pas monter les dossiers de l'hôte par-dessus. Tout ce │ # │ qu'a installé le gestionnaire de paquets de la distribution │ # │ (Adwaita-dark, Papirus, Bibata système…) n'apparaîtra donc pas ; seuls │ # │ les thèmes de ~/.themes, ~/.icons et ~/.local/share/… seront listés. │ # │ C'est la limite la plus visible pour l'utilisateur, et elle est │ # │ structurelle. │ # │ │ # │ 4. APERÇU : le rendu des thèmes GTK utilise le GTK du runtime, pas celui │ # │ de l'hôte. Un thème conçu pour une autre version de GTK/libadwaita │ # │ s'affichera avec de légers écarts par rapport au résultat final. │ # │ │ # │ Ce qui fonctionne : aperçu et application des thèmes GTK/icônes/curseurs │ # │ installés dans le dossier personnel, couleur d'accent, téléchargement et │ # │ installation depuis gnome-look et le catalogue curé, feuille libadwaita, │ # │ « Tout rétablir ». │ # └──────────────────────────────────────────────────────────────────────────┘ cleanup: - /include - /lib/pkgconfig - /share/pkgconfig - /man - /share/man - '*.a' - '*.la' modules: - name: theme-gallery buildsystem: meson config-opts: # Les suites de tests ne sont pas exécutées par flatpak-builder ici ; # les enregistrer ne coûte rien mais exige desktop-file-validate et # appstreamcli, présents dans le SDK et absents du Platform. - -Dtests=false # Pré-compilation des .pyc : /app n'est pas inscriptible à l'exécution. - -Dpycompile=true sources: # Forme de publication. Le tag v2.0.0 n'existe pas encore : le pousser, # puis renseigner « commit » avec son SHA (Flathub refuse un tag seul, # un tag pouvant être déplacé). - type: git url: https://github.com/0emirhan/Gnome-Gallery.git tag: v2.0.0 # commit: à renseigner à la publication # Pour construire l'arborescence de travail, commenter la source git # ci-dessus et décommenter celle-ci : # - type: dir # path: ..