feat: The script is now steamify.sh

- setup-gamescope-boot.sh renamed to steamify.sh; all references updated.
- Releases publish the bundle as steamify.sh and, for older install commands, setup-gamescope-boot.sh.
- The Steamify shortcut runs steamify.sh.
This commit is contained in:
theupriser committed 2026-09-24 12:33:43 +02:00
1 parent 1c34a97598
commit 69a420b8aa
19 files changed
+58 -47

No files matched your search

+6 -6
View File
@@ -1,16 +1,16 @@
#!/bin/bash
# Build a single-file version of the wizard for `curl | bash` use:
# .github/tools/bundle.sh [output] (default: dist/setup-gamescope-boot.sh)
# .github/tools/bundle.sh [output] (default: dist/steamify.sh)
#
# Inlines lib/*.sh in the order setup-gamescope-boot.sh sources them and
# Inlines lib/*.sh in the order steamify.sh sources them and
# wraps the entry point's body in main(), so bash has read the whole file
# before anything runs. That lets the bundle reattach stdin to the terminal
# when it was piped in by curl, so the interactive menu still works.
set -euo pipefail
cd "$(dirname "$0")/../.."
out="${1:-dist/setup-gamescope-boot.sh}"
entry=setup-gamescope-boot.sh
out="${1:-dist/steamify.sh}"
entry=steamify.sh
mkdir -p "$(dirname "$out")"
# Library order, taken from the entry point's source loop.
@@ -28,10 +28,10 @@ version="v$(grep -oP '^VERSION=\K.*' "$entry"), $(git describe --always --dirty
for lib in $libs; do
echo "# ----- lib/$lib.sh -----"
# Drop each module's shebang and its "Sourced by ..." boilerplate.
sed -e '1{/^#!/d}' -e '/^# Sourced by setup-gamescope-boot.sh/d' "lib/$lib.sh"
sed -e '1{/^#!/d}' -e '/^# Sourced by steamify.sh/d' "lib/$lib.sh"
echo
done
echo "# ----- setup-gamescope-boot.sh -----"
echo "# ----- steamify.sh -----"
echo "main() {"
# Everything after the source loop is the entry point's body.
sed -n '/^for lib in /,$p' "$entry" | sed '1,/^done$/d' | sed 's/^/ /; s/^ $//'
+18 -13
View File
@@ -1,10 +1,12 @@
# Builds the single-file wizard (.github/tools/bundle.sh) and publishes it as a
# release per version: tag v$VERSION (VERSION in setup-gamescope-boot.sh),
# release per version: tag v$VERSION (VERSION in steamify.sh),
# with that version's CHANGELOG.md section as notes. A released version is
# never overwritten; the newest one is marked latest, and the "latest" tag and
# release are moved to it, so both of these always get the newest version:
# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/setup-gamescope-boot.sh | bash
# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/download/latest/setup-gamescope-boot.sh | bash
# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify.sh | bash
# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/download/latest/steamify.sh | bash
# The bundle is also published as setup-gamescope-boot.sh, its name before
# 0.9.0, so older install commands keep working.
# Pull requests only build and check it, and warn when VERSION is already released.
name: Single-file build
@@ -26,29 +28,32 @@ jobs:
fetch-depth: 0 # for the version in the bundle's header
- name: Build
run: .github/tools/bundle.sh dist/setup-gamescope-boot.sh
run: |
.github/tools/bundle.sh dist/steamify.sh
# Old name (before 0.9.0), for older install commands and links.
cp dist/steamify.sh dist/setup-gamescope-boot.sh
- name: Check
run: |
bash -n dist/setup-gamescope-boot.sh
bash -n dist/steamify.sh
# SC2034/SC2154: variables used across the inlined modules.
shellcheck -S warning -e SC2034,SC2154 dist/setup-gamescope-boot.sh
shellcheck -S warning -e SC2034,SC2154 dist/steamify.sh
- uses: actions/upload-artifact@v4
with:
name: setup-gamescope-boot
path: dist/setup-gamescope-boot.sh
name: steamify
path: dist/steamify.sh
- name: Version
id: version
env:
GH_TOKEN: ${{ github.token }}
run: |
version="$(grep -oP '^VERSION=\K.*' setup-gamescope-boot.sh)"
version="$(grep -oP '^VERSION=\K.*' steamify.sh)"
echo "version=$version" >> "$GITHUB_OUTPUT"
if gh release view "v$version" >/dev/null 2>&1; then
echo "released=true" >> "$GITHUB_OUTPUT"
echo "::warning::v$version is already released and won't be overwritten. Bump VERSION in setup-gamescope-boot.sh and add a CHANGELOG.md section to release this."
echo "::warning::v$version is already released and won't be overwritten. Bump VERSION in steamify.sh and add a CHANGELOG.md section to release this."
else
echo "released=false" >> "$GITHUB_OUTPUT"
fi
@@ -68,11 +73,11 @@ jobs:
notes="Single-file build of v$VERSION ($(git describe --always), $(git log -1 --format=%cs)).
Run the newest version with:
curl -fsSL https://github.com/${{ github.repository }}/releases/latest/download/setup-gamescope-boot.sh | bash
curl -fsSL https://github.com/${{ github.repository }}/releases/latest/download/steamify.sh | bash
## Changes in v$VERSION
$changes"
gh release create "v$VERSION" dist/setup-gamescope-boot.sh assets/steam-gaming-settings.svg \
gh release create "v$VERSION" dist/steamify.sh dist/setup-gamescope-boot.sh assets/steam-gaming-settings.svg \
--target "$GITHUB_SHA" --title "Steamify CachyOS v$VERSION" --notes "$notes" --latest
# "latest" follows the newest version tag, for the older install URL
@@ -85,4 +90,4 @@ jobs:
else
gh release create latest --title "Steamify CachyOS - latest (v$VERSION)" --notes "$latest_notes" --latest=false
fi
gh release upload latest dist/setup-gamescope-boot.sh assets/steam-gaming-settings.svg --clobber
gh release upload latest dist/steamify.sh dist/setup-gamescope-boot.sh assets/steam-gaming-settings.svg --clobber
+6 -6
View File
@@ -12,7 +12,7 @@ gamescope and the Plasma desktop. Primary target: the Valve Steam Machine
## Layout
- `setup-gamescope-boot.sh` - the only entry point. Pre-flight checks,
- `steamify.sh` - the only entry point. Pre-flight checks,
sources `lib/*.sh`, runs the menu and applies the plan. No component
logic here.
- `lib/*.sh` - one file per responsibility, each defining functions only
@@ -59,7 +59,7 @@ gamescope and the Plasma desktop. Primary target: the Valve Steam Machine
- Comments explain *why* (the CachyOS/Plasma quirk being worked around),
not what the next line does.
- **Versioning and releases.** SemVer in `VERSION` (`setup-gamescope-boot.sh`,
- **Versioning and releases.** SemVer in `VERSION` (`steamify.sh`,
shown in the menu header and the bundle header).
- Every commit gets an entry in `CHANGELOG.md` under its version (short hash
+ subject; a commit can't contain its own hash, so fill it in with the
@@ -70,7 +70,7 @@ gamescope and the Plasma desktop. Primary target: the Valve Steam Machine
changelog section) and marks it latest. An existing version is never
overwritten: without a bump nothing is released, and pull requests show
a warning.
- Users install through `releases/latest/download/setup-gamescope-boot.sh`
- Users install through `releases/latest/download/steamify.sh`
(GitHub's newest release). The `latest` tag and release follow the newest
version tag too (moved, asset replaced, when a new version is released),
so the older URL `releases/download/latest/...` keeps working.
@@ -150,7 +150,7 @@ gamescope and the Plasma desktop. Primary target: the Valve Steam Machine
restart is needed), until `q`; the restart question is asked once at the
end. Scripted input that runs out ends the loop like `q`.
- Steamify shortcut (`launcher`): the icon runs `curl | bash` of
`releases/latest/download/setup-gamescope-boot.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`
(Valve's GPL-2.0 return icon with a gear), is a release asset too, and is
downloaded from there (Steam's icon if that fails). Desktop files are
@@ -169,8 +169,8 @@ array (e.g. `g` in `lib/state.sh`), or CI's shellcheck on the bundle fails.
There is no test suite. At minimum:
```bash
for f in setup-gamescope-boot.sh lib/*.sh; do bash -n "$f"; done
shellcheck -S warning setup-gamescope-boot.sh lib/*.sh # if available
for f in steamify.sh lib/*.sh; do bash -n "$f"; done
shellcheck -S warning steamify.sh lib/*.sh # if available
```
Behaviour is verified in a CachyOS QEMU/KVM test VM. The VM scripts and a
+6 -2
View File
@@ -2,7 +2,7 @@
All notable changes, per version and per commit. Versions follow
[Semantic Versioning](https://semver.org/); the current one is `VERSION` in
`setup-gamescope-boot.sh`. Versions before 0.7.0 were numbered afterwards,
`steamify.sh`. Versions before 0.7.0 were numbered afterwards,
one per merged pull request.
## 0.9.0 - 2026-09-24
@@ -21,12 +21,16 @@ itself on the desktop.
- `be874b8` **feat: Rename to Steamify CachyOS**
- Menu header, the shortcut ("Steamify CachyOS", menu item "Steamify
shortcut"), release titles, README and AGENTS.md.
- **chore: Repository renamed to steamify-cachyos**
- `1c34a97` **chore: Repository renamed to steamify-cachyos**
- All URLs point to `github.com/theupriser/steamify-cachyos` (the old ones
redirect). The script keeps its name, `setup-gamescope-boot.sh`, so the
old download URL keeps working; internal names such as
`~/.local/state/cachyos-gamescope-boot` stay, so existing installs can
still be turned off.
- **feat: The script is now steamify.sh**
- `setup-gamescope-boot.sh` is renamed to `steamify.sh`; releases publish the
bundle under both names, so `.../download/setup-gamescope-boot.sh` keeps
working. The Steamify shortcut runs `steamify.sh`.
## 0.8.0 - 2026-09-24 (#8)
+7 -5
View File
@@ -44,17 +44,19 @@ Everything you turn off is put back the way it was.
Open **Konsole** on your Plasma desktop and run:
```bash
curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/setup-gamescope-boot.sh | bash
curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify.sh | bash
```
That downloads and runs the latest single-file version, and works in any
(Before 0.9.0 the script was called `setup-gamescope-boot.sh`; that name
still works in the download URL.) That downloads and runs the latest
single-file version, and works in any
shell, including fish (CachyOS's default). Prefer to keep a copy, or to look
at the script first? Clone the repository instead:
```bash
git clone https://github.com/theupriser/steamify-cachyos.git
cd steamify-cachyos
./setup-gamescope-boot.sh
./steamify.sh
```
Run it as yourself, not as root. You'll see a checklist:
@@ -351,7 +353,7 @@ gamescope-session, ...) stay installed.
| File | Responsibility |
|---|---|
| `setup-gamescope-boot.sh` | Entry point: checks, menu, apply, summary, restart |
| `steamify.sh` | Entry point: checks, menu, apply, summary, restart |
| `lib/menu.sh` | The menu: detect, toggle, plan and apply changes |
| `lib/state.sh` | Undo journal for KDE settings (`kset`/`krevert`) |
| `lib/common.sh` | Output helpers, prompts, backups, plasmashell handling |
@@ -365,7 +367,7 @@ gamescope-session, ...) stay installed.
| `lib/wizard-shortcut.sh` | Steamify shortcut: desktop icon and launcher entry that run the newest release |
| `lib/bios.sh` | Update BIOS (Steam Machine, opt-in): current/newest version, double confirmation, fwupd |
| `lib/steam-machine.sh` | Steam Machine support: LED driver, LED access, steamos-manager |
| `.github/tools/bundle.sh` | Builds the single-file version (`dist/setup-gamescope-boot.sh`) |
| `.github/tools/bundle.sh` | Builds the single-file version (`dist/steamify.sh`) |
| `.github/workflows/bundle.yml` | Builds and checks it on every push; publishes it on `main` |
The single-file version is generated: on every push to `main`, GitHub
+1 -1
View File
@@ -3,7 +3,7 @@
# the newest Steam Machine BIOS from Valve's fremont-hw-support package with
# fwupd. It's an action, not an on/off component: never preselected, never
# re-applied, and there is nothing to turn off afterwards.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
BIOS_REPO_PREFIX=holo
# WIZARD_BIOS_DRY_RUN=1 walks through the whole BIOS update (download,
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Output helpers, prompts and small shared utilities.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
c_reset="\033[0m"; c_bold="\033[1m"; c_green="\033[32m"; c_yellow="\033[33m"; c_red="\033[31m"; c_cyan="\033[36m"; c_dim="\033[2m"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# "Return to Gaming Mode" desktop shortcut and the sudoers rule it needs.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
create_desktop_shortcut() {
# Determine the home directory of the target user
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Booting into gaming mode: autologin into gamescope with SDDM or
# plasma-login-manager (plus the session sync bridge the latter needs).
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
BASE_CONF="/etc/plasmalogin.conf"
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Interactive menu: detects which components are on, lets the user pick what
# they want, then turns components on or off to match.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
# Menu order. Components are turned on in this order and off in reverse;
# gaming must come first (single user builds on it).
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Required packages and AUR helper handling.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
aur_noninteractive_flags() {
# Fully non-interactive install flags for the given AUR helper: no
+1 -1
View File
@@ -3,7 +3,7 @@
# log out, since typing a password with a controller is miserable. Goes
# together with SDDM (see lib/login-manager.sh). All changes are journaled
# per user (lib/state.sh), so turning it off restores KDE's previous state.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
single_status() {
[[ "$(kreadconfig6 --file kdeglobals --group "KDE Action Restrictions" --key action/lock_screen)" == false ]]
+1 -1
View File
@@ -3,7 +3,7 @@
# off again exactly: the first time a component changes a key, the key's
# previous value is recorded, and reverting the component puts it back (or
# deletes the key if it didn't exist before).
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/cachyos-gamescope-boot"
UNSET=$'\x01'
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Steam in the Plasma desktop session: gamepad UI args, virtual keyboard,
# autostart. Part of the SteamOS conversion (gaming_enable/gaming_disable).
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
steam_enable() {
info "Applying non-optional SteamOS environment & keyboard fixes..."
+1 -1
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# "Steam Machine support" menu item, only on Valve Fremont hardware: the
# front LED bar driver, LED access for Steam, and steamos-manager.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
detect_valve_fremont() {
# Valve Steam Machine (Fremont) boards. The leds-valve driver's own DMI
+1 -1
View File
@@ -6,7 +6,7 @@
# rule and an empty KWallet. Part of the SteamOS theme component
# (lib/vapor-theme.sh). System files go to /usr/local (nothing
# package-owned); per-user settings go through the undo journal.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
VALVE_MIRROR="https://steamdeck-packages.steamos.cloud/archlinux-mirror"
NESTED_DIR=/usr/local/share/applications/steam/holo-nested-desktop
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# SteamOS Vapor desktop theme, from CachyOS's cachyos-vapor package.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
VAPOR_LOOKANDFEEL=com.valve.vapor.desktop
VAPOR_DEFAULTS=/usr/share/plasma/look-and-feel/$VAPOR_LOOKANDFEEL/contents/defaults
+2 -2
View File
@@ -2,10 +2,10 @@
# "Steamify shortcut" menu item: a desktop icon and an app launcher entry that
# open the newest release of Steamify CachyOS in Konsole (curl | bash, like the
# install command in the README), so it's never out of date.
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
# Sourced by steamify.sh; not meant to be run on its own.
WIZARD_RELEASE="https://github.com/theupriser/steamify-cachyos/releases/latest/download"
WIZARD_URL="$WIZARD_RELEASE/setup-gamescope-boot.sh"
WIZARD_URL="$WIZARD_RELEASE/steamify.sh"
# Steam logo with a gear (assets/ in the repo, published with every release).
WIZARD_ICON="${XDG_DATA_HOME:-$HOME/.local/share}/icons/hicolor/scalable/apps/cachyos-gamescope-boot-wizard.svg"
WIZARD_LAUNCHER="${XDG_DATA_HOME:-$HOME/.local/share}/cachyos-gamescope-boot/run-wizard"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
#
# setup-gamescope-boot.sh - Steamify CachyOS
# steamify.sh - Steamify CachyOS
#
# Wizard that makes a CachyOS (KDE Plasma) install behave like SteamOS:
# boot into a Steam Deck-style gamescope session, switch to the Plasma