feat/installer: make the universal install.sh ask about intent, not internals — and pick sane per-distro defaults #431
Closed
opened 2026-08-28 20:10:47 +00:00 by enricobuehler
·
0 comments
No Branch/Tag Specified
main
fix/ci-main-clippy-docs
worktree-security-review-2026-08-31-fixes
feat/installer-v2-client
feat/installer-v2-tui
feat/installer-v2-engine
worktree-omarchy-client-theme
release/v0.34.0
docs/stale-support-claims
fix/openapi-spec-drift
worktree-sc2-usb-macos
pr-425-gapfix
worktree-host-actions
worktree-omarchy-installer-gaps
worktree-docs-universal-installer
worktree-keep-host-audio-parity
worktree-standby-sink-investigation
worktree-security-review-fixes
worktree-abr-dscp-default
worktree-abr-control-loop
worktree-abr-transmission-plane
worktree-pyrowave-forces-auto
worktree-web-console-native-identity
worktree-abr-encode-downdriver
worktree-gamescope-exclusive-panel-off
worktree-bitrate-picker
worktree-fix-mic-tap-format-abort
worktree-release-0313-recut
ci-skia-download-retry
worktree-audio-devnode-orphans
worktree-gamescope-rebuild-keeps-hdr
worktree-gamescope-idled-handback
worktree-hevc-idr-storm-coalesce
worktree-gamestream-pad-heartbeat
worktree-steam-prelaunch-latch
worktree-release-0312-prep
worktree-firewall-program-scoped-rules
worktree-blackscreen-data-plane-source-ip
worktree-fix-frozen-local-ip
worktree-android-pad-mapping-regression
worktree-android-console-extra-keys
worktree-data-plane-firewall-and-delivery-truth
worktree-android-gamepad-ui-and-corner
worktree-android-pad-hid-remap
worktree-gamestream-xbox-hid-parity
worktree-release-next-prep
worktree-win-client-installer
worktree-kwin-vout-enable-repair
worktree-wp4-install-script
docs-wp2-to-main
worktree-docs-wp0-wp1-anti-drift
worktree-kwin-vout-failed-permanent
worktree-android-asc-hdr-dataspace
worktree-console-controllers-page
worktree-gamepad-probe-stack
worktree-agents-md-setup
worktree-android-skia-console
worktree-android-asc-presenter
worktree-win-teardown-abort
worktree-audio-hires-default-on
worktree-console-ui-aa
worktree-pr270-review-fixes
worktree-console-ui-overhaul
worktree-hires-audio-pcm
worktree-audio-stutter-fixes
worktree-ds-pad-sink-pro-audio
worktree-console-diagnostics
worktree-ds-inhibit-storm
worktree-security-review-2026-08-15-fixes
worktree-pairing-friendly-device-name
worktree-shield-select-back-quit
worktree-android-canary-open-testing
fix-host-cer-alias-null-key
worktree-azure-trusted-signing
worktree-audio-soft-limit-gain
worktree-gamescope-exclusive-dpms
fix/playnite-launcher-resolve
worktree-macos-mic-rebuild-loop
worktree-hyprland-cursor-mode-negotiation
worktree-hd2-idle-recording-default
worktree-steam-art-root-windows
worktree-android-aaudio-shield-silence
worktree-unpair-all-button
worktree-appletv-present-depth
worktree-av1-level-sentinel
worktree-nix-plugin-runner-resolve
worktree-release-0280
worktree-console-plugin-update-all
worktree-flatpak-skia-099-pin
worktree-debian-ubuntu-support
worktree-wowlan-support
worktree-decky-shortcut-dup
worktree-vk-level-gate-clamp
worktree-edition-2024
worktree-win-sleep-blockers
worktree-rt-gpu-priority-defaults
worktree-black-stream-fixes
worktree-edid-lock-toggle
worktree-gate-double-arm-fix
chore/rust-safety-programme
worktree-console-pinned-profile-library
worktree-blackscreen-fixes
build/web-silence-rollup-directive-warnings
worktree-android-console-visual-refresh
worktree-nixos-capped-compositor-exe-denied
worktree-release-0270
worktree-dm-helper-diagnosis
worktree-gamescope-pin-bump-nobara
worktree-notes-capsysnice-correction
worktree-bazzite-docs-warning
worktree-kwin-capability-identification
worktree-gamescope-rpm-deb-builddeps
worktree-pyrowave-wire-dead-code
worktree-release-0260
worktree-cursor-composite-hardening
worktree-library-settings-origin-split
worktree-native-decode-m0
worktree-july-rpm-and-cursor
worktree-presenter-cadence-wp1
worktree-decky-brand-name
worktree-win-amd-decoder-order
worktree-stall-ride-through
fix/pad-audio-wasapi-module-path
feat/android-pad-audio
worktree-adl-emul-probe
worktree-haptics-m12-dry
worktree-haptics-m9-richfb
worktree-haptics-m11-settings
worktree-apple-store-screenshots
worktree-decky-slim-rework
worktree-appstore-copy
worktree-haptics-m10-wire
worktree-haptics-m8-proto
worktree-haptics-m7-windows
worktree-haptics-m6-presenter
worktree-wire-mtu-resilience
worktree-haptics-m5-android
worktree-haptics-m4-apple
worktree-haptics-m3-rumble-engine
worktree-android-presenter-023-triage
worktree-vdisplay-resume-recovery
worktree-kwin-vout-demirror
fix/web-console-sweep
fix/windows-web-console-lifecycle
chore/windows-rerender-semantics
fix/pf-encode-phase8
fix/pf-encode-phase7
feat/cursor-channel
feat/desktop-mouse-mode
feat/plugin-kit
fix/network-split-standing-latency
fix/windows-msix-arm64-and-manifest
fix/encode-medium-tier
fix/encode-rfi-taint-and-oob
fix/encode-init-leak-and-twin-drift
fix/encode-teardown-uaf
feat/pyrowave-windows
fix/ubuntu-2404-host-deb
fix/ios-archive-provisioning
merge/first-frame-latency
feat/shared-clipboard-v2
feat/apple-live-activities-widgets
debug/touch-finger-logging
feat/shared-clipboard
midstream-resize
v0.34.0
v0.33.0
v0.32.0
v0.31.4
sdk-v0.1.6
v0.31.3
v0.31.2
v0.31.1
plugin-kit-v0.4.4
v0.31.0
sdk-v0.1.5
plugin-kit-v0.4.3
v0.30.0
plugin-kit-v0.4.2
v0.29.0
v0.28.1
v0.28.0
plugin-kit-v0.4.1
v0.27.0
v0.26.0
plugin-kit-v0.4.0
sdk-v0.1.4
plugin-kit-v0.3.3
sdk-v0.1.3
plugin-kit-v0.3.2
v0.25.0
plugin-kit-v0.3.1
plugin-kit-v0.3.0
v0.24.0
v0.23.0
v0.22.3
v0.22.2
v0.22.1
v0.22.0
v0.21.0
v0.20.1
v0.20.0
plugin-kit-v0.2.0
v0.19.2
v0.19.1
v0.19.0
v0.18.0
v0.17.2
v0.17.1
v0.17.0
v0.16.0
v0.15.0
v0.14.0
v0.13.0
v0.12.0
v0.11.0
v0.10.1
v0.10.0
v0.9.2
v0.9.1
v0.9.0
v0.8.4
v0.8.3
v0.8.2
v0.8.1
v0.8.0
v0.7.4
v0.7.3
v0.7.2
v0.7.1
v0.7.0
v0.6.0
v0.5.1
v0.5.0
v0.4.2
v0.4.1
v0.4.0
v0.3.1
v0.3.0
v0.2.1
v0.2.0
v0.1.1
v0.1.0
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: unom/punktfunk#431
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
scripts/install.sh— the guided universal host installer, still labelled PREVIEW — asks roughly theright number of questions, but the wrong kind. Every prompt names a mechanism the user has to
already understand, and every one defaults to
nno matter which distro was detected. So a user whoholds Enter, or anyone on the
curl … | shpath (no tty ⇒YES=1,scripts/install.sh:93), lands ona configuration that is wrong for whole classes of machine — including the two distros our own docs
target hardest.
What it asks today
scripts/install.sh:337scripts/install.sh:347scripts/install.sh:354scripts/install.sh:392scripts/install.sh:264scripts/install.sh:315$MGMT_PORT?" (on conflict)Two problems, and they compound.
1. The prompts name our internals, not the user's intent
"GameStream compat", "the punktfunk group", "usbip attach", "linger" are answers. A user who does
not already know the architecture cannot evaluate them, so they take the default. What we actually
want to know is what they intend to do:
don't need this.)" → sets
PUNKTFUNK_GAMESTREAMand thepunktfunk-gamestreamfirewall service.punktfunkgroup.Same code paths, same env vars, same prompt count. Only the wording changes — plus the default
behind it.
2.
nis the wrong default where it matters most, and our own docs say soThe
punktfunkgroup is the sharpest case. It is not an exotic opt-in:docs-site/content/docs/gamescope.md:57— "Join thepunktfunkgroup on any box you stream GameMode from." Unconditional. Without it the virtual Steam Deck pad arrives as a plain Xbox 360
controller.
docs-site/content/docs/bazzite.mdx:35listssudo usermod -aG punktfunk "$USER"as a normalstep 2, not an aside.
Meanwhile
scripts/install.sh:337defaults it to no and buries the reason behind a doc anchor. ABazzite or Nobara user — i.e. someone whose entire reason to run us is a couch/HTPC setup with a
Deck-shaped pad — takes the default, gets a degraded controller, and files the support question we
could have prevented. Under
--yesthey never see the prompt at all.Linger repeats the pattern:
docs-site/content/docs/bazzite.mdx:42says "Bazzite hosts are usuallyheadless, so enable the services and linger" — while
scripts/install.sh:392defaults linger tono.
Everything needed to fix this is already computed by the time we ask.
ID,ID_LIKEandFAMILYareknown at
scripts/install.sh:159-176;CONFLICTatscripts/install.sh:312:FAMILY=sysext/ujustpresent / Bazzite / Nobara → punktfunk group Y, linger YCONFLICT=1(Sunshine/Apollo/Vibeshine found) → the user demonstrably owns Moonlight-familyclients, so the GameStream question should default Y, not n
Scope
PUNKTFUNK_INSTALL_*env twin exactlyas-is — this is wording plus default selection, not a new options model, and scripted installs
must not break.
ID/FAMILY/CONFLICT, and say why when oneflips:
"Bazzite detected — joining the punktfunk group so the virtual Steam Deck pad works [Y/n]".A visible, overridable default beats a silent one.
sudo, so an interactiveuser sees what they agreed to and a
--yesrun is auditable in the log.contradicting each other. (
scripts/ci/check-docs-drift.shgate 6 pins only the install snippetsto
data/platforms.json; none of this touches those lines — the group/linger prose is ungated,which is how the drift got in.)
sh, no TUI, no new dependency.--yesstays the unattended path; it just picks betteranswers.
.gitea/workflows/installer-smoke.ymlwith a case per family asserting the derived defaults.--dry-runplus thePUNKTFUNK_INSTALL_OS_RELEASEoverride atscripts/install.sh:155alreadymake this cheap — that hook exists for exactly this.
Out of scope
Windows, NixOS, SteamOS and the clients keep their own paths — the script already stops and points at
them. Not proposing a menu, a TUI, or a config file.
Related: #296 (docs overhaul). Distinct from the Omarchy installer gaps, which are bugs in a
different installer.