feat(packaging/arch): split package — add punktfunk-client for the Deck
ci / rust (push) Successful in 2m8s
ci / bench (push) Successful in 1m35s
ci / web (push) Successful in 26s
ci / docs-site (push) Successful in 31s
apple / swift (push) Successful in 1m16s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 6s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 5s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 4s
deb / build-publish (push) Successful in 2m18s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 4m50s
docker / deploy-docs (push) Successful in 17s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 4m24s
ci / rust (push) Successful in 2m8s
ci / bench (push) Successful in 1m35s
ci / web (push) Successful in 26s
ci / docs-site (push) Successful in 31s
apple / swift (push) Successful in 1m16s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 6s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 5s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 4s
deb / build-publish (push) Successful in 2m18s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 4m50s
docker / deploy-docs (push) Successful in 17s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 4m24s
The Decky plugin (b3f98a5) launches `punktfunk-client`, but the Arch package only
shipped the host, so the Deck had nothing to launch. Convert the PKGBUILD to a
split package (pkgbase=punktfunk → punktfunk-host + punktfunk-client), mirroring the
rpm subpackages and the two deb build scripts:
- punktfunk-host: unchanged artifact set + NVENC/compositor optdepends.
- punktfunk-client: the GTK4 binary + io.unom.Punktfunk.desktop + the hidraw udev
rule + the 32MB recv-buffer sysctl; depends gtk4/libadwaita/sdl3/ffmpeg/pipewire/
opus; optdepends libva-mesa-driver (VAAPI decode on the Deck's AMD APU, software
fallback otherwise). New punktfunk-client.install scriptlet.
- build-sysext.sh now derives the package name from the file, so it wraps either the
host OR the client into a systemd-sysext .raw — on a Deck you wrap the client.
- README: split-package usage + a "Steam Deck (the client)" section tying the sysext
to the Decky plugin (client is on PATH → plugin launches `punktfunk-client
--connect host:port`). Clarified the VAAPI gap is host-ENCODE only; the client
DECODES via VAAPI on the Deck today, so streaming to a Deck works now.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
# Wrap a built punktfunk-host pacman package into a systemd-sysext image — the update-survivable
|
||||
# way to add the host to an immutable Arch-derived distro (SteamOS 3): the .raw overlays /usr
|
||||
# read-only from the writable /var/lib/extensions/, so it persists across A/B OS updates with no
|
||||
# `steamos-readonly disable`. Needs `bsdtar`/`tar`, `squashfs-tools` (mksquashfs).
|
||||
# Wrap a built punktfunk pacman package into a systemd-sysext image — the update-survivable way to
|
||||
# add it to an immutable Arch-derived distro (SteamOS 3): the .raw overlays /usr read-only from the
|
||||
# writable /var/lib/extensions/, so it persists across A/B OS updates with no `steamos-readonly
|
||||
# disable`. Works for either split package — on a Steam Deck you'd wrap the CLIENT. Needs
|
||||
# `bsdtar`/`tar`, `squashfs-tools` (mksquashfs).
|
||||
#
|
||||
# Usage: bash build-sysext.sh <punktfunk-host-*.pkg.tar.zst>
|
||||
# Output: punktfunk-host.raw
|
||||
# Usage: bash build-sysext.sh <punktfunk-{host,client}-*.pkg.tar.zst>
|
||||
# Output: <pkgname>.raw (e.g. punktfunk-client.raw)
|
||||
set -euo pipefail
|
||||
|
||||
PKG="${1:?usage: build-sysext.sh <punktfunk-host-*.pkg.tar.zst>}"
|
||||
PKG="${1:?usage: build-sysext.sh <punktfunk-{host,client}-*.pkg.tar.zst>}"
|
||||
[ -f "$PKG" ] || { echo "no such package: $PKG" >&2; exit 1; }
|
||||
NAME=punktfunk-host
|
||||
# Derive the package name from the file (pkgname is everything before the -<version>).
|
||||
NAME="$(basename "$PKG" | sed -E 's/-[0-9].*//')"
|
||||
[ -n "$NAME" ] || { echo "could not derive package name from $PKG" >&2; exit 1; }
|
||||
|
||||
STAGE="$(mktemp -d)"
|
||||
trap 'rm -rf "$STAGE"' EXIT
|
||||
@@ -36,4 +39,8 @@ rm -f "$OUT"
|
||||
mksquashfs "$STAGE" "$OUT" -all-root -noappend -quiet
|
||||
echo "built $OUT"
|
||||
echo " install: sudo cp $OUT /var/lib/extensions/ && sudo systemctl enable --now systemd-sysext"
|
||||
echo " then: systemctl --user enable --now $NAME"
|
||||
if [ "$NAME" = "punktfunk-host" ]; then
|
||||
echo " then: systemctl --user enable --now punktfunk-host"
|
||||
else
|
||||
echo " then: run 'punktfunk-client' (or let the Decky plugin launch it)"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user