Initial commit
This commit is contained in:
Executable
+76
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellbound installer -- checks prerequisites, installs the CLI, and verifies.
|
||||
# Usage: bash install.sh
|
||||
set -euo pipefail
|
||||
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
say() { printf 'install: %s\n' "$*"; }
|
||||
die() { printf 'install: ERROR: %s\n' "$*" >&2; exit 1; }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Prerequisites
|
||||
# ---------------------------------------------------------------------------
|
||||
command -v python3 >/dev/null 2>&1 || die "python3 is required but not on PATH"
|
||||
if ! python3 - <<'PY'
|
||||
import sys
|
||||
sys.exit(0 if sys.version_info >= (3, 10) else 1)
|
||||
PY
|
||||
then
|
||||
die "python3 >= 3.10 is required (found: $(python3 --version 2>&1))"
|
||||
fi
|
||||
say "python3 OK ($(python3 --version 2>&1))"
|
||||
|
||||
if ! python3 -m pip --version >/dev/null 2>&1; then
|
||||
die "pip is required but 'python3 -m pip' fails; install pip first"
|
||||
fi
|
||||
say "pip OK"
|
||||
|
||||
CLIP=""
|
||||
for t in xclip wl-copy pbcopy xsel; do
|
||||
if command -v "$t" >/dev/null 2>&1; then CLIP="$t"; break; fi
|
||||
done
|
||||
if [ -z "$CLIP" ]; then
|
||||
say "note: no clipboard backend found (xclip/wl-copy/pbcopy/xsel);"
|
||||
say " --copy/--paste will be unavailable until one is installed."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Install
|
||||
# ---------------------------------------------------------------------------
|
||||
say "installing from $DIR ..."
|
||||
if [ -n "${VIRTUAL_ENV:-}" ]; then
|
||||
python3 -m pip install "$DIR"
|
||||
else
|
||||
say "installing to the user site-packages ..."
|
||||
if ! python3 -m pip install --user "$DIR"; then
|
||||
say "user-site install failed; retrying with --break-system-packages (PEP 668) ..."
|
||||
python3 -m pip install --user --break-system-packages "$DIR" \
|
||||
|| die "pip install failed (see output above)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Verify
|
||||
# ---------------------------------------------------------------------------
|
||||
say "verifying install ..."
|
||||
python3 -m shellbound --version >/dev/null 2>&1 \
|
||||
|| die "installed but 'python3 -m shellbound --version' failed"
|
||||
|
||||
BINDIR=""
|
||||
if [ -d "${VIRTUAL_ENV:-}" ] && [ -x "$VIRTUAL_ENV/bin/shellbound" ]; then
|
||||
BINDIR="$VIRTUAL_ENV/bin"
|
||||
elif [ -x "$HOME/.local/bin/shellbound" ]; then
|
||||
BINDIR="$HOME/.local/bin"
|
||||
fi
|
||||
|
||||
if [ -n "$BINDIR" ]; then
|
||||
if ! "$BINDIR/shellbound" --version >/dev/null 2>&1; then
|
||||
say "note: the 'shellbound' command is at $BINDIR but is not on PATH;"
|
||||
say " add it with: export PATH=\"$BINDIR:\$PATH\""
|
||||
fi
|
||||
else
|
||||
say "note: the 'shellbound' console script may not be on PATH; try:"
|
||||
say " export PATH=\"$HOME/.local/bin:\$PATH\""
|
||||
fi
|
||||
|
||||
say "done. Next: run 'shellbound setup' to configure the gateway and API key."
|
||||
Reference in New Issue
Block a user