Add live weather (#5633)
* Add live weather * Just use jq * Add Weather app and make it click target * Simplify * Looks better * Nicer flow * Simplify * Move to using the notification instead of tooltip * No longer needed
This commit is contained in:
@@ -69,6 +69,7 @@ GROUP_DESCRIPTIONS[tz]="Timezone selection"
|
||||
GROUP_DESCRIPTIONS[update]="Omarchy and system updates"
|
||||
GROUP_DESCRIPTIONS[version]="Version and channel information"
|
||||
GROUP_DESCRIPTIONS[voxtype]="Voxtype dictation"
|
||||
GROUP_DESCRIPTIONS[weather]="Weather status"
|
||||
GROUP_DESCRIPTIONS[webapp]="Web app launchers"
|
||||
GROUP_DESCRIPTIONS[wifi]="Wi-Fi helpers"
|
||||
GROUP_DESCRIPTIONS[windows]="Windows VM management"
|
||||
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Returns a weather condition icon, adjusted for live sunrise and sunset.
|
||||
|
||||
weather_data=$(curl -fsS --max-time 3 "https://wttr.in?format=j1" 2>/dev/null | jq -er '[.current_condition[0].weatherCode, .weather[0].astronomy[0].sunrise, .weather[0].astronomy[0].sunset] | select(all(. != null and . != "")) | @tsv' 2>/dev/null) || exit 1
|
||||
|
||||
IFS=$'\t' read -r weather_code sunrise sunset <<< "$weather_data"
|
||||
if [[ ! $weather_code =~ ^[0-9]+$ || ! $sunrise =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ || ! $sunset =~ ^[0-9]{1,2}:[0-9]{2}\ [AP]M$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
now_epoch=$(date +%s)
|
||||
sunrise_epoch=$(date -d "today $sunrise" +%s 2>/dev/null || echo 0)
|
||||
sunset_epoch=$(date -d "today $sunset" +%s 2>/dev/null || echo 0)
|
||||
|
||||
if (( sunrise_epoch > 0 && sunset_epoch > 0 && (now_epoch < sunrise_epoch || now_epoch >= sunset_epoch) )); then
|
||||
night=true
|
||||
else
|
||||
night=false
|
||||
fi
|
||||
|
||||
case $weather_code in
|
||||
113) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
116) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
119|122) icon="" ;;
|
||||
143|248|260) icon="" ;;
|
||||
176|263|266|293|296|353) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
179|227|230|323|326|368) [[ $night == "true" ]] && icon="" || icon="" ;;
|
||||
182|185|281|284|311|314|317|320|350|362|365|374|377) icon="" ;;
|
||||
200|386|389|392|395) icon="" ;;
|
||||
299|302|305|308|356|359) icon="" ;;
|
||||
329|332|335|338|371) icon="" ;;
|
||||
*) icon="" ;;
|
||||
esac
|
||||
|
||||
printf '%s\n' "$icon"
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Returns a formatted weather status string with temperature and wind speed.
|
||||
|
||||
weather=$(curl -fsS --max-time 4 "https://wttr.in?format=%l|%t|%w" 2>/dev/null | tr -d '\n')
|
||||
|
||||
if [[ -z $weather ]]; then
|
||||
echo "Weather unavailable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IFS='|' read -r place temperature wind <<< "$weather"
|
||||
place=${place%%,*}
|
||||
place=${place^}
|
||||
format_temperature() {
|
||||
local celsius=${1#+}
|
||||
celsius=${celsius//°/}
|
||||
celsius=${celsius%C}
|
||||
|
||||
echo "${celsius}°c / $((celsius * 9 / 5 + 32))°f"
|
||||
}
|
||||
|
||||
temperature=$(format_temperature "$temperature")
|
||||
wind=${wind//km\// km/}
|
||||
|
||||
echo "$(omarchy-weather-icon) $place · Temperature $temperature · Wind $wind"
|
||||
Reference in New Issue
Block a user