#!/usr/bin/env bash set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' info() { echo -e "${GREEN}[+]${NC} $*"; } die() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; } header() { echo -e "\n${CYAN}══════════════════════════════════════════${NC}"; echo -e "${CYAN} $*${NC}"; echo -e "${CYAN}══════════════════════════════════════════${NC}"; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" header "TinyBoard Setup" echo "" echo " 0) Reconfigure network" echo " 1) Set up this device as a new spoke" echo " 2) Onboard a new spoke from the hub" echo " 3) Offboard a spoke from the hub" echo " 4) Set up this device as a new hub" echo "" read -rp "Choose [0/1/2/3/4]: " CHOICE case "$CHOICE" in 0) [ "$(id -u)" -eq 0 ] || die "Network reconfiguration must be run as root" info "Starting network reconfiguration..." exec "$SCRIPT_DIR/spoke/setup-network.sh" ;; 1) [ "$(id -u)" -eq 0 ] || die "Spoke setup must be run as root" info "Starting spoke setup..." exec "$SCRIPT_DIR/spoke/setup-spoke.sh" ;; 2) info "Starting hub onboarding..." exec "$SCRIPT_DIR/hub/onboard-spoke.sh" ;; 3) info "Starting hub offboarding..." exec "$SCRIPT_DIR/hub/offboard-spoke.sh" ;; 4) [ "$(id -u)" -eq 0 ] || die "Hub setup must be run as root" info "Starting hub setup..." exec "$SCRIPT_DIR/hub/setup-hub.sh" ;; *) die "Invalid choice" ;; esac