From 176f27b44f454b1e7852d001820937647e7bd77c Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Thu, 24 Sep 2026 12:55:38 +0200 Subject: [PATCH 1/2] fix: LED driver for every kernel on a fresh install The DKMS override was written to /etc/dkms before dkms was installed, when that folder doesn't exist yet: the write failed silently and other kernels (e.g. LTS) built against the running one and failed. Create the folder first and stop on a failed write. VERSION 0.9.1. --- CHANGELOG.md | 12 ++++++++++-- lib/steam-machine.sh | 9 +++++++-- steamify.sh | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21fba5f..63785ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,15 @@ All notable changes, per version and per commit. Versions follow `steamify.sh`. Versions before 0.7.0 were numbered afterwards, one per merged pull request. -## 0.9.0 - 2026-09-24 +## 0.9.1 - 2026-09-24 + +- **fix: LED driver for every kernel on a fresh install** + - The DKMS override was written to `/etc/dkms` before `dkms` was installed, + when that folder doesn't exist yet, so it silently failed and the build + for other kernels (e.g. LTS) failed as in 0.6. The folder is created first + now, and a failed write stops with an error. + +## 0.9.0 - 2026-09-24 (#9) The wizard is now called **Steamify CachyOS**, and can put a shortcut to itself on the desktop. @@ -32,7 +40,7 @@ itself on the desktop. bundle under both names, so `.../download/setup-gamescope-boot.sh` keeps working. The Steamify shortcut runs `steamify.sh`. - `b0553ae` **docs: Shorter README intro** -- **feat: The shortcut's window closes itself after a countdown** +- `afc05b0` **feat: The shortcut's window closes itself after a countdown** - After the wizard ends, a 10-second countdown closes the Konsole window (Enter closes it right away); after an error it stays open until Enter. - A failed download now counts as an error (`pipefail`) instead of running diff --git a/lib/steam-machine.sh b/lib/steam-machine.sh index 58323e9..5b63140 100644 --- a/lib/steam-machine.sh +++ b/lib/steam-machine.sh @@ -56,8 +56,13 @@ install_valve_led_driver() { # got the running kernel's tree and failed (wrong kernel, and gcc against # a clang-built tree). DKMS reads this override after the package's # dkms.conf; written before the install so its own build works too. - printf '%s\n' "# Written by cachyos-gamescope-boot: build for DKMS's target kernel." \ - 'MAKE[0]="make KVERSION=${kernelver}"' | sudo tee "$LED_DKMS_OVERRIDE" >/dev/null + # On a fresh system dkms isn't installed yet, so /etc/dkms doesn't exist. + sudo mkdir -p "$(dirname "$LED_DKMS_OVERRIDE")" + if ! printf '%s\n' "# Written by cachyos-gamescope-boot: build for DKMS's target kernel." \ + 'MAKE[0]="make KVERSION=${kernelver}"' | sudo tee "$LED_DKMS_OVERRIDE" >/dev/null; then + err "Couldn't write $LED_DKMS_OVERRIDE; without it the LED driver only builds for the running kernel." + return 1 + fi if ! pacman -Qi leds-valve-dkms-git >/dev/null 2>&1; then info "Installing leds-valve-dkms-git from the AUR via $aur_helper (non-interactive)..." diff --git a/steamify.sh b/steamify.sh index 4c2a862..92d665b 100755 --- a/steamify.sh +++ b/steamify.sh @@ -15,7 +15,7 @@ set -uo pipefail # Release version, see CHANGELOG.md. -VERSION=0.9.0 +VERSION=0.9.1 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" From cda7dbe49f830c106a69db84ad56d1ccb0b9d040 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Thu, 24 Sep 2026 12:55:51 +0200 Subject: [PATCH 2/2] feat: Restart question on quit is "Restart now? [Y/n]" When a restart is needed, q asks with yes as the default; n goes back to the menu and the next q asks again. Ctrl+C quits without restarting; scripted input that runs out never restarts. --- AGENTS.md | 6 ++++-- CHANGELOG.md | 6 +++++- README.md | 4 +++- steamify.sh | 43 +++++++++++++++++++++++++++---------------- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index b37b470..16fa88a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -147,8 +147,10 @@ gamescope and the Plasma desktop. Primary target: the Valve Steam Machine device check, never flashes) and a faked version (dev-env `BIOS_VERSION=F7F0107 ./run.sh --fremont`). - The entry point loops: menu, run, "back to the menu" (or `[m]`/`[r]` when a - restart is needed), until `q`; the restart question is asked once at the - end. Scripted input that runs out ends the loop like `q`. + restart is needed), until `q`. When a restart is needed, `q` asks "Restart + now? [Y/n]" (`quit_prompt`): `n` goes back to the menu, the next `q` asks + again. Scripted input that runs out quits without restarting (never + restart on EOF: `ask_yn` would take its default). - Steamify shortcut (`launcher`): the icon runs `curl | bash` of `releases/latest/download/steamify.sh` in Konsole, so it's always the newest release. Its icon, `assets/steam-gaming-settings.svg` diff --git a/CHANGELOG.md b/CHANGELOG.md index 63785ef..6ca9f6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,15 @@ one per merged pull request. ## 0.9.1 - 2026-09-24 -- **fix: LED driver for every kernel on a fresh install** +- `2e107e5` **fix: LED driver for every kernel on a fresh install** - The DKMS override was written to `/etc/dkms` before `dkms` was installed, when that folder doesn't exist yet, so it silently failed and the build for other kernels (e.g. LTS) failed as in 0.6. The folder is created first now, and a failed write stops with an error. +- **feat: Restart question on quit is "Restart now? [Y/n]"** + - When something needs a restart, `q` asks with yes as the default; `n` goes + back to the menu and the next `q` asks again. Ctrl+C quits without + restarting; scripted input that runs out never restarts. ## 0.9.0 - 2026-09-24 (#9) diff --git a/README.md b/README.md index 8f880b3..9498e31 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,9 @@ to restart (needed for changes to how the PC starts). After each run the menu comes back with the new state, so you can change more in one go; quit with **q**. When something needs a restart, you choose -between going back to the menu and restarting now; quitting asks once more. +between going back to the menu and restarting now. Quitting then asks +"Restart now? [Y/n]": **n** takes you back to the menu (and the next **q** +asks again); Ctrl+C quits without restarting. Run it again whenever you like - to change your choices, to turn things off again, or after a CachyOS update (press `a` in the menu to re-apply diff --git a/steamify.sh b/steamify.sh index 92d665b..f305511 100755 --- a/steamify.sh +++ b/steamify.sh @@ -78,13 +78,36 @@ after_run() { done } +quit_prompt() { + # On q: when something needs a restart, offer it (default yes); "n" goes + # back to the menu, and the next q asks again. Returns 0 to show the menu + # again, 1 to quit (nothing to restart, or input ended in scripted runs). + local reply + restart_needed || return 1 + echo + if [[ -n "${BIOS_NEEDS_RESTART:-}" ]]; then + warn "The BIOS update is written during the next restart. Keep the power on and" + warn "don't touch the machine until it has fully started again, even if the screen stays black." + else + info "The changes take effect after a restart." + fi + read -rp "$(echo -e "${c_bold}Restart now?${c_reset} [Y/n] (n = back to the menu, Ctrl+C = quit without restarting) ")" reply || return 1 + case "$reply" in + ""|y|Y) restart_now ;; + esac + return 0 +} + # Menu loop: after each run the menu comes back with the new state, until # the user quits; the restart question comes then, once, for everything. RESTART_FOR_LOGIN=false SUDO_KEEPALIVE=false while true; do detect_components - run_menu || break + if ! run_menu; then + quit_prompt && continue + break + fi plan_changes if [[ ${#TO_DISABLE[@]} -eq 0 && ${#TO_ENABLE[@]} -eq 0 ]]; then @@ -130,21 +153,9 @@ while true; do done echo -# A staged BIOS update is written during the restart. -if [[ -n "${BIOS_NEEDS_RESTART:-}" ]]; then - warn "The BIOS update is written during the next restart. Keep the power on and" - warn "don't touch the machine until it has fully started again, even if the screen stays black." - if ask_yn "Restart now to install the BIOS update?" n; then - restart_now - else - info "The BIOS update installs at your next restart." - fi -elif [[ "$RESTART_FOR_LOGIN" == true ]]; then - if ask_yn "Restart now so the changes take effect?" n; then - restart_now - else - info "Restart whenever you're ready." - fi +if restart_needed; then + # Only reached when input ended (scripted runs): never restart then. + info "Not restarted; the changes take effect after a restart." else info "Bye." fi