#!/usr/bin/env bash set -euo pipefail repo="${SBP_REPO:-typist/sbp}" branch="${SBP_BRANCH:-main}" app_dir="${SBP_APP_DIR:-$HOME/.local/share/sbp/app}" bin_dir="${SBP_BIN:-$HOME/.local/bin}" url="${SBP_BASE:-https://gitea.typist.cc}/${repo}/archive/${branch}.tar.gz" command -v curl >/dev/null 2>&1 || { echo "error: curl is required" >&2; exit 1; } command -v tar >/dev/null 2>&1 || { echo "error: tar is required" >&2; exit 1; } command -v python3 >/dev/null 2>&1 || { echo "error: python3 is required" >&2; exit 1; } tmp="$(mktemp -d)" trap 'rm -rf "$tmp"' EXIT curl -fsSL "$url" | tar -xz -C "$tmp" src="$(find "$tmp" -mindepth 1 -maxdepth 1 -type d | head -n 1)" [ -n "$src" ] && [ -f "$src/sbp" ] || { echo "error: unexpected archive layout from $url" >&2; exit 1; } [ -f "$src/src/sbp/cli.py" ] || { echo "error: package files missing from $url" >&2; exit 1; } mkdir -p "$(dirname "$app_dir")" "$bin_dir" rm -rf "$app_dir.new" mv "$src" "$app_dir.new" chmod 755 "$app_dir.new/sbp" if [ -e "$app_dir" ]; then [ -f "$app_dir/src/sbp/cli.py" ] || { echo "error: refusing to replace $app_dir" >&2; exit 1; } rm -rf "$app_dir" fi mv "$app_dir.new" "$app_dir" ln -sfn "$app_dir/sbp" "$bin_dir/sbp" echo "installed $bin_dir/sbp" case ":$PATH:" in *":$bin_dir:"*) ;; *) echo "note: add $bin_dir to PATH, for example: export PATH=\"$bin_dir:\$PATH\"" ;; esac if [ "${1:-}" = "--run" ]; then exec "$bin_dir/sbp" install "${@:2}" fi