# Flathub manifest for per-device-eq. # # Local build and install: # flatpak-builder --user --install --force-clean build-flatpak \ # build-aux/flatpak/io.github.ntman.PerDeviceEQ.yaml # CI builds this manifest on every push and attaches an installable # bundle to the run (.github/workflows/flatpak.yml) -- the CI is the # referee for everything pinned below. # # The app source below is `dir` so CI and local builds test the # checked-out tree. For the Flathub submission, swap it for the # commented tagged-archive stanza at the bottom (x-checker-data keeps # the Flathub repo following `tools/bump_version.py` + # `gh release create vX.Y.Z`). # # GNOME runtime 50 rides freedesktop 25.08, which ships Python # 3.13 (fact from elements/include/python3.yml on the release # branch: v3.13.14) -- the wheels below are cp313, pinned from PyPI # with their published sha256 digests. If the runtime moves, # regenerate the python3-deps module (flatpak-pip-generator) and # re-verify the python version the same way. app-id: io.github.ntman.PerDeviceEQ runtime: org.gnome.Platform runtime-version: '50' sdk: org.gnome.Sdk command: per-device-eq finish-args: - --share=ipc - --socket=wayland - --socket=fallback-x11 - --device=dri # The PipeWire native socket: the app drives pw-dump, pw-cli, # pw-metadata and pw-cat against the HOST's PipeWire. - --filesystem=xdg-run/pipewire-0 # The WirePlumber hook. install_full writes the script and the # conf.d fragment per-user through these binds; both installed # files carry their provenance and the removal command in a # header. WirePlumber restart stays a one-line user action by # design -- no host-command permission. - --filesystem=~/.local/share/wireplumber:create - --filesystem=xdg-config/wireplumber:create # One profile store for every incarnation of the app: RPM, # flatpak and a bare checkout share ~/.config/per-device-eq # (field verdict: the Bitwig way). - --filesystem=xdg-config/per-device-eq:create modules: - name: pipewire-tools # The GNOME runtime carries libpipewire but none of the CLI # tools the app shells out to; build only the tools from the # matching upstream source, everything optional disabled. buildsystem: meson config-opts: - -Dsession-managers=[] - -Dalsa=disabled - -Dpipewire-alsa=disabled - -Djack=disabled - -Dpipewire-jack=disabled - -Dbluez5=disabled - -Dgstreamer=disabled - -Dgstreamer-device-provider=disabled - -Dsystemd-user-service=disabled - -Dselinux=disabled - -Dlibcamera=disabled - -Dx11=disabled - -Dvulkan=disabled - -Dtests=disabled - -Dexamples=disabled - -Dman=disabled - -Ddocs=disabled sources: - type: archive url: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.6.8/pipewire-1.6.8.tar.gz sha256: 8181172a1d95131f6af8bbc0b98f90b2a33349b042b84c3ce57dd5d11348cc58 - name: python3-deps # numpy + scipy + soundfile (and soundfile's cffi/pycparser), # pinned cp313 manylinux wheels for both Flathub arches. buildsystem: simple build-commands: - pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST} --no-build-isolation numpy scipy soundfile sources: - type: file only-arches: [x86_64] url: https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl sha256: 9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a - type: file only-arches: [aarch64] url: https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl sha256: 1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd - type: file only-arches: [x86_64] url: https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl sha256: a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f - type: file only-arches: [aarch64] url: https://files.pythonhosted.org/packages/ea/b2/e83ea34279a52c03374477c74006256ec78df65fc877baa4617d6de1d202/scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl sha256: 0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468 - type: file only-arches: [x86_64] url: https://files.pythonhosted.org/packages/7b/a2/70fd4432b924684c372df8b0a45708c36c057ef3596c9eb53e0a806b980b/soundfile-0.14.0-py2.py3-none-manylinux_2_28_x86_64.whl sha256: 1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d - type: file only-arches: [aarch64] url: https://files.pythonhosted.org/packages/4a/f8/fc39fad6f879633461d27394cd1ddaf1f769ffa0597dca35872f51b16461/soundfile-0.14.0-py2.py3-none-manylinux_2_28_aarch64.whl sha256: e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377 - type: file only-arches: [x86_64] url: https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl sha256: 799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224 - type: file only-arches: [aarch64] url: https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl sha256: ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f - type: file url: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 - type: file url: https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl sha256: 481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 - name: per-device-eq # Mirrors the RPM layout into /app: the launcher in bin, the # package + data + hook under share/per-device-eq, so # _DATA_ROOT resolves identically in every incarnation. buildsystem: simple build-commands: - install -Dpm0755 per-device-eq.py ${FLATPAK_DEST}/bin/per-device-eq - install -d ${FLATPAK_DEST}/share/per-device-eq/perdeviceeq - install -pm0644 -t ${FLATPAK_DEST}/share/per-device-eq/perdeviceeq perdeviceeq/*.py - install -Dpm0644 data/io.github.ntman.PerDeviceEQ.ui ${FLATPAK_DEST}/share/per-device-eq/data/io.github.ntman.PerDeviceEQ.ui - install -Dpm0644 data/io.github.ntman.PerDeviceEQ.Measure.ui ${FLATPAK_DEST}/share/per-device-eq/data/io.github.ntman.PerDeviceEQ.Measure.ui - install -Dpm0644 wireplumber/90-per-device-eq.lua ${FLATPAK_DEST}/share/per-device-eq/wireplumber/90-per-device-eq.lua - install -Dpm0644 data/io.github.ntman.PerDeviceEQ.desktop ${FLATPAK_DEST}/share/applications/io.github.ntman.PerDeviceEQ.desktop - install -Dpm0644 data/icons/hicolor/scalable/apps/io.github.ntman.PerDeviceEQ.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/io.github.ntman.PerDeviceEQ.svg - install -Dpm0644 data/icons/pde-level-symbolic.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/actions/pde-level-symbolic.svg - install -Dpm0644 data/icons/pde-floor-symbolic.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/actions/pde-floor-symbolic.svg - install -Dpm0644 data/icons/pde-find-gain-symbolic.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/actions/pde-find-gain-symbolic.svg - install -Dpm0644 data/icons/pde-map-rebuild-symbolic.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/actions/pde-map-rebuild-symbolic.svg - install -Dpm0644 data/io.github.ntman.PerDeviceEQ.metainfo.xml ${FLATPAK_DEST}/share/metainfo/io.github.ntman.PerDeviceEQ.metainfo.xml sources: - type: dir path: ../.. # Flathub submission source -- swap for the `dir` source: # - type: archive # url: https://github.com/NTMan/PerDeviceEQ/archive/refs/tags/v4.0.0.tar.gz # sha256: # x-checker-data: # type: anitya # project-id: TODO # or type: json against the GitHub # # releases API; wired when the submission PR is opened # url-template: https://github.com/NTMan/PerDeviceEQ/archive/refs/tags/v$version.tar.gz