From 98dec052ad0be4c970a1476ed41c4f6215969202 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Mon, 25 May 2026 12:29:04 +0200 Subject: [PATCH] feat(boot): farget PS1-prompt med OSVauco-statusindikator --- scripts/osvauco-opax-boot.sh | 75 ++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/scripts/osvauco-opax-boot.sh b/scripts/osvauco-opax-boot.sh index d469906..15dcc42 100644 --- a/scripts/osvauco-opax-boot.sh +++ b/scripts/osvauco-opax-boot.sh @@ -56,14 +56,42 @@ alias roadmap='cat ~/OSVauco/docs/VAUCO_OS_ROADMAP.md' alias session-log='cat ~/OSVauco/docs/OSVAUCO_OPAX_SESSION_LOG.md' # ============================================================================= -# PROMPT_COMMAND — logger hver terminal-kommando med tidsstempel til session-log +# PROMPT_COMMAND — logger + PS1-statusindikator # ============================================================================= export OSVAUCO_SESSION_LOG="$SESSION_LOG" export OSVAUCO_SESSION_ID="$SESSION_ID" +export OSVAUCO_DIR="$OSVAUCO_DIR" _opax_last_cmd='' trap '_opax_last_cmd=$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//")' DEBUG +# Beregn OSVauco-status for PS1 (kjører raskt, ingen nettverkskall) +_opax_ps1_status() { + local state=0 # 0=OK, 1=warn, 2=fail + + # Auth: gcloud + if ! gcloud auth print-access-token >/dev/null 2>&1; then state=2; fi + + # Repo sync + local local_sha remote_sha + local_sha=$(git -C "$OSVAUCO_DIR" rev-parse --short HEAD 2>/dev/null || echo "") + remote_sha=$(git -C "$OSVAUCO_DIR" ls-remote origin refs/heads/main 2>/dev/null | cut -c1-7 || echo "") + if [[ -n "$remote_sha" && "$local_sha" != "$remote_sha" ]]; then + [[ $state -lt 1 ]] && state=1 + fi + + # GDrive mirror + if [[ -f "$OSVAUCO_DIR/.gdrive-mirror-state" ]]; then + local last_sha + last_sha=$(grep '^LAST_SHA=' "$OSVAUCO_DIR/.gdrive-mirror-state" | cut -d= -f2-) + if [[ "$last_sha" != "$local_sha" ]]; then + [[ $state -lt 1 ]] && state=1 + fi + fi + + echo $state +} + _opax_log_cmd() { local exit_code=$? local cmd="$_opax_last_cmd" @@ -78,11 +106,53 @@ _opax_log_cmd() { _opax_last_cmd='' } +# PS1: ❱ OSVauco ❱ i grønn/gul/rød + git-branch + sti + $ +# Format: +# \n ❱ OSVauco ❱ git:(main) ~/OSVauco +# $ _ +_opax_set_ps1() { + local state + state=$(_opax_ps1_status) + + # ANSI escape-koder for PS1 (må være i \[ \] for korrekt linjelengde) + local C_GREEN='\[\033[01;32m\]' + local C_LGREEN='\[\033[38;5;82m\]' # lys grønn (glow-effekt) + local C_YELLOW='\[\033[01;33m\]' + local C_RED='\[\033[01;31m\]' + local C_CYAN='\[\033[01;36m\]' + local C_DIM='\[\033[2;37m\]' + local C_BOLD='\[\033[1m\]' + local C_NC='\[\033[0m\]' + + local badge_color + case $state in + 0) badge_color="$C_LGREEN" ;; # alt OK — lys grønn + 1) badge_color="$C_YELLOW" ;; # advarsel — gul + 2) badge_color="$C_RED" ;; # feil — rød + esac + + # Git-branch (stille hvis ikke i repo) + local git_info='' + local branch + branch=$(git -C "$OSVAUCO_DIR" branch --show-current 2>/dev/null || echo "") + [[ -n "$branch" ]] && git_info=" ${C_DIM}git:(${C_CYAN}${branch}${C_DIM})${C_NC}" + + PS1="\n${badge_color}❱ OSVauco ❱${C_NC}${git_info} ${C_DIM}\w${C_NC}\n${badge_color}\$${C_NC} " +} + if [[ "${PROMPT_COMMAND}" != *"_opax_log_cmd"* ]]; then - PROMPT_COMMAND="_opax_log_cmd${PROMPT_COMMAND:+; $PROMPT_COMMAND}" + PROMPT_COMMAND="_opax_log_cmd; _opax_set_ps1${PROMPT_COMMAND:+; $PROMPT_COMMAND}" +else + # Legg til PS1-oppdatering hvis den mangler + if [[ "${PROMPT_COMMAND}" != *"_opax_set_ps1"* ]]; then + PROMPT_COMMAND="${PROMPT_COMMAND}; _opax_set_ps1" + fi fi export PROMPT_COMMAND +# Sett PS1 umiddelbart ved boot +_opax_set_ps1 + # ============================================================================= # Load nvm # ============================================================================= @@ -158,7 +228,6 @@ printf "\n" # ============================================================================= # SECTION 2: OPAX HEALTH -# Bruker /health (autentisert) — appen har ikke /ping # ============================================================================= printf "${BOLD}${CYAN} [ OPAX HEALTH ]${NC}\n" HEALTH_URL="https://opax.vauco.no/health"