ci / web (push) Successful in 1m9s
ci / docs-site (push) Successful in 1m14s
ci / rust-arm64 (push) Successful in 3m28s
deb / build-publish-client-arm64 (push) Successful in 2m28s
docker / builders (--build-arg FEDORA_VERSION=44, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm, -f44) (push) Successful in 10s
docker / builders (ci/android-ci.Dockerfile, punktfunk-android-ci) (push) Successful in 9s
docker / builders (ci/arch-ci.Dockerfile, punktfunk-arch-ci) (push) Successful in 11s
docker / builders (ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 8s
docker / builders (ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 9s
docker / builders (ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 12s
docker / apps (., web/Dockerfile, punktfunk-web) (push) Successful in 29s
android / android (push) Successful in 5m47s
docker / apps (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m16s
docker / builders-arm64cross (push) Successful in 9s
deb / build-publish (push) Successful in 6m5s
docker / deploy-docs (push) Successful in 35s
deb / build-publish-host (push) Successful in 6m35s
ci / rust (push) Successful in 6m38s
arch / build-publish (push) Successful in 9m13s
apple / swift (push) Failing after 13m37s
apple / screenshots (push) Skipped
windows-host / package (push) Successful in 17m4s
windows-host / winget-source (push) Skipped
windows-host / canary-manifest (push) Successful in 20s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 16m17s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Canceled after 39s
Field report (RX 5700 / SteamOS): 10-bit HEVC "unsupported" — but the GPU was
never the blocker (RADV probed Main10 fine on that box). The session stayed SDR
because stock gamescope offers no 10-bit PQ capture formats and nothing shipped
our pipewire-hdr build outside the Bazzite sysext, while PUNKTFUNK_GAMESCOPE_HDR
additionally defaulted off everywhere. Close all three gaps:
- PUNKTFUNK_GAMESCOPE_HDR now defaults ON (explicit-off grammar, the flip the
config comment planned post-canary). Safe by construction: the +pfhdr banner
probe, managed-spawn term, and client 10-bit cap keep stock-gamescope boxes on
the exact 8-bit path. The nix module's gamescopeHdr (default true now) only
controls whether the patched binary is on PATH; it no longer sets the env.
- SteamOS: new scripts/steamdeck/build-gamescope.sh builds the HDR gamescope in
the same pf2 trixie distrobox (apt dep list validated by a full build in a
debian:trixie container), installs ~/.local/bin/punktfunk-gamescope, and
maintains PUNKTFUNK_GAMESCOPE_BIN in host.env ONLY while the binary passes its
on-glass --version/+pfhdr check — a stale absolute override would break
session spawning, not just HDR. Wired into install.sh (§3b), update.sh
(retrofit), and rebuild-check.sh (ldd-probes it like the host binary).
- Arch: build-sysext.sh gains a --gamescope fold-in (banner-verified by
execution, host-image-only), and punktfunk-host optdepends the companion.
Deliberately NO CI-published host sysext: per the 2026-07-22 packaging
verdict a prebuilt SteamOS host breaks on A/B soname bumps (and /var is
per-partition-set), so arch.yml records that instead — SteamOS hosts use the
distrobox flow above.
Also fixes a latent bug that made build-sysext.sh fail every invocation as
documented: a literal `}` inside `${1:?usage …{host,client}…}` terminates the
expansion early and corrupts $PKG (caught by the new synthetic-package test,
which also covers the fold-in, the unmarked-gamescope refusal, and the
client-image guard).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
3.4 KiB
Bash
57 lines
3.4 KiB
Bash
# punktfunk host config for Bazzite (~/.config/punktfunk/host.env).
|
|
#
|
|
# The compositor + input backend are AUTO-DETECTED per connect from the ACTIVE session: the host
|
|
# follows the box as you flip between Steam Gaming Mode (gamescope — a managed session at the
|
|
# CLIENT's resolution) and a KDE/GNOME Desktop (KWin/Mutter virtual output at the client's mode).
|
|
# So nothing here forces a backend, and no session anchors are needed: a `systemctl --user`
|
|
# service inherits the correct XDG_RUNTIME_DIR and the host derives the bus from it. (Keys are
|
|
# CASE-SENSITIVE — use the exact uppercase names.)
|
|
|
|
PUNKTFUNK_VIDEO_SOURCE=virtual
|
|
|
|
# GPU zero-copy capture (dmabuf -> CUDA -> NVENC) is ON by default and auto-falls back to CPU if
|
|
# unavailable. No need to set it. Set to 0 only to force the CPU path.
|
|
# PUNKTFUNK_ZEROCOPY=0
|
|
|
|
#RUST_LOG=info
|
|
|
|
# --- Optional overrides (default is active-session auto-detection) ---
|
|
# Force a specific backend for testing (skips auto-detect + env retargeting):
|
|
# PUNKTFUNK_COMPOSITOR=kwin|mutter|wlroots|gamescope
|
|
# PUNKTFUNK_INPUT_BACKEND=libei|wlr|gamescope|uinput
|
|
#
|
|
# GAME MODE = ATTACH (the box owns its session; the host follows). The box decides whether it's in
|
|
# Steam Gaming Mode or a Desktop — you switch with the normal Steam UI / "Switch to Desktop". The
|
|
# host just ATTACHES to whatever's live and captures it; it never tears the session down. So
|
|
# switching Desktop<->Game is rock-solid, and when you disconnect the box STAYS in its current
|
|
# mode — reconnecting drops you right back where you were. On a resolution mismatch the host
|
|
# restarts the box's own game-mode session at the CLIENT's resolution (a foreign/bare gamescope
|
|
# instead streams at its own mode).
|
|
PUNKTFUNK_GAMESCOPE_ATTACH=1
|
|
#
|
|
# Opt OUT to the MANAGED model instead (host tears the box's gamescope down on connect and launches
|
|
# its OWN at the CLIENT's exact resolution; restores on a debounced idle). Client-mode-following, but
|
|
# it does not coexist with a box-owned game-mode session — pick one:
|
|
# PUNKTFUNK_GAMESCOPE_MANAGED=1 # (and remove PUNKTFUNK_GAMESCOPE_ATTACH above)
|
|
#
|
|
# Follow a Gaming<->Desktop switch MID-STREAM (rebuild the backend in place, no reconnect). This is
|
|
# ON BY DEFAULT on Bazzite/SteamOS (the host detects the platform); set =0 to disable it:
|
|
# PUNKTFUNK_SESSION_WATCH=0
|
|
#
|
|
# HDR (10-bit BT.2020 PQ) on the gamescope path. Needs `punktfunk-gamescope` — gamescope plus the
|
|
# patch that teaches its capture node the 10-bit formats — which the sysext ships alongside the
|
|
# host; it does NOT replace the system gamescope. ON by default when that binary is present; a
|
|
# host without it stays SDR either way. `punktfunk-host hdr-probe` says what it found. To force
|
|
# SDR on the gamescope backend:
|
|
# PUNKTFUNK_GAMESCOPE_HDR=0
|
|
#
|
|
# On an HDR session, how bright SDR content (desktop, Steam overlay, SDR games) is inside the PQ
|
|
# container. gamescope's default is 400 nits; raise it if whites look dim on your TV.
|
|
# PUNKTFUNK_GAMESCOPE_SDR_NITS=400
|
|
#
|
|
# HEADLESS GAME MODE: on a box with no display attached, Bazzite's "Switch to Game Mode" normally
|
|
# crashes (gamescope's DRM backend has no panel to drive). The host package ships
|
|
# /etc/gamescope-session-plus/sessions.d/steam, which auto-falls-back to gamescope's HEADLESS backend
|
|
# when no display is connected — so game mode boots offscreen and streams, with no config here. It's a
|
|
# no-op on display-attached boxes. (The host then auto-detects Gaming and streams it.)
|