# OmaScribe — built from source. The project publishes no release artifact and # no PyPI package, so the manifest packages the git tree: the application code # is installed verbatim under /app and its Python dependencies come from # python3-requirements.json, generated with flatpak-pip-generator against this # same SDK (org.kde.Sdk//6.11) so wheel selection matches the interpreter the # sandbox actually runs. # # Runtime: org.kde.Platform, not org.freedesktop.Platform — PyQt6 is not # packaged on flathub as a wheel, and the supported way to get it is the PyQt # BaseApp (com.riverbankcomputing.PyQt.BaseApp), which builds PyQt against the # KDE runtime's Qt 6.11 and its Python. flatpak-pip-generator refuses to # package PyQt6 for exactly this reason, so PyQt6 is the only application # dependency NOT listed in python3-requirements.json: it comes from the base. app-id: io.github.alexwest1981.OmaScribe runtime: org.kde.Platform runtime-version: '6.11' sdk: org.kde.Sdk base: com.riverbankcomputing.PyQt.BaseApp base-version: '6.11' command: omascribe separate-locales: false # The PyQt BaseApp is deliberately broad (PyQt + QtWebEngine + build tooling). # cleanup-BaseApp.sh strips what this app does not use, and the webengine # removal drops the browser stack entirely — OmaScribe renders documents, it # does not embed a browser. cleanup-commands: - /app/cleanup-BaseApp.sh # The application's Python dependencies arrive as upstream manylinux wheels, # which are prebuilt binaries (a bundled OpenBLAS inside numpy's, for one). # There is nothing to gain from running strip over them, and flatpak-builder # only calls eu-strip when it finds unstripped ELF files — which would make # this build depend on elfutils being installed on the builder. Same reasoning # org.libredb.Studio writes down for its AppImage payload. build-options: strip: false no-debuginfo: true env: - BASEAPP_REMOVE_WEBENGINE=1 finish-args: # PyQt6 window: Wayland natively, X11 as the fallback. - --share=ipc - --socket=wayland - --socket=fallback-x11 - --device=dri # Dictation records through sounddevice -> PortAudio -> PulseAudio, and the # document previews play audio clips. - --socket=pulseaudio # It is a word processor: documents, templates and exports live in the # user's documents folder. - --filesystem=xdg-documents - --filesystem=xdg-download # The AI review, research and Google Fonts features call the endpoint the # user configures (an OpenAI-compatible URL, including one on the host at # 127.0.0.1) plus fonts.google.com when the user asks for a font download. # Nothing is sent anywhere without the user asking, and there is no telemetry. - --share=network - --env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons modules: # Generated by flatpak-pip-generator for PyQt6, python-docx, markdown, # httpx, diff-match-patch, numpy, sounddevice and soundfile. - python3-requirements.json # sounddevice resolves libportaudio at import time, and the KDE runtime does # not ship it — without this module the app dies with "PortAudio library not # found" before a window appears. Built against the SDK's ALSA headers; the # sandbox reaches the host's server through ALSA's default device, which is # PulseAudio/PipeWire on a normal desktop. - name: portaudio buildsystem: autotools config-opts: - --disable-static sources: - type: archive # Upstream's own release tarball, not GitHub's archive URL: the same # URL answered HTTP 504 twice in a row for OmaAmp's identical module # (2026-09-18), and a failed download fails the build gate. url: https://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz sha256: 47efbf42c77c19a05d22e627d42873e991ec0c1357219c0d74ce6a2948cb2def x-checker-data: type: git url: https://github.com/PortAudio/portaudio.git tag-pattern: ^v([\d.]+)$ is-main-source: true - name: omascribe buildsystem: simple build-commands: - mkdir -p ${FLATPAK_DEST}/omascribe # The application is run from its source tree, exactly as `python3 # main.py` does upstream: main.py resolves its own directory, and the # core/ and ui/ packages are imported relative to it. # # resources/ is not copied: it is gitignored upstream and not in the # repository (it is where the packager keeps his own TTF/OTF files), and # FontManager.load_custom_fonts() checks os.path.exists() before reading # it. User fonts belong in ~/.config/omascribe/fonts, which inside the # sandbox is ~/.var/app/io.github.alexwest1981.OmaScribe/config/omascribe/fonts. - cp -r core ui locales main.py README.md ${FLATPAK_DEST}/omascribe/ - install -Dm755 omascribe.sh ${FLATPAK_DEST}/bin/omascribe - install -Dm644 io.github.alexwest1981.OmaScribe.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop - install -Dm644 io.github.alexwest1981.OmaScribe.png ${FLATPAK_DEST}/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png - install -Dm644 io.github.alexwest1981.OmaScribe.metainfo.xml ${FLATPAK_DEST}/share/metainfo/${FLATPAK_ID}.metainfo.xml sources: - type: git url: https://github.com/alexwest1981/OmaScribe commit: c71a4d6a06035179b342f573f99869be168f0e44 - type: file path: omascribe.sh - type: file path: io.github.alexwest1981.OmaScribe.desktop - type: file path: io.github.alexwest1981.OmaScribe.png - type: file path: io.github.alexwest1981.OmaScribe.metainfo.xml