Bundle gum binary with gniza installation
- Install script auto-downloads gum from GitHub releases into $INSTALL_DIR/bin/gum (supports x86_64, arm64, armv7, i386) - Skips download if gum is already installed system-wide - bin/gniza adds $GNIZA_DIR/bin to PATH so bundled gum is found - No system package installation required Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -65,7 +65,9 @@ Root mode installs to `/usr/local/gniza`. User mode installs to `~/.local/share/
|
||||
### Dependencies
|
||||
|
||||
- **Required**: bash 4+, rsync
|
||||
- **Optional**: ssh, [gum](https://github.com/charmbracelet/gum) (TUI), curl (SMTP notifications), rclone (S3/GDrive)
|
||||
- **Optional**: ssh, curl (SMTP notifications), rclone (S3/GDrive)
|
||||
|
||||
> **Note**: [gum](https://github.com/charmbracelet/gum) (TUI engine) is automatically downloaded during installation.
|
||||
|
||||
## Quick Start
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ set -euo pipefail
|
||||
GNIZA_DIR="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/.." && pwd)"
|
||||
export GNIZA_DIR
|
||||
|
||||
# Add bundled binaries (gum) to PATH if present
|
||||
[[ -d "$GNIZA_DIR/bin" ]] && export PATH="$GNIZA_DIR/bin:$PATH"
|
||||
|
||||
# ── Source libraries in dependency order ─────────────────────
|
||||
source "$GNIZA_DIR/lib/constants.sh"
|
||||
source "$GNIZA_DIR/lib/utils.sh"
|
||||
|
||||
@@ -68,12 +68,61 @@ for cmd in bash rsync; do
|
||||
fi
|
||||
done
|
||||
|
||||
for cmd in ssh gum curl; do
|
||||
for cmd in ssh curl; do
|
||||
if ! command -v "$cmd" &>/dev/null; then
|
||||
warn "Optional dependency not found: $cmd"
|
||||
fi
|
||||
done
|
||||
|
||||
# ── Install bundled gum binary ───────────────────────────────
|
||||
GUM_VERSION="0.17.0"
|
||||
|
||||
_detect_arch() {
|
||||
local arch; arch=$(uname -m)
|
||||
case "$arch" in
|
||||
x86_64) echo "x86_64" ;;
|
||||
aarch64) echo "arm64" ;;
|
||||
armv7*) echo "armv7" ;;
|
||||
i386|i686) echo "i386" ;;
|
||||
*) echo "" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
if command -v gum &>/dev/null; then
|
||||
info "gum already installed: $(command -v gum)"
|
||||
else
|
||||
GUM_ARCH=$(_detect_arch)
|
||||
if [[ -n "$GUM_ARCH" ]] && command -v curl &>/dev/null; then
|
||||
GUM_URL="https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_Linux_${GUM_ARCH}.tar.gz"
|
||||
info "Downloading gum v${GUM_VERSION} (${GUM_ARCH})..."
|
||||
GUM_TMP=$(mktemp -d)
|
||||
if curl -fsSL "$GUM_URL" | tar xz -C "$GUM_TMP" 2>/dev/null; then
|
||||
mkdir -p "$INSTALL_DIR/bin"
|
||||
# The tarball extracts to a subdirectory
|
||||
if [[ -f "$GUM_TMP/gum_${GUM_VERSION}_Linux_${GUM_ARCH}/gum" ]]; then
|
||||
cp "$GUM_TMP/gum_${GUM_VERSION}_Linux_${GUM_ARCH}/gum" "$INSTALL_DIR/bin/gum"
|
||||
elif [[ -f "$GUM_TMP/gum" ]]; then
|
||||
cp "$GUM_TMP/gum" "$INSTALL_DIR/bin/gum"
|
||||
fi
|
||||
if [[ -f "$INSTALL_DIR/bin/gum" ]]; then
|
||||
chmod +x "$INSTALL_DIR/bin/gum"
|
||||
info "Installed gum to $INSTALL_DIR/bin/gum"
|
||||
else
|
||||
warn "Failed to locate gum binary in archive"
|
||||
fi
|
||||
else
|
||||
warn "Failed to download gum (TUI will not be available)"
|
||||
fi
|
||||
rm -rf "$GUM_TMP"
|
||||
else
|
||||
if [[ -z "${GUM_ARCH:-}" ]]; then
|
||||
warn "Unsupported architecture for gum: $(uname -m)"
|
||||
else
|
||||
warn "curl not found, cannot download gum (TUI will not be available)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── Install files ────────────────────────────────────────────
|
||||
info "Installing to $INSTALL_DIR..."
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
@@ -140,5 +189,5 @@ echo " Logs: $LOG_DIR"
|
||||
echo ""
|
||||
echo "Get started:"
|
||||
echo " gniza --help Show CLI help"
|
||||
echo " gniza Launch TUI (requires gum)"
|
||||
echo " gniza Launch TUI"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user