#!/bin/bash # Sea Surface Temperature Anomaly Monitor # Tracks global SST anomalies from NOAA Coral Reef Watch # Alias: sst export DISPLAY=:0 # URLs - NOAA Coral Reef Watch 5km SST Anomaly (v3.1) url_global="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/daily/png/ct5km_ssta_v3.1_global_current.png" url_pacific="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/daily/png/ct5km_ssta_v3.1_pacific_current.png" url_atlantic="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/daily/png/ct5km_ssta_v3.1_satlantic_current.png" url_indian="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/daily/png/ct5km_ssta_v3.1_indian_current.png" url_tropics="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/daily/png/ct5km_ssta_v3.1_tropics_current.png" # Animated GIFs (30-day) url_global_anim="https://coralreefwatch.noaa.gov/data_current/5km/v3.1_op/animation/gif/ssta_animation_30day_large.gif" # Climate Reanalyzer for time series url_timeseries="https://climatereanalyzer.org/clim/sst_daily/vis/osst_bar_ssta_globe.svg" # Cache locations cache_dir="$HOME/.cache/maritime/sst" cache_global="$cache_dir/global.png" cache_pacific="$cache_dir/pacific.png" cache_atlantic="$cache_dir/atlantic.png" cache_indian="$cache_dir/indian.png" cache_tropics="$cache_dir/tropics.png" cache_global_anim="$cache_dir/global_anim.gif" cache_timeseries="$cache_dir/timeseries.svg" # Ensure cache dir exists mkdir -p "$cache_dir" # Update all SST data update() { echo "Updating SST anomaly data..." curl -sLo "$cache_global" "$url_global" & curl -sLo "$cache_pacific" "$url_pacific" & curl -sLo "$cache_atlantic" "$url_atlantic" & curl -sLo "$cache_indian" "$url_indian" & curl -sLo "$cache_tropics" "$url_tropics" & curl -sLo "$cache_global_anim" "$url_global_anim" & curl -sLo "$cache_timeseries" "$url_timeseries" & wait notify-send -t 3000 -i "$cache_global" "SST Anomaly Updated" "All ocean basins refreshed" } # Show images in mpv images() { local target="$cache_global" case "$1" in p*|P*) target="$cache_pacific" ;; a*|A*) target="$cache_atlantic" ;; i*|I*) target="$cache_indian" ;; t*) target="$cache_timeseries" ;; esac setsid -f mpv --title="SST Anomaly" --idle --autofit=70% \ --loop-file=inf "$target" } # Show all images images_all() { setsid -f mpv --title="SST Anomaly - All Basins" --idle --autofit=60% \ --loop-playlist --image-display-duration=5 \ "$cache_global" "$cache_pacific" "$cache_atlantic" "$cache_indian" "$cache_timeseries" } # Display help help() { cat << EOF Sea Surface Temperature Anomaly Monitor Usage: sst [OPTION] Options: update, u Update all SST data from NOAA images, i Show global SST anomaly image -p, pacific Show Pacific basin -a, atlantic Show Atlantic basin -i, indian Show Indian basin -t, time Show time series all Show all basins in slideshow help, h Show this help Data Source: NOAA Coral Reef Watch 5km SST Anomaly Climate Reanalyzer Daily SST EOF } # Status bar output tobar() { echo "SST" } # Handle arguments case "$1" in u*) update ;; i*) shift images "$1" ;; all) images_all ;; h*|--help) help ;; "") tobar ;; *) help ;; esac # Status bar click handlers case $BLOCK_BUTTON in 1) notify-send -t 60000 -i "$cache_global" "SST Anomaly - Global" "Left-click: Global | Right-click: Pacific | Scroll: Atlantic/Indian" ;; 2) update ;; 3) notify-send -t 60000 -i "$cache_pacific" "SST Anomaly - Pacific" "Middle-click to refresh data" ;; 4) notify-send -t 60000 -i "$cache_atlantic" "SST Anomaly - Atlantic" "" ;; 5) notify-send -t 60000 -i "$cache_indian" "SST Anomaly - Indian" "" ;; 6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; esac