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.
This commit is contained in:
theupriser committed 2026-09-24 12:55:51 +02:00
1 parent 176f27b44f
commit cda7dbe49f
4 files changed
+39 -20

No files matched your search

+4 -2
View File
@@ -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 device check, never flashes) and a faked version (dev-env
`BIOS_VERSION=F7F0107 ./run.sh --fremont`). `BIOS_VERSION=F7F0107 ./run.sh --fremont`).
- The entry point loops: menu, run, "back to the menu" (or `[m]`/`[r]` when a - 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 restart is needed), until `q`. When a restart is needed, `q` asks "Restart
end. Scripted input that runs out ends the loop like `q`. 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 - Steamify shortcut (`launcher`): the icon runs `curl | bash` of
`releases/latest/download/steamify.sh` in Konsole, so it's `releases/latest/download/steamify.sh` in Konsole, so it's
always the newest release. Its icon, `assets/steam-gaming-settings.svg` always the newest release. Its icon, `assets/steam-gaming-settings.svg`
+5 -1
View File
@@ -7,11 +7,15 @@ one per merged pull request.
## 0.9.1 - 2026-09-24 ## 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, - 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 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 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. 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) ## 0.9.0 - 2026-09-24 (#9)
+3 -1
View File
@@ -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 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 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 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 again, or after a CachyOS update (press `a` in the menu to re-apply
+27 -16
View File
@@ -78,13 +78,36 @@ after_run() {
done 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 # 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. # the user quits; the restart question comes then, once, for everything.
RESTART_FOR_LOGIN=false RESTART_FOR_LOGIN=false
SUDO_KEEPALIVE=false SUDO_KEEPALIVE=false
while true; do while true; do
detect_components detect_components
run_menu || break if ! run_menu; then
quit_prompt && continue
break
fi
plan_changes plan_changes
if [[ ${#TO_DISABLE[@]} -eq 0 && ${#TO_ENABLE[@]} -eq 0 ]]; then if [[ ${#TO_DISABLE[@]} -eq 0 && ${#TO_ENABLE[@]} -eq 0 ]]; then
@@ -130,21 +153,9 @@ while true; do
done done
echo echo
# A staged BIOS update is written during the restart. if restart_needed; then
if [[ -n "${BIOS_NEEDS_RESTART:-}" ]]; then # Only reached when input ended (scripted runs): never restart then.
warn "The BIOS update is written during the next restart. Keep the power on and" info "Not restarted; the changes take effect after a restart."
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
else else
info "Bye." info "Bye."
fi fi