dotfiles/waybar/scripts/weather.sh
2026-08-03 17:03:40 +02:00

59 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
# --- CONFIGURATION ---
API_KEY="00e744eb427e575e1e8ed79f31f770fb" # Paste your key here
LAT="48.856613" # Replace with your Latitude
LON="2.352222" # Replace with your Longitude
UNITS="metric" # Use "metric" for Celsius, "imperial" for Fahrenheit
# ---------------------
# Validate configuration
if [ -z "$LAT" ] || [ -z "$LON" ] || [ -z "$UNITS" ] || [ -z "$API_KEY" ]; then
echo "Config missing"
exit 1
fi
# Fetch the weather data
RESPONSE=$(curl -s "[https://api.openweathermap.org/data/2.5/weather?lat=$](https://api.openweathermap.org/data/2.5/weather?lat=$){LAT}&lon=${LON}&appid=${API_KEY}&units=${UNITS}")
# Check if curl failed to get a response
if [ -z "$RESPONSE" ]; then
echo "No connection"
exit 1
fi
# 1. Get the Temperature
# We use jq's built-in 'round' function to avoid ugly decimals (e.g., 71.6°F becomes 72°F)
TEMP=$(echo "$RESPONSE" | jq '.main.temp | round')
# 2. Get the Description (for the tooltip)
DESC=$(echo "$RESPONSE" | jq -r '.weather[0].description')
# 3. Get the Icon Code and map it to an emoji
ICON_CODE=$(echo "$RESPONSE" | jq -r '.weather[0].icon')
case $ICON_CODE in
"01d") ICON="☀️";; # Clear sky day
"01n") ICON="🌙";; # Clear sky night
"02d") ICON="⛅";; # Few clouds day
"02n") ICON="☁️";; # Few clouds night
"03d"|"03n") ICON="☁️";; # Scattered clouds
"04d"|"04n") ICON="☁️";; # Broken clouds
"09d"|"09n") ICON="🌧️";; # Shower rain
"10d") ICON="🌦️";; # Rain day
"10n") ICON="🌧️";; # Rain night
"11d"|"11n") ICON="⛈️";; # Thunderstorm
"13d"|"13n") ICON="❄️";; # Snow
"50d"|"50n") ICON="🌫️";; # Mist
*) ICON="❓";; # Default
esac
# Determine unit label
if [ "$UNITS" = "metric" ]; then
LABEL="°C"
else
LABEL="°F"
fi
# Final JSON output for Waybar
echo "{\"text\": \"${ICON} ${TEMP}${LABEL}\", \"tooltip\": \"${DESC}\"}"