app-id: tv.twitch4steamdeck.App runtime: org.freedesktop.Platform runtime-version: '24.08' sdk: org.freedesktop.Sdk # Stellt Chrome-Runtime-Bibliotheken (GTK, GLib, etc.) + zypak-wrapper bereit. # Das Electron-Binary selbst kommt aus node_modules/electron/dist/electron (npm install in WSL2). base: org.electronjs.Electron2.BaseApp base-version: '24.08' command: twitch4steamdeck finish-args: - --share=network # Twitch Helix-API + Streamlink (HLS) - --share=ipc # X11 shared memory (Wayland-Fallback) - --socket=wayland - --socket=fallback-x11 - --socket=pulseaudio # Audio für mpv - --device=dri # GPU-Zugriff für VAAPI-Hardware-Decoding - --talk-name=org.freedesktop.Notifications # Electron userData liegt automatisch in ~/.var/app/tv.twitch4steamdeck.App/config/ # Kein extra --filesystem nötig. # Build-Voraussetzung (WSL2, VOR flatpak-builder): # cd /mnt/c/Projekte/twitch4steamdeck # npm install # installiert Electron 33 für Linux + alle Deps # npx @electron/rebuild # rebuildet better-sqlite3 für Linux x64 # npm run build # kompiliert TS → out/ # Das Projektverzeichnis (inkl. out/ und node_modules/) wird als type:dir Source # in den Manifest-Build-Schritt kopiert. modules: # ───────────────────────────────────────────────────────────────────────────── # 1a) libass — Untertitel-Rendering (nicht im freedesktop SDK 24.08 enthalten) # ───────────────────────────────────────────────────────────────────────────── - name: libass config-opts: - --disable-static - --libdir=/app/lib sources: - type: archive url: https://github.com/libass/libass/releases/download/0.17.3/libass-0.17.3.tar.gz sha256: da7c348deb6fa6c24507afab2dee7545ba5dd5bbf90a137bfe9e738f7df68537 # ───────────────────────────────────────────────────────────────────────────── # 1b) libplacebo — Pflicht-Abhängigkeit für mpv 0.38+ (gpu-next renderer) # vulkan=disabled: kein Vulkan-Renderer, OpenGL/EGL+VAAPI reicht für uns. # shaderc + lcms2 kommen aus dem freedesktop SDK 24.08. # ───────────────────────────────────────────────────────────────────────────── - name: libplacebo buildsystem: meson config-opts: - -Dlibdir=lib - -Dvulkan=disabled - -Dglslang=disabled - -Dshaderc=enabled - -Dlcms=enabled - -Ddemos=false - -Dtests=false sources: - type: archive # Lokaler Tarball mit glad2-Submodul (GitHub-Tarball enthält Submodule nicht). # Erstellen: siehe flatpak/build-flatpak.sh oder README. # In WSL2: liegt unter ~/twitch4steamdeck/flatpak/libplacebo-6.338.2-full.tar.gz path: libplacebo-6.338.2-full.tar.gz sha256: 7f5da41b872302208f0e10c22d3e108ab9fdb1f253eb47c18651698c65d6b426 # ───────────────────────────────────────────────────────────────────────────── # 1c) mpv — Media-Player für Live-Streams und VODs # ffmpeg, libass, libplacebo, libva (VAAPI) verfügbar. # ───────────────────────────────────────────────────────────────────────────── - name: mpv buildsystem: meson config-opts: - -Dvaapi=enabled - -Dpulse=enabled - -Dalsa=disabled - -Dlua=disabled - -Djavascript=disabled - -Drubberband=disabled - -Dvapoursynth=disabled - -Dbuild-date=false sources: - type: archive url: https://github.com/mpv-player/mpv/archive/refs/tags/v0.38.0.tar.gz sha256: 86d9ef40b6058732f67b46d0bbda24a074fae860b3eaae05bab3145041303066 # ───────────────────────────────────────────────────────────────────────────── # 2) streamlink (Python) — liefert HLS-URLs aus Twitch-Streams # Python 3 kommt aus dem freedesktop SDK. # # Vorbereitung (einmalig, in WSL2 Ubuntu): # pip3 install flatpak-pip-generator # python3 flatpak-pip-generator streamlink --output flatpak/python-streamlink-deps # → erzeugt flatpak/python-streamlink-deps.json mit allen pinned Deps + sha256. # Dann dieses Modul hier durch die generierte Datei ersetzen: # - name: python3-streamlink-deps # buildsystem: simple # build-commands: [...] # generiert durch flatpak-pip-generator # sources: [...] # alle .whl/.tar.gz mit echten sha256 # # Vereinfachte Variante (erfordert Netzwerk-Build — nur für lokale Tests): # ───────────────────────────────────────────────────────────────────────────── - name: python3-streamlink buildsystem: simple build-commands: # --no-deps: Dependencies separat via flatpak-pip-generator auflösen - pip3 install --prefix=/app --no-build-isolation --no-deps . sources: - type: archive url: https://github.com/streamlink/streamlink/archive/refs/tags/6.11.0.tar.gz # sha256 generieren: sha256sum streamlink-6.11.0.tar.gz sha256: fbed984049b33f176e3a63e4bce302180d1ef24feffa24ea7306aad1a24bff40 # ACHTUNG: Vor dem echten Release-Build alle Python-Dependencies (requests, # websocket-client, pycountry, pycryptodome, ...) mit flatpak-pip-generator # als separate file-Sources einbinden. Sonst ist Streamlink zur Laufzeit unvollständig. # ───────────────────────────────────────────────────────────────────────────── # 3) Haupt-App # Voraussetzung: npm install + @electron/rebuild + npm run build wurden # AUSSERHALB (in WSL2) ausgeführt. Dieses Modul kopiert nur die Artefakte. # ───────────────────────────────────────────────────────────────────────────── - name: twitch4steamdeck buildsystem: simple build-commands: # App-Artefakte installieren - mkdir -p /app/lib/twitch4steamdeck - cp -r out /app/lib/twitch4steamdeck/out # node_modules wird für better-sqlite3 (native .node-Datei) zur Laufzeit benötigt. # Nur die notwendigen Teile kopieren, um die Paketgröße zu begrenzen. - mkdir -p /app/lib/twitch4steamdeck/node_modules - cp -r node_modules/better-sqlite3 /app/lib/twitch4steamdeck/node_modules/ - cp -r node_modules/bindings /app/lib/twitch4steamdeck/node_modules/ - cp -r node_modules/file-uri-to-path /app/lib/twitch4steamdeck/node_modules/ # Electron-Binary (Linux, via npm install in WSL2) - cp -r node_modules/electron /app/lib/twitch4steamdeck/node_modules/ # package.json für node require-Resolution - cp package.json /app/lib/twitch4steamdeck/ # Launcher-Skript - install -Dm755 flatpak/twitch4steamdeck.sh /app/bin/twitch4steamdeck # Icon (512×512 PNG, aus SVG konvertiert oder direkt abgelegt) - | if [ -f resources/icons/icon.png ]; then install -Dm644 resources/icons/icon.png \ /app/share/icons/hicolor/512x512/apps/tv.twitch4steamdeck.App.png elif [ -f resources/icons/icon.svg ]; then rsvg-convert -w 512 -h 512 resources/icons/icon.svg \ -o /tmp/icon.png install -Dm644 /tmp/icon.png \ /app/share/icons/hicolor/512x512/apps/tv.twitch4steamdeck.App.png fi # .desktop-Eintrag - install -Dm644 flatpak/tv.twitch4steamdeck.App.desktop \ /app/share/applications/tv.twitch4steamdeck.App.desktop # WSL/Windows-Checkouts können 0777 an viele Dateien vererben; OSTree lehnt das ab. - find /app -type d -exec chmod 755 {} + - find /app -type f -exec chmod 644 {} + - find /app/bin -type f -exec chmod 755 {} + - find /app/lib -type f -name '*.so*' -exec chmod 755 {} + - | if [ -d /app/libexec ]; then find /app/libexec -type f -exec chmod 755 {} + fi - | if [ -f /app/lib/twitch4steamdeck/node_modules/electron/dist/electron ]; then chmod 755 /app/lib/twitch4steamdeck/node_modules/electron/dist/electron fi - | if [ -f /app/lib/twitch4steamdeck/node_modules/electron/dist/chrome-sandbox ]; then chmod 755 /app/lib/twitch4steamdeck/node_modules/electron/dist/chrome-sandbox fi sources: # Gesamtes Projektverzeichnis (inkl. aus/ + node_modules/ aus WSL2-Prebuild) - type: dir path: ..