#!/usr/bin/env bash set -euo pipefail # ── Resolve GNIZA_DIR ──────────────────────────────────────── GNIZA_DIR="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/.." && pwd)" export GNIZA_DIR # ── Source libraries in dependency order ───────────────────── source "$GNIZA_DIR/lib/constants.sh" source "$GNIZA_DIR/lib/utils.sh" detect_mode source "$GNIZA_DIR/lib/logging.sh" source "$GNIZA_DIR/lib/config.sh" source "$GNIZA_DIR/lib/locking.sh" source "$GNIZA_DIR/lib/targets.sh" source "$GNIZA_DIR/lib/remotes.sh" source "$GNIZA_DIR/lib/backup.sh" source "$GNIZA_DIR/lib/mysql.sh" source "$GNIZA_DIR/lib/restore.sh" source "$GNIZA_DIR/lib/retention.sh" source "$GNIZA_DIR/lib/schedule.sh" source "$GNIZA_DIR/lib/notify.sh" source "$GNIZA_DIR/lib/ssh.sh" source "$GNIZA_DIR/lib/rclone.sh" source "$GNIZA_DIR/lib/snapshot.sh" source "$GNIZA_DIR/lib/transfer.sh" # ── Help ───────────────────────────────────────────────────── show_help() { cat </dev/null | head -1) if [[ -z "$latest" ]]; then echo "No log files found." else if [[ -n "$tail_n" ]]; then tail -n "$tail_n" "$latest" else cat "$latest" fi fi else ls -lt "$log_dir"/gniza-*.log 2>/dev/null || echo "No log files found." fi ;; version) echo "gniza v${GNIZA4LINUX_VERSION}" ;; "") show_help ;; *) die "Unknown command: $SUBCOMMAND (see --help)" ;; esac } # ── Mode selection ─────────────────────────────────────────── if [[ "$SUBCOMMAND" == "web" || " $* " == *" --web "* ]]; then # Web GUI mode PYTHONPATH="$GNIZA_DIR:${PYTHONPATH:-}" exec python3 -m tui --web "$@" elif [[ -n "$SUBCOMMAND" ]]; then # Explicit subcommand: always CLI run_cli elif [[ "$FORCE_CLI" == "true" ]]; then run_cli elif python3 -c "import textual" 2>/dev/null && [[ -t 1 ]]; then # Python Textual TUI mode PYTHONPATH="$GNIZA_DIR:${PYTHONPATH:-}" exec python3 -m tui "$@" else # Fallback to CLI help run_cli fi