diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f28b5e..849beb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ one per merged pull request. ## 2.11.0 - 2026-10-01 -- `5da1833` **feat: "Start Steam silently" sub-option: under the SteamOS conversion (`silent`, on by default, as before) and under Gaming on NVIDIA (`nvsilent`, opt-in, not together with Big Picture); on a Steam Machine only when it boots into the desktop** +- `5da1833` **feat: "Start Steam silently" sub-option: under the SteamOS conversion (`silent`, on by default, as before) and under Gaming on NVIDIA (`nvsilent`, opt-in, not together with Big Picture); the SteamOS one is called "Start Steam silently in desktop mode" and is always shown, also on a Steam Machine** ## 2.10.0 - 2026-10-01 diff --git a/TECHNICAL.md b/TECHNICAL.md index c468b92..a77c966 100644 --- a/TECHNICAL.md +++ b/TECHNICAL.md @@ -109,7 +109,7 @@ tools write to the conf.d fragment into the base config. installs `/usr/local/bin/sync-steamos-session.sh` plus `sync-steamos-session.path`/`.service`; - `KWIN_IM_SHOW_ALWAYS=1` for the virtual keyboard; the sub-option `silent` - ("Start Steam silently", on by default) adds a `steam-desktop-autostart` + ("Start Steam silently in desktop mode", on by default, always shown) adds a `steam-desktop-autostart` systemd user service that starts Steam silently in Plasma only; - the **Return to Gaming Mode** shortcut; on plasma-login-manager with a narrow sudoers rule (`/etc/sudoers.d/gamescope-session-switch`) so it can diff --git a/lib/backend.sh b/lib/backend.sh index 975f9d7..fb97b49 100644 --- a/lib/backend.sh +++ b/lib/backend.sh @@ -50,7 +50,7 @@ backend_status() { items+="${items:+,}{\"id\":$(json_str "$c"),\"label\":$(json_str "${LABEL[$c]%%:*}")" items+=",\"hint\":$(json_str "$( [[ "${LABEL[$c]}" == *:* ]] && echo "${LABEL[$c]#*: }")")" items+=",\"kind\":\"$kind\",\"parent\":$(json_str "$parent")" - items+=",\"needs\":$(json_str "$([[ "$c" == silent ]] && silent_needs_boot && echo boot)")" + items+=",\"needs\":\"\"" items+=",\"on\":$( [[ "$now" == 1 ]] && echo true || echo false)" items+=",\"wanted\":$( [[ "${WANTED[$c]:-0}" == 1 ]] && echo true || echo false)" items+=",\"update\":$(feature_outdated "$c" && echo true || echo false)" @@ -167,7 +167,6 @@ backend_apply() { # Retired: only ever removed. WANTED[hdmi]=0 case "$boot" in desktop) WANTED[boot]=1; WANTED[gaming]=1 ;; gamescope) WANTED[boot]=0 ;; esac - silent_normalize REAPPLY=$reapply plan_changes diff --git a/lib/menu.sh b/lib/menu.sh index abc2039..cf09ec5 100644 --- a/lib/menu.sh +++ b/lib/menu.sh @@ -35,7 +35,7 @@ declare -A LABEL=( [gaming]="SteamOS conversion: boot into gaming mode, Steam on the desktop" [boot]="Boot into the desktop instead of gaming mode" [nvidia]="Gaming on NVIDIA: Steam on the desktop, started at login" - [silent]="Start Steam silently: in the tray at login on the desktop, no window" + [silent]="Start Steam silently in desktop mode: in the tray at login on the desktop, no window" [nvsilent]="Start Steam silently: in the tray at login, no window (untick: Steam's normal window)" [bigpicture]="Steam starts in Big Picture: the controller-friendly Steam (untick: Steam's normal window)" [theme]="Install SteamOS theme: Vapor look (cachyos-vapor)" @@ -81,25 +81,12 @@ boot_mode() { if [[ "$1" == 1 ]]; then echo desktop; else echo gamescope; fi } -silent_needs_boot() { - # On a Steam Machine, silent start only makes sense when it boots into - # the desktop (gaming mode starts its own Steam): the option is hidden, - # and off, while "Boot into" is gaming mode. - machine_available -} - -silent_normalize() { - silent_needs_boot && [[ "${WANTED[boot]:-0}" != 1 ]] && WANTED[silent]=0 - return 0 -} - menu_visible() { # Shown in the menu. A sub-option ("Boot into", the kernel pin) only # while its parent is ticked. component_available "$1" || return 1 # Silent start is hidden while Steam starts in Big Picture. [[ "$1" == nvsilent && "${WANTED[bigpicture]:-0}" == 1 ]] && return 1 - [[ "$1" == silent ]] && silent_needs_boot && [[ "${WANTED[boot]:-0}" != 1 ]] && return 1 [[ -z "${PARENT[$1]:-}" || "${WANTED[${PARENT[$1]}]:-0}" == 1 ]] } @@ -220,7 +207,6 @@ detect_components() { done machine_available && WANTED[cec]=1 fi - silent_normalize } defaults_options() { @@ -277,7 +263,6 @@ defaults_options() { WANTED[boot]=1 ;; gamescope) WANTED[boot]=0 ;; esac - silent_normalize return 0 } @@ -301,7 +286,7 @@ defaults_list() { [[ "$c" == cec ]] && machine_available && on=true items+="${items:+,}{\"id\":$(json_str "$c"),\"label\":$(json_str "${LABEL[$c]%%:*}")" items+=",\"hint\":$(json_str "$( [[ "${LABEL[$c]}" == *:* ]] && echo "${LABEL[$c]#*: }")")" - items+=",\"kind\":\"$kind\",\"parent\":$(json_str "${PARENT[$c]:-}"),\"needs\":$(json_str "$([[ "$c" == silent ]] && silent_needs_boot && echo boot)"),\"hideWhen\":$(json_str "$([[ "$c" == nvsilent ]] && echo bigpicture)"),\"on\":$on,\"selectable\":$sel}" + items+=",\"kind\":\"$kind\",\"parent\":$(json_str "${PARENT[$c]:-}"),\"needs\":\"\",\"hideWhen\":$(json_str "$([[ "$c" == nvsilent ]] && echo bigpicture)"),\"on\":$on,\"selectable\":$sel}" done printf '[%s]\n' "$items" } @@ -324,7 +309,6 @@ toggle_component() { if [[ "$c" == nvidia && "${WANTED[nvidia]}" == 0 ]]; then WANTED[nvsilent]=0; fi if [[ "$c" == gaming && "${WANTED[gaming]}" == 0 ]]; then WANTED[silent]=0; fi if [[ "$c" == silent && "${WANTED[silent]}" == 1 ]]; then WANTED[gaming]=1; fi - silent_normalize # The power-off fix is opt-out: ticked along with Steam Machine support. if [[ "$c" == machine ]]; then WANTED[poweroff]=${WANTED[machine]}; fi if [[ "$c" == poweroff && "${WANTED[poweroff]}" == 1 ]]; then WANTED[machine]=1; fi diff --git a/ui/qml/AppState.qml b/ui/qml/AppState.qml index 26027d1..9a95b00 100644 --- a/ui/qml/AppState.qml +++ b/ui/qml/AppState.qml @@ -38,8 +38,8 @@ Item { readonly property var status: backend.status || ({}) readonly property var items: status.items || [] - // Hidden: Big Picture excludes a silent start; on a Steam Machine a silent start needs "Boot into" desktop. - function hidden(i) { return (i.id === "nvsilent" && want.bigpicture) || (i.needs === "boot" && boot !== "desktop"); } + // Hidden: Big Picture excludes a silent start. + function hidden(i) { return i.id === "nvsilent" && want.bigpicture; } readonly property var rows: items.filter(function (i) { return (!i.parent || want[i.parent]) && !hidden(i); }) readonly property var bios: status.bios || null diff --git a/ui/qml/Texts.qml b/ui/qml/Texts.qml index 6ba1504..5b6ccf2 100644 --- a/ui/qml/Texts.qml +++ b/ui/qml/Texts.qml @@ -10,7 +10,7 @@ QtObject { boot: { label: "Boot into", hint: "Where the PC starts", body: "Where the PC starts after a restart. Switching back and forth works the same either way.", changes: ["Desktop: the Plasma session is set before login", "Gaming: the SteamOS default"] }, - silent: { label: "Start Steam silently", hint: "In the tray at login on the desktop, no window", + silent: { label: "Start Steam silently in desktop mode", hint: "In the tray at login on the desktop, no window", body: "Steam starts by itself when you log in to the Plasma desktop, in the tray without a window. Gaming mode starts its own Steam.", changes: ["Steam is started with -silent (a systemd user service, desktop only)", "Off: the service is removed again"] }, nvidia: { label: "Gaming on NVIDIA", hint: "Steam on the desktop, started at login",