#!/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/restore.sh" source "$GNIZA_DIR/lib/retention.sh" source "$GNIZA_DIR/lib/verify.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" source "$GNIZA_DIR/lib/ui_common.sh" source "$GNIZA_DIR/lib/ui_main.sh" source "$GNIZA_DIR/lib/ui_targets.sh" source "$GNIZA_DIR/lib/ui_remotes.sh" source "$GNIZA_DIR/lib/ui_backup.sh" source "$GNIZA_DIR/lib/ui_restore.sh" source "$GNIZA_DIR/lib/ui_snapshots.sh" source "$GNIZA_DIR/lib/ui_verify.sh" source "$GNIZA_DIR/lib/ui_retention.sh" source "$GNIZA_DIR/lib/ui_logs.sh" source "$GNIZA_DIR/lib/ui_schedule.sh" source "$GNIZA_DIR/lib/ui_settings.sh" source "$GNIZA_DIR/lib/ui_wizard.sh" # ── ASCII Logo ─────────────────────────────────────────────── show_logo() { echo "${C_GREEN}" cat <<'LOGO' ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓ LOGO echo "${C_RESET}" echo " gniza v${GNIZA4LINUX_VERSION} - Linux Backup Manager" echo "" } # ── 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 [[ -n "$SUBCOMMAND" ]]; then # Explicit subcommand: always CLI run_cli elif [[ "$FORCE_CLI" == "true" ]]; then run_cli elif command -v gum &>/dev/null && [[ -t 1 ]]; then # TUI mode show_logo if ! has_remotes && ! has_targets; then ui_first_run_wizard fi ui_main_menu else # Fallback to CLI help run_cli fi