From 7ee32f926b2ae5d3505abebcdd35cb2b82689dd4 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Thu, 1 Oct 2026 23:06:39 +0200 Subject: [PATCH 1/5] feat: Steamify page: Start Steam silently option (needs/hideWhen rules from --defaults --list) --- .../usr/local/share/steamify-installer/Items.qml | 1 + .../usr/local/share/steamify-installer/SteamifyPage.qml | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/archiso/airootfs/usr/local/share/steamify-installer/Items.qml b/archiso/airootfs/usr/local/share/steamify-installer/Items.qml index 582574e..33c8cd0 100644 --- a/archiso/airootfs/usr/local/share/steamify-installer/Items.qml +++ b/archiso/airootfs/usr/local/share/steamify-installer/Items.qml @@ -8,6 +8,7 @@ QtObject { readonly property var rows: [ { id: "gaming", label: "SteamOS conversion", hint: "boot into gaming mode, Steam on the desktop", kind: "toggle", parent: "", on: true, selectable: true }, { id: "boot", label: "Boot into", hint: "", kind: "choice", parent: "gaming", on: false, selectable: true }, + { id: "silent", label: "Start Steam silently", hint: "in the tray at login on the desktop, no window", kind: "toggle", parent: "gaming", needs: "boot", on: true, selectable: true }, { id: "theme", label: "Install SteamOS theme", hint: "Vapor look (cachyos-vapor)", kind: "toggle", parent: "", on: true, selectable: true }, { id: "glyphs", label: "Install Steam Deck/Machine icons", hint: "Deck button icons in gaming mode", kind: "toggle", parent: "", on: true, selectable: true }, { id: "single", label: "Single user mode", hint: "no password, lock screen or log out (SDDM)", kind: "toggle", parent: "", on: true, selectable: true }, diff --git a/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml b/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml index 34874db..d889dac 100644 --- a/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml +++ b/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml @@ -35,7 +35,9 @@ Item { function label(r) { return (Texts.items[r.id] || {}).label || r.label; } function hint(r) { return (Texts.items[r.id] || {}).hint || r.hint; } - function shown(r) { return !r.parent || !!want[r.parent]; } + // `needs: "boot"` (Steamify's --defaults --list): only with Boot into Desktop. + function shown(r) { return (!r.parent || !!want[r.parent]) && (r.needs !== "boot" || boot === "desktop") && + !(r.hideWhen && want[r.hideWhen]); } // Steamify's own rules: a sub-option needs its parent (turning a parent // off turns its sub-options off); single user mode needs the conversion. @@ -46,7 +48,8 @@ Item { var r = rows[i]; if (w[id] && r.id === id && r.parent) w[r.parent] = true; if (!w[id] && r.parent === id && r.kind === "toggle") w[r.id] = false; - if (w[id] && r.parent === id && r.kind === "toggle") w[r.id] = true; // opt-out sub-options + if (w[id] && r.parent === id && r.kind === "toggle") w[r.id] = !(r.hideWhen && w[r.hideWhen]); // opt-out sub-options + if (w[id] && r.hideWhen === id) w[r.id] = false; // Big Picture and a silent start exclude each other } if (id === "single" && w.single) w.gaming = true; if (id === "gaming" && !w.gaming) { w.single = false; boot = "gamescope"; } @@ -56,7 +59,7 @@ Item { function choice() { var on = []; for (var i = 0; i < rows.length; i++) - if (rows[i].kind === "toggle" && want[rows[i].id]) on.push(rows[i].id); + if (rows[i].kind === "toggle" && want[rows[i].id] && shown(rows[i])) on.push(rows[i].id); if (want.gaming && boot === "desktop") on.push("boot"); // ", " (not ","): Calamares' packagechooser Summary step shows this // value raw ("Install option: "); steamify-install still From 084b68d109fe9a1210eebcf17919a26ce04ff064 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Fri, 2 Oct 2026 08:33:43 +0200 Subject: [PATCH 2/5] feat: steamify.nodownload (kernel command line) or STEAMIFY_NO_DOWNLOAD keeps the ISO's own Steamify instead of the newest release --- archiso/airootfs/usr/local/bin/calamares-online.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/archiso/airootfs/usr/local/bin/calamares-online.sh b/archiso/airootfs/usr/local/bin/calamares-online.sh index 6709e37..b863287 100755 --- a/archiso/airootfs/usr/local/bin/calamares-online.sh +++ b/archiso/airootfs/usr/local/bin/calamares-online.sh @@ -69,14 +69,18 @@ EOF # any, so "$sdir" would still be empty in the same one. local sdir=/usr/local/share/steamify local sbin="$sdir/steamify.sh" sqml="$sdir/qml" + # STEAMIFY_NO_DOWNLOAD=1 or `steamify.nodownload` on the kernel command line: keep the ISO's own + # copy, e.g. to test an unreleased Steamify (the newest release would replace it). + local nodl= + if [[ -n "${STEAMIFY_NO_DOWNLOAD:-}" ]] || grep -qw steamify.nodownload /proc/cmdline; then nodl=1; fi local tmp; tmp="$(mktemp)" - if curl -fsSL --max-time 20 https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify.sh -o "$tmp" && + if [[ -z "$nodl" ]] && curl -fsSL --max-time 20 https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify.sh -o "$tmp" && grep -q -- '--defaults' "$tmp"; then sudo install -Dm755 "$tmp" "$sbin" fi rm -f "$tmp" tmp="$(mktemp -d)" - if curl -fsSL --max-time 20 https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify-app.tar.gz | + if [[ -z "$nodl" ]] && curl -fsSL --max-time 20 https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify-app.tar.gz | tar -xz -C "$tmp" --strip-components=2 ui/qml/Theme.qml ui/qml/Texts.qml 2>/dev/null; then sudo cp "$tmp/Theme.qml" "$tmp/Texts.qml" "$sqml/" fi From 564f2a8dcd97a5f9f21e779d63af221bc96a3316 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Fri, 2 Oct 2026 09:10:28 +0200 Subject: [PATCH 3/5] feat: Steamify page: the silent option is called "in desktop mode" in the fallback rows, and is no longer tied to Boot into --- archiso/airootfs/usr/local/share/steamify-installer/Items.qml | 2 +- .../usr/local/share/steamify-installer/SteamifyPage.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/archiso/airootfs/usr/local/share/steamify-installer/Items.qml b/archiso/airootfs/usr/local/share/steamify-installer/Items.qml index 33c8cd0..b728a4d 100644 --- a/archiso/airootfs/usr/local/share/steamify-installer/Items.qml +++ b/archiso/airootfs/usr/local/share/steamify-installer/Items.qml @@ -8,7 +8,7 @@ QtObject { readonly property var rows: [ { id: "gaming", label: "SteamOS conversion", hint: "boot into gaming mode, Steam on the desktop", kind: "toggle", parent: "", on: true, selectable: true }, { id: "boot", label: "Boot into", hint: "", kind: "choice", parent: "gaming", on: false, selectable: true }, - { id: "silent", label: "Start Steam silently", hint: "in the tray at login on the desktop, no window", kind: "toggle", parent: "gaming", needs: "boot", on: true, selectable: true }, + { id: "silent", label: "Start Steam silently in desktop mode", hint: "in the tray at login on the desktop, no window", kind: "toggle", parent: "gaming", needs: "", on: true, selectable: true }, { id: "theme", label: "Install SteamOS theme", hint: "Vapor look (cachyos-vapor)", kind: "toggle", parent: "", on: true, selectable: true }, { id: "glyphs", label: "Install Steam Deck/Machine icons", hint: "Deck button icons in gaming mode", kind: "toggle", parent: "", on: true, selectable: true }, { id: "single", label: "Single user mode", hint: "no password, lock screen or log out (SDDM)", kind: "toggle", parent: "", on: true, selectable: true }, diff --git a/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml b/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml index d889dac..03608e7 100644 --- a/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml +++ b/archiso/airootfs/usr/local/share/steamify-installer/SteamifyPage.qml @@ -35,7 +35,7 @@ Item { function label(r) { return (Texts.items[r.id] || {}).label || r.label; } function hint(r) { return (Texts.items[r.id] || {}).hint || r.hint; } - // `needs: "boot"` (Steamify's --defaults --list): only with Boot into Desktop. + // `needs: "boot"` (an older Steamify's --defaults --list): only with Boot into Desktop. function shown(r) { return (!r.parent || !!want[r.parent]) && (r.needs !== "boot" || boot === "desktop") && !(r.hideWhen && want[r.hideWhen]); } From 0756626700d85a37d7de3759cd226831b63d5987 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Fri, 2 Oct 2026 11:11:20 +0200 Subject: [PATCH 4/5] feat: steamify-install passes steamify.nodownload on to the installed system (its first login keeps the ISO's Steamify) --- archiso/airootfs/usr/local/bin/steamify-install | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/archiso/airootfs/usr/local/bin/steamify-install b/archiso/airootfs/usr/local/bin/steamify-install index b0bc080..62d241c 100755 --- a/archiso/airootfs/usr/local/bin/steamify-install +++ b/archiso/airootfs/usr/local/bin/steamify-install @@ -54,8 +54,12 @@ rule="$root/etc/sudoers.d/zz-steamify-install" install -Dm755 /usr/local/share/steamify/steamify.sh "$root/var/tmp/steamify.sh" printf '%s ALL=(ALL) NOPASSWD: ALL\n' "$user" > "$rule" chmod 440 "$rule" +# steamify.nodownload on the live system's kernel command line (or STEAMIFY_NO_DOWNLOAD): the installed system +# keeps this ISO's Steamify at its first login too, instead of the newest release. +nodl=() +if [[ -n "${STEAMIFY_NO_DOWNLOAD:-}" ]] || grep -qw steamify.nodownload /proc/cmdline; then nodl=(STEAMIFY_NO_DOWNLOAD=1); fi 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 "${nodl[@]}" \ bash -c 'cd ~ && bash /var/tmp/steamify.sh --defaults --options "$0" --boot "$1" < /dev/null' "$options" "$boot" > "$log" 2>&1 echo "exit: $?" >> "$log" rm -f "$rule" "$root/var/tmp/steamify.sh" From d70b238a067d5d11ecb1bed66547c354b9902374 Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Fri, 2 Oct 2026 14:06:44 +0200 Subject: [PATCH 5/5] docs: TODO: steamify.nodownload keeps the ISO's own Steamify (live session and first login) --- TODO.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODO.md b/TODO.md index 1601fb0..f26f22e 100644 --- a/TODO.md +++ b/TODO.md @@ -32,6 +32,9 @@ Tick items off as they are done; the newest entries are at the top of each list. - [x] **Always from `master`**: `iso-1-github-tag.yml` takes `kind` (release, dev, auto); steamify-cachyos' `bundle.yml` asks for `release` (a version published from main) or `dev` (an unreleased version on a release branch). - [x] **`steamify_ref`**: a release branch builds its dev ISO with its own Steamify (and VERSION) before it is released. +- [x] **`steamify.nodownload`** (kernel command line) or `STEAMIFY_NO_DOWNLOAD=1`: the live session keeps the ISO's own Steamify + (`calamares-online.sh` would replace it by the newest release), and `steamify-install` passes it on, so the installed system's + first login runs the ISO's bundle too. For testing an unreleased Steamify; tested with Steamify 2.11.0 (three installs). - [x] **The mirror's build is started by dispatch** after the mirror has the new tag object (a replaced tag starts no run by itself; the dispatch needs the full ref `refs/tags/`). - [x] **Build badge** in the GitHub release: running, then succeeded / failed / cancelled (secret `GH_RELEASE_TOKEN` on the