89 lines
1.8 KiB
Bash
Executable File
89 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Displays todays precipication chance () and daily low () and high ().
|
|
# Usually intended for the statusbar.
|
|
|
|
# If we have internet, get a weather report from wttr.in and store it locally.
|
|
# You could set up a shell alias to view the full file in a pager in the
|
|
# terminal if desired. This function will only be run once a day when needed.
|
|
weather_report="${XDG_DATA_HOME:-$HOME/.local/share}/weather_report"
|
|
|
|
get_forecast() {
|
|
curl -sf "wttr.in/$LOCATION?format=j1" > "$weather_report" || exit 1
|
|
}
|
|
|
|
codes="113=
|
|
116=
|
|
119=
|
|
122=
|
|
143=
|
|
176=
|
|
179=
|
|
182=
|
|
185=
|
|
200=
|
|
227=
|
|
230=
|
|
248=
|
|
260=
|
|
263=
|
|
266=
|
|
281=
|
|
284=
|
|
293=
|
|
296=
|
|
299=
|
|
302=
|
|
305=
|
|
308=
|
|
311=
|
|
314=
|
|
317=
|
|
320=
|
|
323=
|
|
326=
|
|
329=
|
|
332=
|
|
335=
|
|
338=
|
|
350=
|
|
353=
|
|
356=
|
|
359=
|
|
362=
|
|
365=
|
|
368=
|
|
371=
|
|
374=
|
|
377=
|
|
386=
|
|
389=
|
|
392=
|
|
395="
|
|
|
|
show_weather() {
|
|
weather_code="$(cat "$weather_report" | jq -r '.current_condition[0].weatherCode')"
|
|
temperature="$(cat "$weather_report" | jq -r '.current_condition[0].FeelsLikeC')"
|
|
|
|
echo "$codes" | sed -n "/$weather_code/{s/[0-9]*=//;p;q}" | tr -d '\n'
|
|
|
|
symbol="$([[ $temperature -lt 15 ]] && echo || echo )"
|
|
|
|
echo " $temperature $symbol"
|
|
}
|
|
|
|
case $BLOCK_BUTTON in
|
|
1) setsid -f "$TERMINAL" -e curl "wttr.in/$LOCATION";;
|
|
2) get_forecast && show_weather ;;
|
|
3) notify-send "🌈 Weather module" "\- Left click for full forecast.
|
|
- Middle click to update forecast." ;;
|
|
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
|
|
esac
|
|
|
|
# The test if our forcecast is updated to the day. If it isn't download a new
|
|
# weather report from wttr.in with the above function.
|
|
[ "$(stat -c %y "$weather_report" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
|
|
get_forecast
|
|
|
|
show_weather
|