--- app-id: org.alternativeinterface.dasher runtime: org.gnome.Platform runtime-version: '50' sdk: org.gnome.Sdk sdk-extensions: - org.freedesktop.Sdk.Extension.rust-stable command: dasher finish-args: - --socket=fallback-x11 - --socket=wayland # GtkApplication registers its app-id on the session bus at startup; without # this the app aborts with "Failed to register: ... ServiceUnknown". - --socket=session-bus - --share=ipc - --device=all - --talk-name=org.a11y.Bus - --talk-name=org.a11y.* - --filesystem=home cleanup: - /include - /lib/pkgconfig - /share/pkgconfig - /share/aclocal - /share/man - /share/gtk-doc - /share/doc - '*.la' - '*.a' modules: # ─── C++ binding chain for gtkmm ────────────────────────────────────── # The GNOME runtime ships GTK/glib/pango (C) but not their C++ bindings, so # the mm stack is built from source. These versions MUST track the runtime: # runtime-version 50 ships GTK 4.22 / glib 2.88 / pango 1.56, hence gtkmm # 4.22 / glibmm 2.88 / pangomm 2.56. Bumping runtime-version means bumping # these too — an older gtkmm won't compile against a newer GTK. - name: mm-common buildsystem: meson cleanup: - '*' sources: - type: archive url: https://download.gnome.org/sources/mm-common/1.0/mm-common-1.0.7.tar.xz sha256: 494abfce781418259b1e9d8888c73af4de4b6f3be36cc75d9baa8baa0f2a7a39 - name: libsigc++ buildsystem: meson config-opts: - -Dbuild-examples=false - -Dbuild-tests=false cleanup: - /lib/sigc++-3.0 sources: - type: archive url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17 - name: glibmm buildsystem: meson config-opts: - --wrap-mode=nodownload sources: - type: archive url: https://download.gnome.org/sources/glibmm/2.88/glibmm-2.88.1.tar.xz sha256: c139f962b1575c8827cd39d1ac21b7a367be3bda1409c0c7e21a29090f371506 - type: archive url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17 dest: subprojects/libsigcplusplus - name: cairomm buildsystem: meson config-opts: - --wrap-mode=nodownload sources: - type: archive url: https://www.cairographics.org/releases/cairomm-1.18.0.tar.xz # cairographics.org went dark for days in Aug 2026 (connection # timeouts, repo-wide) — flatpak-builder falls back to mirror-urls # when the primary host fails. The pkgsrc CDN copy is byte-identical # (sha256 above). GNOME's mirror only carries cairomm <= 1.15. mirror-urls: - https://cdn.netbsd.org/pub/pkgsrc/distfiles/cairomm-1.18.0.tar.xz sha256: b81255394e3ea8e8aa887276d22afa8985fc8daef60692eb2407d23049f03cfb - type: archive url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17 dest: subprojects/libsigcplusplus - name: pangomm buildsystem: meson config-opts: - --wrap-mode=nodownload sources: - type: archive url: https://download.gnome.org/sources/pangomm/2.56/pangomm-2.56.2.tar.xz sha256: f1e984c85a85b6a0e61616366521f51dd8282a072bb45d15b5084762b62f4c0e - type: archive url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17 dest: subprojects/libsigcplusplus - type: archive url: https://www.cairographics.org/releases/cairomm-1.18.0.tar.xz # cairographics.org went dark for days in Aug 2026 (connection # timeouts, repo-wide) — flatpak-builder falls back to mirror-urls # when the primary host fails. The pkgsrc CDN copy is byte-identical # (sha256 above). GNOME's mirror only carries cairomm <= 1.15. mirror-urls: - https://cdn.netbsd.org/pub/pkgsrc/distfiles/cairomm-1.18.0.tar.xz sha256: b81255394e3ea8e8aa887276d22afa8985fc8daef60692eb2407d23049f03cfb dest: subprojects/cairomm - type: archive url: https://download.gnome.org/sources/glibmm/2.88/glibmm-2.88.1.tar.xz sha256: c139f962b1575c8827cd39d1ac21b7a367be3bda1409c0c7e21a29090f371506 dest: subprojects/glibmm - name: gtkmm buildsystem: meson config-opts: - --wrap-mode=nodownload sources: - type: archive url: https://download.gnome.org/sources/gtkmm/4.22/gtkmm-4.22.0.tar.xz sha256: 2e8a21b4b0725f620e33aaee0cd343ed121b533275b632896619b1c89e96de67 - type: archive url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17 dest: subprojects/libsigcplusplus - type: archive url: https://www.cairographics.org/releases/cairomm-1.18.0.tar.xz # cairographics.org went dark for days in Aug 2026 (connection # timeouts, repo-wide) — flatpak-builder falls back to mirror-urls # when the primary host fails. The pkgsrc CDN copy is byte-identical # (sha256 above). GNOME's mirror only carries cairomm <= 1.15. mirror-urls: - https://cdn.netbsd.org/pub/pkgsrc/distfiles/cairomm-1.18.0.tar.xz sha256: b81255394e3ea8e8aa887276d22afa8985fc8daef60692eb2407d23049f03cfb dest: subprojects/cairomm - type: archive url: https://download.gnome.org/sources/glibmm/2.88/glibmm-2.88.1.tar.xz sha256: c139f962b1575c8827cd39d1ac21b7a367be3bda1409c0c7e21a29090f371506 dest: subprojects/glibmm - type: archive url: https://download.gnome.org/sources/pangomm/2.56/pangomm-2.56.2.tar.xz sha256: f1e984c85a85b6a0e61616366521f51dd8282a072bb45d15b5084762b62f4c0e dest: subprojects/pangomm # ─── Dasher-GTK (builds DasherCore + SDL3 + TTS + app together) ─────── # Note: Flatpak uses cloud-only TTS (no speech-dispatcher) to avoid # building dotconf/libspeechd in the sandbox. AppImage has full system TTS. - name: dasher buildsystem: simple build-options: append-path: /usr/lib/sdk/rust-stable/bin build-args: - --share=network env: CARGO_HOME: /run/build/dasher/cargo # FLATPAK_ARCH is x86_64 / aarch64 depending on the leg. The C++ mm # bindings install their .pc files under the multiarch triplet dir, # so PKG_CONFIG_PATH has to follow the build arch. PKG_CONFIG_PATH: /app/lib64/pkgconfig:/app/lib/pkgconfig:/app/lib/${FLATPAK_ARCH}-linux-gnu/pkgconfig:/app/share/pkgconfig build-commands: - cmake -B _build -DCMAKE_BUILD_TYPE=Release -DTTS_WRAPPER_FEATURES=cloud -DBUILD_GTK_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/app . - cmake --build _build -j$(nproc) - cmake --install _build post-install: - install -Dm644 packaging/org.alternativeinterface.dasher.desktop /app/share/applications/org.alternativeinterface.dasher.desktop - install -Dm644 packaging/org.alternativeinterface.dasher.metainfo.xml /app/share/metainfo/org.alternativeinterface.dasher.metainfo.xml - install -Dm644 Resources/icon.png /app/share/icons/hicolor/48x48/apps/org.alternativeinterface.dasher.png - install -Dm644 DasherCore/Data/dasher.svg /app/share/icons/hicolor/scalable/apps/org.alternativeinterface.dasher.svg # The app installs as a portable dir at /app (binary + libdasher.so), and # the gtkmm C++ stack builds into /app/lib64 (flatpak only searches # /app/lib). Flatpak's `command: dasher` resolves via /app/bin, so add a # launcher there that puts both dirs on the library path (covers the # transitive mm deps, which an rpath alone would not) and execs the binary. - | install -d /app/bin printf '%s\n' '#!/bin/sh' 'export LD_LIBRARY_PATH="/app:/app/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"' 'exec /app/dasher "$@"' > /app/bin/dasher chmod +x /app/bin/dasher sources: # Build the checked-out working tree (the PR's own code), NOT a re-clone # of a hardcoded branch. Re-cloning meant fork PRs built upstream's C++ # and frontend changes here were never actually tested by the Flatpak job. # Path is relative to this manifest (packaging/flatpak/ -> repo root). - type: dir path: ../.. # Remove the (empty) submodule dirs and git metadata so the separate git # sources below can clone DasherCore / SDL / rust-tts-wrapper cleanly. - type: shell commands: - rm -rf DasherCore Thirdparty rust-tts-wrapper .gitmodules .git - type: git url: https://github.com/dasher-project/DasherCore.git branch: main dest: DasherCore - type: git url: https://github.com/libsdl-org/SDL.git tag: release-3.2.16 dest: Thirdparty/SDL # Pinned to the commit Dasher-GTK's TtsService.cpp is written against: # AACTools/main's tree + the from_mins->from_secs fix (stable-Rust safe). # AACTools/main itself still uses unstable Duration::from_mins and won't # build on the GNOME SDK's stable rustc. - type: git url: https://github.com/owenpkent/rust-tts-wrapper.git branch: pin/dasher-gtk-linux-publish dest: rust-tts-wrapper