#!/usr/bin/env bash set -u LOCATION="Norrkoping" URL="https://wttr.in/${LOCATION}?format=%t|%C" json_escape() { local s="$1" s=${s//\\/\\\\} s=${s//\"/\\\"} s=${s//$'\n'/\\n} printf '%s' "$s" } markup_escape() { local s="$1" s=${s//&/&} s=${s///>} printf '%s' "$s" } icon_markup() { local icon="$1" local color="$2" printf '%s' "$color" "$icon" } icon_for_condition() { local c c=$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]') case "$c" in *thunder*|*storm*) printf '󰖓' ;; *snow*|*sleet*|*blizzard*|*ice*) printf '󰼶' ;; *rain*|*drizzle*|*shower*) printf '󰖗' ;; *fog*|*mist*|*haze*|*smoke*) printf '󰖑' ;; *partly*) printf '󰖕' ;; *clear*|*sunny*) printf '󰖙' ;; *cloud*|*overcast*) printf '󰖐' ;; *) printf '󰖐' ;; esac } if ! command -v curl >/dev/null 2>&1; then text="--°C Unavailable $(icon_markup "󰖐" "#D08770")" printf '{"text":"%s","tooltip":"curl is required for weather","class":"weather-unavailable"}\n' "$(json_escape "$text")" exit 0 fi raw=$(curl -fsS --max-time 6 "$URL" 2>/dev/null || true) if [[ -z "$raw" || "$raw" != *"|"* ]]; then text="--°C Unavailable $(icon_markup "󰖐" "#D08770")" printf '{"text":"%s","tooltip":"Weather unavailable for Norrkoping","class":"weather-unavailable"}\n' "$(json_escape "$text")" exit 0 fi temp=${raw%%|*} condition=${raw#*|} icon=$(icon_for_condition "$condition") updated=$(date '+%H:%M') text="$(markup_escape "$temp $condition") $(icon_markup "$icon" "#88C0D0")" tooltip=$(cat <