* feat(flatpak): add Flatpak packaging for universal distribution Adds a Flathub-ready Flatpak for the whisper.cpp engine, plus the minimal runtime adaptations Flatpak actually needs — deliberately scoped down from the earlier attempts (#416, #428), which bundled unrelated whisper.cpp GPU, audio, and clipboard changes. Packaging (packaging/flatpak/): - app manifest, AppStream metainfo, and desktop entry (com.vocalinux.Vocalinux) - generated offline Python dependency modules (flatpak-pip-generator) - bundled shared modules: PortAudio, libayatana-appindicator, xdotool, xsel Runtime changes (Flatpak-only, behaviour unchanged outside a sandbox): - utils/paths.py: honour XDG_CONFIG_HOME/XDG_DATA_HOME so config, models and runtime data live under ~/.var/app/<app-id> in the sandbox - autostart uses `flatpak run <app-id>` (the host launcher is always on PATH) - text injection and keyboard backend detect a Wayland host reached via XWayland (no Wayland socket granted) and route through xdotool / pynput-on-X11 - tray indicator references the exported `<app-id>-*` host icon theme names Also: a CI workflow building x86_64 + aarch64 bundles, and README / packaging README / distro-compatibility doc updates. Verified with a full flatpak-builder build + bundle install on aarch64: pywhispercpp loads its native libraries without LD_LIBRARY_PATH, XDG paths redirect correctly, bundled tools are present, and the entrypoint runs. Manifest and builddir lint are clean and AppStream metadata validates. Closes #167 * chore(flatpak): sync metainfo version to 0.14.0-beta Also ignore flatpak-build-dir/ so local builder output stays untracked. * refactor(flatpak): trim docs and comments after ponytail review Drop redundant packaging README command blocks, shrink path/tray/autostart comments, and stop ignoring a non-canonical build-dir name. * fix(flatpak): close readiness gaps for v0.14.0-beta Route log files through XDG data dirs so Flatpak keeps them under ~/.var/app, refresh AppStream screenshots to vocalinux.com, and use the SPDX GPL-3.0-only license id. * fix(flatpak): enable global hotkeys via evdev and --device=input pynput over XWayland only receives keys for the focused X client. Prefer evdev inside Flatpak and grant /dev/input so shortcuts work app-wide. * fix(flatpak): inject text with ydotool/uinput on Wayland xdotool only reaches XWayland clients, so typing appeared to succeed but never hit native apps. Ship ydotool, grant --device=all for uinput, start ydotoold on demand, and type via uinput inside the Flatpak. * fix(flatpak): paste via wl-copy + Ctrl+V instead of typing ydotool type injects character-by-character. Ship wl-clipboard, grant --socket=wayland, and prefer clipboard paste for instant insertion. * test(text-injection): expect ydotool default key-delay of 2 Matches the shipped VOCALINUX_YDOTOOL_KEY_DELAY default used when clipboard paste falls back to character typing.
181 lines
9.8 KiB
YAML
181 lines
9.8 KiB
YAML
# Generated with flatpak-pip-generator --runtime org.gnome.Sdk//50 --yaml --ignore-pkg vosk>=0.3.45 PyGObject; sys_platform == 'linux' --output /tmp/vocalinux-flatpak-gen3/python3-dependencies pywhispercpp pydub pynput evdev requests tqdm numpy pyaudio python-xlib psutil lxml meson-python pyproject-metadata
|
|
name: python3-dependencies
|
|
buildsystem: simple
|
|
build-commands: []
|
|
modules:
|
|
- name: python3-pywhispercpp
|
|
buildsystem: simple
|
|
build-commands:
|
|
# The PyPI sdist derives its version from git metadata, which is absent in
|
|
# the offline Flatpak build, so inject the version explicitly. --no-same-owner
|
|
# stops GNU tar from trying to restore the archive's uid inside the build
|
|
# sandbox (where chown to an arbitrary uid is not permitted).
|
|
- tar --no-same-owner -xzf pywhispercpp-1.4.1.tar.gz
|
|
- python3 -c "from pathlib import Path; p = Path('pywhispercpp-1.4.1/setup.py'); s = p.read_text(); p.write_text(s.replace('setup(\\n name=\"pywhispercpp\",', 'setup(\\n name=\"pywhispercpp\",\\n version=\"1.4.1\",'))"
|
|
- tar --owner=0 --group=0 -czf pywhispercpp-1.4.1.tar.gz pywhispercpp-1.4.1
|
|
- PYWHISPERCPP_VERSION=1.4.1 NO_REPAIR=1 GGML_VULKAN=1 pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "pywhispercpp" --no-build-isolation
|
|
# whisper.cpp installs its shared libraries next to the extension module.
|
|
# Symlink them onto the default loader path so the extension resolves them
|
|
# without a runtime LD_LIBRARY_PATH, regardless of the SDK's Python minor
|
|
# version or the exact whisper.cpp soname.
|
|
- |
|
|
set -eu
|
|
sitedir="$(find "${FLATPAK_DEST}/lib" -maxdepth 2 -type d -name site-packages | head -n1)"
|
|
echo "Linking whisper.cpp libraries from: ${sitedir}"
|
|
find "${sitedir}" -maxdepth 2 \( -name 'libggml*.so*' -o -name 'libwhisper*.so*' \) \
|
|
-exec ln -sf {} "${FLATPAK_DEST}/lib/" \;
|
|
ls -l "${FLATPAK_DEST}/lib/" | grep -E 'libggml|libwhisper' || true
|
|
sources:
|
|
- &id002
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl
|
|
sha256: 3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a
|
|
- &id003
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl
|
|
sha256: 3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d
|
|
- &id004
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl
|
|
sha256: 892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3
|
|
- &id008
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz
|
|
sha256: 2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl
|
|
sha256: e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/f6/7d/fe4b2b190d6cdcf0d5e4ca2b946d73bc449a586606a24d25ff50ffec5a5c/pywhispercpp-1.4.1.tar.gz
|
|
sha256: 520ce9275bb6fc81e0daa2e08144a80ee006b117a18058a77860c5b1c9c122f4
|
|
- &id005
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl
|
|
sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
|
|
- &id007
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl
|
|
sha256: ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf
|
|
- &id006
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
|
|
sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
|
- name: python3-pydub
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "pydub" --no-build-isolation
|
|
sources:
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl
|
|
sha256: 65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6
|
|
- name: python3-pynput
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "pynput" --no-build-isolation
|
|
sources:
|
|
- &id001
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/a5/f5/397b61091120a9ca5001041dd7bf76c385b3bfd67a0e5bcb74b852bd22a4/evdev-1.9.3.tar.gz
|
|
sha256: 2c140e01ac8437758fa23fe5c871397412461f42d421aa20241dc8fe8cfccbc9
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/59/4f/ac3fa906ae8a375a536b12794128c5efacade9eaa917a35dfd27ce0c7400/pynput-1.8.1-py2.py3-none-any.whl
|
|
sha256: 42dfcf27404459ca16ca889c8fb8ffe42a9fe54f722fd1a3e130728e59e768d2
|
|
- &id009
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/fc/b8/ff33610932e0ee81ae7f1269c890f697d56ff74b9f5b2ee5d9b7fa2c5355/python_xlib-0.33-py2.py3-none-any.whl
|
|
sha256: c3534038d42e0df2f1392a1b30a15a4ff5fdc2b86cfa94f072bf11b10a164398
|
|
- &id010
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl
|
|
sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274
|
|
- name: python3-evdev
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "evdev" --no-build-isolation
|
|
sources:
|
|
- *id001
|
|
- name: python3-requests
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "requests" --no-build-isolation
|
|
sources:
|
|
- *id002
|
|
- *id003
|
|
- *id004
|
|
- *id005
|
|
- *id006
|
|
- name: python3-tqdm
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "tqdm" --no-build-isolation
|
|
sources:
|
|
- *id007
|
|
- name: python3-numpy
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "numpy" --no-build-isolation
|
|
sources:
|
|
- *id008
|
|
- name: python3-pyaudio
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "pyaudio" --no-build-isolation
|
|
sources:
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/26/1d/8878c7752febb0f6716a7e1a52cb92ac98871c5aa522cba181878091607c/PyAudio-0.2.14.tar.gz
|
|
sha256: 78dfff3879b4994d1f4fc6485646a57755c6ee3c19647a491f790a0895bd2f87
|
|
- name: python3-python-xlib
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "python-xlib" --no-build-isolation
|
|
sources:
|
|
- *id009
|
|
- *id010
|
|
- name: python3-psutil
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "psutil" --no-build-isolation
|
|
sources:
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz
|
|
sha256: 0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372
|
|
- name: python3-lxml
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "lxml" --no-build-isolation
|
|
sources:
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/28/30/9abc9e34c657c33834eaf6cd02124c61bdf5944d802aa48e69be8da3585d/lxml-6.1.0.tar.gz
|
|
sha256: bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13
|
|
- name: python3-meson-python
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "meson-python" --no-build-isolation
|
|
sources:
|
|
- type: file
|
|
url: https://files.pythonhosted.org/packages/16/7f/d1b0c65b267a1463d752b324f11d3470e30889daefc4b9ec83029bfa30b5/meson_python-0.19.0-py3-none-any.whl
|
|
sha256: 67b5906c37404396d23c195e12c8825506074460d4a2e7083266b845d14f0298
|
|
- &id011
|
|
type: file
|
|
url: https://files.pythonhosted.org/packages/1d/0b/da4851b1e2d9c40c9bd74c0abd94510a7d797da9ccde0a90e8953751ed4a/pyproject_metadata-0.11.0-py3-none-any.whl
|
|
sha256: 85bbecca8694e2c00f63b492c96921d6c228454057c88e7c352b2077fcaa4096
|
|
- name: python3-pyproject-metadata
|
|
buildsystem: simple
|
|
build-commands:
|
|
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
|
|
--prefix=${FLATPAK_DEST} "pyproject-metadata" --no-build-isolation
|
|
sources:
|
|
- *id011
|