feat: Steamify's choices in the installer: a Steam Machine page (what to leave out) and a Start in page (gaming mode or desktop), passed to steamify.sh --defaults

This commit is contained in:
theupriser committed 2026-09-27 21:59:38 +02:00
1 parent c6212a774b
commit 81f2eea63d
6 files changed
+77 -16

No files matched your search

+14 -12
View File
@@ -2,16 +2,23 @@
## Open ## Open
1. **Check the live name** after the next build: Hello's subtitle should say 1. **Test the Steamify installer pages** (after the next build, needs
Steamify 2.7.0 with `--skip`/`--boot`; the ISO has the branch's bundle
until it's released): a "Steam Machine" page (leave out: multi-select,
nothing selected = full setup) and a "Start in" page (gaming mode or
desktop) after the Desktop page; check `/var/log/steamify-install.log`
for the skipped items and the boot choice. If Calamares doesn't expand
`${gs[...]}` in shellprocess, the log shows "Unknown item: ${gs[...".
2. **Check the live name** after the next build: Hello's subtitle should say
"Steamify CachyOS, based on CachyOS rolling" (`steamify-customize.sh`, "Steamify CachyOS, based on CachyOS rolling" (`steamify-customize.sh`,
run by mkarchiso after the packages; the airootfs copy of os-release is run by mkarchiso after the packages; the airootfs copy of os-release is
overwritten by a package). overwritten by a package).
2. **Steamify PR**: `feat/defaults-mode` (2.6.0, `b948c20`) in 3. **Steamify PR**: `feat/defaults-mode` (2.6.0, `b948c20`) in
steamify-cachyos, pushed, no PR yet (checked 2026-09-27: not on main, steamify-cachyos, pushed, no PR yet (checked 2026-09-27: not on main,
newest release v2.5.2). Ready: open it; the user newest release v2.5.2). Ready: open it; the user
merges (never commit to main). The ISO's first-login step needs 2.6.0 merges (never commit to main). The ISO's first-login step needs 2.6.0
released. released.
3. **Test on the real Steam Machine** from a USB stick (gamescope, LEDs, CEC, 4. **Test on the real Steam Machine** from a USB stick (gamescope, LEDs, CEC,
power-off) before calling the ISO usable. power-off) before calling the ISO usable.
## Done ## Done
@@ -39,15 +46,10 @@
## Later ## Later
- **Steamify wizard pages in the installer**, before anything is installed: - **Checkboxes instead of the leave-out list**: Calamares has no ready
the same choices as Steamify's menu (conversion, boot into gamescope or checkbox page whose ticks come out as plain ids (netinstall's are package
desktop, theme, Deck icons, single user, shortcut + non-Steam game, installs); it would take a QML page (packagechooserq) or a small C++
notifications, VRAM booster, HDMI-CEC, Steam Machine support + power-off module. Steamify's side (`--skip`, `--boot`) stays the same.
fix), defaults ticked like a first run. A Calamares page (netinstall-style
YAML or a QML module in the `show` sequence) stores the ticked ids in
global storage; `steamify-install` passes them to
`steamify.sh --backend apply <ids>` (`--boot gamescope|desktop`) instead of
`--defaults`.
- **Branding**: the live session's os-release says "Steamify, based on - **Branding**: the live session's os-release says "Steamify, based on
CachyOS" (Hello's subtitle); Hello's window title and the boot menu still CachyOS" (Hello's subtitle); Hello's window title and the boot menu still
say CachyOS. Check with the CachyOS team. say CachyOS. Check with the CachyOS team.
@@ -0,0 +1,16 @@
# Steamify: where the Steam Machine starts (steamify-install passes --boot).
---
mode: required
method: legacy
labels:
step: "Start in"
default: gamescope
items:
- id: gamescope
name: "Gaming mode"
description: "Start straight into Steam's gaming mode, like SteamOS. Switch to Desktop in Steam's power menu brings you to the desktop."
screenshot: ":/images/no-selection.png"
- id: desktop
name: "Desktop"
description: "Start in the Plasma desktop. Return to Gaming Mode on the desktop brings you to Steam's gaming mode."
screenshot: ":/images/no-selection.png"
@@ -0,0 +1,37 @@
# Steamify: which parts of the Steam Machine setup to leave out. Nothing
# selected means Steamify's full default setup; the ids are Steamify's menu
# items (steamify-install passes them as --skip).
---
mode: optionalmultiple
method: legacy
labels:
step: "Steam Machine"
items:
- id: ""
name: "Everything"
description: "Select what to leave out of the Steam Machine setup (Steamify). Leave everything unselected for the full SteamOS-style setup; everything can be changed later in the Steamify app."
screenshot: ":/images/no-selection.png"
- id: theme
name: "Leave out: SteamOS theme"
description: "The Vapor look for the desktop, with SteamOS's panel layout and Add to Steam."
- id: glyphs
name: "Leave out: Steam Deck/Machine icons"
description: "Steam Deck button icons in gaming mode."
- id: single
name: "Leave out: single user mode"
description: "No password, lock screen, user switching or log out, like SteamOS."
- id: launcher
name: "Leave out: Steamify shortcut"
description: "The Steamify app on the desktop and in the launcher, to change these choices later."
- id: notify
name: "Leave out: update notifications"
description: "A notification when there's a new Steamify. It never updates by itself."
- id: vram
name: "Leave out: VRAM booster"
description: "The game in front keeps its video memory; background apps make room."
- id: cec
name: "Leave out: HDMI-CEC"
description: "Use Steam with the TV remote, TV on and off with the Steam Machine."
- id: machine
name: "Leave out: Steam Machine support"
description: "The LED bar driver, hardware settings in Steam and the power-off fix."
@@ -4,7 +4,7 @@
dontChroot: true dontChroot: true
timeout: 3600 timeout: 3600
script: script:
- "-/usr/local/bin/steamify-install ${ROOT} ${USER}" - "-/usr/local/bin/steamify-install ${ROOT} ${USER} \"${gs[packagechooser_steamifyskip]}\" \"${gs[packagechooser_steamifyboot]}\""
i18n: i18n:
name: "Setting up the Steam Machine (Steamify)" name: "Setting up the Steam Machine (Steamify)"
@@ -47,7 +47,8 @@ EOF
sudo cp "/usr/share/calamares/settings_${mode}.conf" /etc/calamares/settings.conf sudo cp "/usr/share/calamares/settings_${mode}.conf" /etc/calamares/settings.conf
# Steamify: its step (modules/shellprocess_steamify.conf) before the # Steamify: its step (modules/shellprocess_steamify.conf) before the
# installer cleans up after itself. # installer cleans up after itself.
sudo sed -i -e 's/^- id: cleanup_calamares$/- id: steamify\n module: shellprocess\n config: shellprocess_steamify.conf\n\n&/' \ sudo sed -i -e 's/^- id: cleanup_calamares$/- id: steamifyskip\n module: packagechooser\n config: packagechooser_steamifyskip.conf\n\n- id: steamifyboot\n module: packagechooser\n config: packagechooser_steamifyboot.conf\n\n- id: steamify\n module: shellprocess\n config: shellprocess_steamify.conf\n\n&/' \
-e 's/^ - packagechooser@desktop$/&\n - packagechooser@steamifyskip\n - packagechooser@steamifyboot/' \
-e 's/^ - shellprocess@cleanup_calamares$/ - shellprocess@steamify\n&/' /etc/calamares/settings.conf -e 's/^ - shellprocess@cleanup_calamares$/ - shellprocess@steamify\n&/' /etc/calamares/settings.conf
exec pkexec-wrapper calamares -D6 >> $log exec pkexec-wrapper calamares -D6 >> $log
} }
@@ -1,11 +1,16 @@
#!/bin/bash #!/bin/bash
# steamify-install <target root> <user>: runs Steamify's default setup for # steamify-install <target root> <user> [<skip ids>] [gamescope|desktop]:
# runs Steamify's default setup (minus what the installer's Steam Machine
# page leaves out, where the boot page says) for
# the new user inside the installed system (Calamares, after the users and # the new user inside the installed system (Calamares, after the users and
# services steps). Steamify refuses root and asks sudo per command, so the # services steps). Steamify refuses root and asks sudo per command, so the
# user gets a NOPASSWD rule for this run only, named to be read last: sudo # user gets a NOPASSWD rule for this run only, named to be read last: sudo
# takes the last matching rule, and a later %wheel rule would ask again. Never fails the install: a # takes the last matching rule, and a later %wheel rule would ask again. Never fails the install: a
# problem leaves the log and Steamify can be run again from the desktop. # problem leaves the log and Steamify can be run again from the desktop.
root="$1" user="$2" root="$1" user="$2"
# The pages' ids, comma-separated; the "Everything" entry is an empty id.
skip="$(tr ',' '\n' <<< "${3:-}" | grep -v '^$' | paste -sd, -)"
boot="${4:-gamescope}"
log="$root/var/log/steamify-install.log" log="$root/var/log/steamify-install.log"
rule="$root/etc/sudoers.d/zz-steamify-install" rule="$root/etc/sudoers.d/zz-steamify-install"
[[ -d "$root" && -n "$user" ]] || exit 0 [[ -d "$root" && -n "$user" ]] || exit 0
@@ -15,7 +20,7 @@ printf '%s ALL=(ALL) NOPASSWD: ALL\n' "$user" > "$rule"
chmod 440 "$rule" chmod 440 "$rule"
arch-chroot "$root" runuser -u "$user" -- env -i HOME="/home/$user" USER="$user" LOGNAME="$user" \ arch-chroot "$root" runuser -u "$user" -- env -i HOME="/home/$user" USER="$user" LOGNAME="$user" \
PATH=/usr/local/bin:/usr/bin TERM=dumb LANG=C.UTF-8 \ PATH=/usr/local/bin:/usr/bin TERM=dumb LANG=C.UTF-8 \
bash -c 'cd ~ && bash /var/tmp/steamify.sh --defaults < /dev/null' > "$log" 2>&1 bash -c 'cd ~ && bash /var/tmp/steamify.sh --defaults --skip "$0" --boot "$1" < /dev/null' "$skip" "$boot" > "$log" 2>&1
echo "exit: $?" >> "$log" echo "exit: $?" >> "$log"
rm -f "$rule" "$root/var/tmp/steamify.sh" rm -f "$rule" "$root/var/tmp/steamify.sh"
exit 0 exit 0