#!/usr/bin/env bash # ===================================================================== # ZION TERMINAL - Painel principal (dashboard) # Cyberdeck criado por Pablo Murad em 2026 # Menu agrupado, consciente de largura, Ctrl+C limpo. # ===================================================================== export LC_ALL=C ZION_DIR="/opt/zion-terminal"; BIN="$ZION_DIR/bin" . "$BIN/zion-lib.sh" 2>/dev/null trap 'tput cnorm 2>/dev/null; printf "%b" "$ZR"; echo; exit 0' INT TERM pausa() { printf '\n %bEnter para voltar…%b' "$ZGRY" "$ZR"; read -r _; } ver=$(cat "$ZION_DIR/VERSION" 2>/dev/null) topo() { clear 2>/dev/null local cols; cols=$(ui_cols) if [ "$cols" -ge 42 ] && [ -r "$ZION_DIR/assets/ascii/logo-compacta.txt" ]; then printf '%b' "$ZP$ZB"; sed 's/^/ /' "$ZION_DIR/assets/ascii/logo-compacta.txt"; printf '%b' "$ZR" else printf ' %b%s ZION TERMINAL%b\n' "$ZP$ZB" "$ZSYM" "$ZR"; fi printf ' %bv%s%b · %btema %s%b · %b%s%b\n' "$ZDISC" "${ver:-?}" "$ZR" "$ZDISC" "${ZION_TEMA:-ice}" "$ZR" "$ZDISC" "$(date '+%d/%m %H:%M')" "$ZR" "$BIN/zion-status" 2>/dev/null ui_rule } # item: "N|Rotulo" -> renderiza 1 ou 2 colunas conforme largura grupo() { local titulo="$1"; shift printf ' %b%s%b\n' "$ZS$ZB" "$titulo" "$ZR" local cols; cols=$(ui_cols); local dois=0; [ "$cols" -ge 74 ] && dois=1 local i=0 n1 l1 n2 l2 while [ $# -gt 0 ]; do n1="${1%%|*}"; l1="${1#*|}"; shift if [ "$dois" = 1 ] && [ $# -gt 0 ]; then n2="${1%%|*}"; l2="${1#*|}"; shift printf ' %b%2s%b %-26s %b%2s%b %s\n' "$ZA" "$n1" "$ZR" "$l1" "$ZA" "$n2" "$ZR" "$l2" else printf ' %b%2s%b %s\n' "$ZA" "$n1" "$ZR" "$l1" fi done } menu() { grupo "OPERACAO" "1|Estado do sistema" "2|Saude" "3|Doctor (autoteste)" "4|War-room (panico)" grupo "CONECTIVIDADE" "5|Tailscale" "6|Radar de peers" "7|Mapa do tailnet" "8|SSH" "9|Rede" "10|DNS" "11|Link (resumo)" grupo "MANUTENCAO" "12|Armazenamento" "13|Servicos" "14|Atualizacoes" "15|Backups" "16|Logs" grupo "FERRAMENTAS" "17|Tmux" "18|Git e projetos" "19|Compartilhar arquivos" "20|QR de acesso" "21|Manual" "22|Logbook" grupo "SISTEMA" "23|Modo de operacao" "24|Tema" "25|Travar" "26|Informacoes" "0|Sair para o shell" } estado_sistema() { topo; "$BIN/zion-health" 2>/dev/null local csv="$ZION_DIR/logs/metricas.csv" if [ -r "$csv" ]; then ui_section "HISTORICO (ultimas amostras)" printf ' %bTemp%b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f2 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR" printf ' %bCPU %b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f3 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR" printf ' %bRAM %b %b%s%b\n' "$ZDISC" "$ZR" "$ZP" "$(cut -d, -f4 "$csv" | tail -40 | zion_sparkline $(cat))" "$ZR" fi pausa } ferramentas_rede_dns() { topo; ui_header "DIAGNOSTICO DNS" for h in deb.debian.org google.com "$(hostname)"; do printf ' %b%-22s%b %b\n' "$ZWHT" "$h" "$ZR" "$(getent hosts "$h" >/dev/null 2>&1 && ui_state ok || ui_state crit)" done ui_kv "Servidores" "$(grep -h ^nameserver /etc/resolv.conf | awk '{print $2}' | tr '\n' ' ')"; pausa } git_projetos() { topo; ui_header "GIT E PROJETOS"; local found=0 for d in "$HOME"/* "$HOME"/projetos/*; do [ -d "$d/.git" ] || continue; found=1 ui_kv "$(basename "$d")" "$(git -C "$d" branch --show-current 2>/dev/null)"; done [ "$found" = 0 ] && ui_info "Nenhum repositorio Git em ~"; pausa } while true; do topo; menu ui_rule printf ' %b%s zion»%b ' "$ZP$ZB" "$ZSYM" "$ZR"; read -r opt case "$opt" in 1) estado_sistema ;; 2) topo; "$BIN/zion-health"; pausa ;; 3) topo; "$BIN/zion-doctor"; pausa ;; 4) "$BIN/zion-panic" ;; 5) topo; "$BIN/zion-tailscale"; pausa ;; 6) topo; "$BIN/zion-radar"; pausa ;; 7) topo; "$BIN/zion-map"; pausa ;; 8) topo; "$BIN/zion-ssh" ;; 9) topo; "$BIN/zion-net"; pausa ;; 10) ferramentas_rede_dns ;; 11) topo; "$BIN/zion-link"; pausa ;; 12) topo; ui_header "ARMAZENAMENTO"; df -h / /boot 2>/dev/null | sed 's/^/ /'; command -v ncdu >/dev/null && echo " (dica: ncdu /)"; pausa ;; 13) topo; ui_header "SERVICOS"; ui_kv "Rodando" "$(systemctl list-units --type=service --state=running --no-legend | wc -l)"; ui_kv "Falhas" "$(zion_falhas)"; systemctl --failed --no-legend | sed 's/^/ /'; pausa ;; 14) topo; "$BIN/zion-update"; pausa ;; 15) topo; "$BIN/zion-backup"; pausa ;; 16) topo; "$BIN/zion-logs" ;; 17) exec zion tmux ;; 18) git_projetos ;; 19) topo; "$BIN/zion-serve" --help; ui_info "Rode: zion servir [dir]"; pausa ;; 20) topo; "$BIN/zion-qr"; pausa ;; 21) "$BIN/zion-book" ;; 22) topo; "$BIN/zion-log" --ver ;; 23) topo; "$BIN/zion-modo"; pausa ;; 24) topo; "$BIN/zion-theme"; pausa ;; 25) "$BIN/zion-lock" ;; 26) topo; "$BIN/zion-info"; pausa ;; 0|q|sair) clear 2>/dev/null; printf ' %b%s Terminal operacional. Ate logo.%b\n' "$ZP" "$ZSYM" "$ZR"; exit 0 ;; *) ;; esac done