diff --git a/TODO.md b/TODO.md index 2bd0d9a..370e28e 100644 --- a/TODO.md +++ b/TODO.md @@ -2,16 +2,23 @@ ## 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`, run by mkarchiso after the packages; the airootfs copy of os-release is 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, 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 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. ## Done @@ -39,15 +46,10 @@ ## Later -- **Steamify wizard pages in the installer**, before anything is installed: - the same choices as Steamify's menu (conversion, boot into gamescope or - desktop, theme, Deck icons, single user, shortcut + non-Steam game, - notifications, VRAM booster, HDMI-CEC, Steam Machine support + power-off - 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 ` (`--boot gamescope|desktop`) instead of - `--defaults`. +- **Checkboxes instead of the leave-out list**: Calamares has no ready + checkbox page whose ticks come out as plain ids (netinstall's are package + installs); it would take a QML page (packagechooserq) or a small C++ + module. Steamify's side (`--skip`, `--boot`) stays the same. - **Branding**: the live session's os-release says "Steamify, based on CachyOS" (Hello's subtitle); Hello's window title and the boot menu still say CachyOS. Check with the CachyOS team. diff --git a/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyboot.conf b/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyboot.conf new file mode 100644 index 0000000..b0ff2dd --- /dev/null +++ b/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyboot.conf @@ -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" diff --git a/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyskip.conf b/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyskip.conf new file mode 100644 index 0000000..9eb5e9d --- /dev/null +++ b/archiso/airootfs/etc/calamares/modules/packagechooser_steamifyskip.conf @@ -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." diff --git a/archiso/airootfs/etc/calamares/modules/shellprocess_steamify.conf b/archiso/airootfs/etc/calamares/modules/shellprocess_steamify.conf index 45727f8..bf86d9c 100644 --- a/archiso/airootfs/etc/calamares/modules/shellprocess_steamify.conf +++ b/archiso/airootfs/etc/calamares/modules/shellprocess_steamify.conf @@ -4,7 +4,7 @@ dontChroot: true timeout: 3600 script: - - "-/usr/local/bin/steamify-install ${ROOT} ${USER}" + - "-/usr/local/bin/steamify-install ${ROOT} ${USER} \"${gs[packagechooser_steamifyskip]}\" \"${gs[packagechooser_steamifyboot]}\"" i18n: name: "Setting up the Steam Machine (Steamify)" diff --git a/archiso/airootfs/usr/local/bin/calamares-online.sh b/archiso/airootfs/usr/local/bin/calamares-online.sh index 992767d..aaa71d8 100755 --- a/archiso/airootfs/usr/local/bin/calamares-online.sh +++ b/archiso/airootfs/usr/local/bin/calamares-online.sh @@ -47,7 +47,8 @@ EOF sudo cp "/usr/share/calamares/settings_${mode}.conf" /etc/calamares/settings.conf # Steamify: its step (modules/shellprocess_steamify.conf) before the # 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 exec pkexec-wrapper calamares -D6 >> $log } diff --git a/archiso/airootfs/usr/local/bin/steamify-install b/archiso/airootfs/usr/local/bin/steamify-install index 08de7ff..1a98eea 100755 --- a/archiso/airootfs/usr/local/bin/steamify-install +++ b/archiso/airootfs/usr/local/bin/steamify-install @@ -1,11 +1,16 @@ #!/bin/bash -# steamify-install : runs Steamify's default setup for +# steamify-install [] [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 # 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 # 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. 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" rule="$root/etc/sudoers.d/zz-steamify-install" [[ -d "$root" && -n "$user" ]] || exit 0 @@ -15,7 +20,7 @@ printf '%s ALL=(ALL) NOPASSWD: ALL\n' "$user" > "$rule" chmod 440 "$rule" 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 \ - 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" rm -f "$rule" "$root/var/tmp/steamify.sh" exit 0