diff --git a/pkgsync/pkgsync.sh b/pkgsync/pkgsync.sh index f392ec2..d17ee2c 100644 --- a/pkgsync/pkgsync.sh +++ b/pkgsync/pkgsync.sh @@ -29,6 +29,12 @@ OVERRIDES_FILE="$METAPAC_CONFIG_DIR/groups/overrides.local.toml" # borra en el primer push que vuelve a tener éxito. FAIL_MARKER="$HOME/.local/share/pkgsync.failed" +# Token de Gotify (push.josevi.ovh, mismo servidor que usa WUD) para avisos +# de fallo -- llega también sin sesión gráfica, a diferencia de notify-send. +# Fichero local-only, nunca tracked (ni chezmoi ni el repo arch-setup): +# mismo criterio que OVERRIDES_FILE. Si no existe, se omite sin más. +GOTIFY_ENV="$HOME/.config/pkgsync/gotify.env" + # flatpak sin --user/--system instala en "system" con la config actual de # install_flatpaks() en packages-common.sh. Si tu máquina usa --user, cambia # esto (o verifica con: flatpak list --columns=installation,application). @@ -235,6 +241,22 @@ notify_fail() { echo "!! $1: $2" >&2 printf '%s -- %s: %s\n' "$(date -Iseconds)" "$1" "$2" >"$FAIL_MARKER" command -v notify-send &>/dev/null && timeout 5 notify-send --app-name=pkgsync --urgency=critical "$1" "$2" + notify_gotify "$1" "$2" +} + +# Best-effort, nunca bloquea ni hace fallar el caller: mismo espíritu que el +# timeout de notify-send de arriba, pero via HTTPS -- llega aunque D-Bus/la +# sesión gráfica ya esté cayéndose (caso ExecStop en apagado) o no haya +# sesión gráfica en absoluto. +notify_gotify() { + [[ -f "$GOTIFY_ENV" ]] || return 0 + local GOTIFY_URL GOTIFY_TOKEN + # shellcheck disable=SC1090 + source "$GOTIFY_ENV" + [[ -n "${GOTIFY_URL:-}" && -n "${GOTIFY_TOKEN:-}" ]] || return 0 + timeout 10 curl -fsS --max-time 8 \ + -F "title=$1" -F "message=$2" -F "priority=8" \ + "${GOTIFY_URL%/}/message?token=${GOTIFY_TOKEN}" >/dev/null 2>&1 } # --- subcomandos -------------------------------------------------------------- @@ -284,6 +306,19 @@ EOF echo ">> scaffold de $OVERRIDES_FILE creado (vacío, edítalo a mano)" fi + if [[ ! -f "$GOTIFY_ENV" ]]; then + mkdir -p "$(dirname "$GOTIFY_ENV")" + cat >"$GOTIFY_ENV" <<'EOF' +# Token de aplicación Gotify para los avisos de fallo de pkgsync (push.josevi.ovh). +# Crea una Application nueva en la UI de Gotify y pega su token aquí. +# Fichero local-only: pkgsync nunca lo lee/escribe salvo aquí, no viaja al repo. +#GOTIFY_URL="https://push.josevi.ovh" +#GOTIFY_TOKEN="pon-aqui-el-token" +EOF + chmod 600 "$GOTIFY_ENV" + echo ">> scaffold de $GOTIFY_ENV creado (comentado, edítalo a mano para activar avisos por Gotify)" + fi + if [[ ! -d "$REPO_DIR/.git" ]]; then echo ">> clonando arch-setup en $REPO_DIR..." git clone "$REPO_URL" "$REPO_DIR"