Files
steamify-cachyos/tools/bundle.sh
T
theupriser d654d44b6a fix: Single-file build for curl, published by GitHub Actions
tools/bundle.sh inlines lib/ into one script; the workflow builds and
checks it on every push and PR, and on main publishes it to the rolling
"latest" release. Piped in via curl, it reattaches the terminal so the
menu keeps working.
2026-09-23 15:37:06 +02:00

50 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# Build a single-file version of the wizard for `curl | bash` use:
# tools/bundle.sh [output] (default: dist/setup-gamescope-boot.sh)
#
# Inlines lib/*.sh in the order setup-gamescope-boot.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
mkdir -p "$(dirname "$out")"
# Library order, taken from the entry point's source loop.
libs=$(grep -oP '^for lib in \K.*(?=; do$)' "$entry")
[[ -n "$libs" ]] || { echo "bundle: can't find the lib source loop in $entry" >&2; exit 1; }
version="$(git describe --always --dirty 2>/dev/null || echo unknown)"
{
# Header comment and `set` line of the entry point, up to the source loop.
sed -n '1,/^SCRIPT_DIR=/p' "$entry" | sed '$d'
echo "# Single-file build ($version), generated by tools/bundle.sh - edit the"
echo "# sources in the repository instead: https://github.com/theupriser/cachyos-gamescope-boot"
echo
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"
echo
done
echo "# ----- setup-gamescope-boot.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/^ $//'
echo "}"
echo
echo "# Piped in via curl, bash reads this very file from stdin. Give the menu"
echo "# the terminal instead - on the same line as main and exit: bash has read"
echo "# this line in full, so it never reads further script from the terminal."
echo 'reattach_tty() { if [[ ! -t 0 && -z "${WIZARD_KEEP_STDIN:-}" ]]; then { exec </dev/tty; } 2>/dev/null || true; fi; }'
echo 'reattach_tty; main "$@"; exit $?'
} > "$out"
chmod +x "$out"
bash -n "$out"
echo "Wrote $out ($version)"