# OmaAmp — 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 (skins and themes included, since they ship in # the repository) 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.OmaAmp runtime: org.kde.Platform runtime-version: '6.11' sdk: org.kde.Sdk base: com.riverbankcomputing.PyQt.BaseApp base-version: '6.11' command: omaamp 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 — OmaAmp draws its own widgets and # spectrum display, 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 and scipy'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 # Playback: miniaudio and sounddevice both reach the sound server through # PulseAudio in the sandbox. - --socket=pulseaudio # It is a music player: the library lives in the user's music folder. - --filesystem=xdg-music # Internet radio and YouTube radio streams are fetched at runtime. The only # endpoint beyond the radio station the user picks is YouTube, by way of # yt-dlp. There is no telemetry and no account. - --share=network - --env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons modules: # Generated by flatpak-pip-generator for PyQt6, pygame, mutagen, numpy, # miniaudio, soundfile, scipy, sounddevice and yt-dlp. - 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: # PortAudio publishes its release tarball itself (with a generated # configure). The GitHub archive URL for the same tag answered HTTP 504 # on two consecutive judge runs (2026-09-18 12:47Z and 12:56Z, # "Failed to download sources: module portaudio"), which fails the build # gate and costs the app its packaging score; files.portaudio.com is the # upstream release artefact and does not go through GitHub's codeload. - type: archive url: https://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz sha256: 47efbf42c77c19a05d22e627d42873e991ec0c1357219c0d74ce6a2948cb2def # Still watches the upstream tags: the tarball is the release for # v19.7.0, so a new tag means a new release artefact to fetch by hand. x-checker-data: type: git url: https://github.com/PortAudio/portaudio.git tag-pattern: ^v([\d.]+)$ is-main-source: true - name: omaamp buildsystem: simple build-commands: - mkdir -p ${FLATPAK_DEST}/omaamp # Run from the source tree the way `python3 main.py` does upstream: # main.py resolves its own directory, and core/, ui/ and omaamp/ are # imported relative to it. The bundled skins and themes come along # because the app loads them from its own directory. - cp -r core ui omaamp skins themes main.py README.md ${FLATPAK_DEST}/omaamp/ - install -Dm755 omaamp.sh ${FLATPAK_DEST}/bin/omaamp - install -Dm644 io.github.alexwest1981.OmaAmp.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop # Same 8-bit artwork in three sizes: the store master (512) plus the two # desktop sizes. The icon this replaces was a single 128x128 image at 16 # bits per channel, which the catalog's image chain did not render. - install -Dm644 io.github.alexwest1981.OmaAmp-512.png ${FLATPAK_DEST}/share/icons/hicolor/512x512/apps/${FLATPAK_ID}.png - install -Dm644 io.github.alexwest1981.OmaAmp.png ${FLATPAK_DEST}/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png - install -Dm644 io.github.alexwest1981.OmaAmp-128.png ${FLATPAK_DEST}/share/icons/hicolor/128x128/apps/${FLATPAK_ID}.png - install -Dm644 io.github.alexwest1981.OmaAmp.metainfo.xml ${FLATPAK_DEST}/share/metainfo/${FLATPAK_ID}.metainfo.xml sources: - type: git url: https://github.com/alexwest1981/OmaAmp commit: 9f6caf6b37806a4cd263d3ce4d61f3b9a4e1473c - type: file path: omaamp.sh - type: file path: io.github.alexwest1981.OmaAmp.desktop - type: file path: io.github.alexwest1981.OmaAmp-512.png - type: file path: io.github.alexwest1981.OmaAmp.png - type: file path: io.github.alexwest1981.OmaAmp-128.png - type: file path: io.github.alexwest1981.OmaAmp.metainfo.xml