{ pkgs, ... }: # INFO: Based on https://github.com/fcambus/ansiweather pkgs.writeScript "weather" '' #!/usr/bin/env fish # Usage: ./weather.fish "Richmond,US" if not set -q argv[1] echo "Usage: ./weather " exit 1 end # URL-encode spaces in city name set CITY (echo $argv[1] | sed 's/ /%20/g') set API_KEY 85a4e3c55b73909f42c6a23ec35b7147 if test -z "$API_KEY" echo "Please set the environment variable API_KEY" exit 1 end set WEATHER_API_URL "https://api.openweathermap.org/data/2.5/weather?q=$CITY&units=metric&appid=$API_KEY" # Fetch current weather data set weather_data (curl -s "$WEATHER_API_URL") # Parse needed fields set city_name (set_color -i green)(echo $weather_data | jq -r '.name')(set_color reset) set temperature (echo $weather_data | jq -r '.main.temp' | xargs printf "%.0f") set humidity (echo $weather_data | jq -r '.main.humidity') set weather_main (echo $weather_data | jq -r '.weather[0].main') set lon (echo $weather_data | jq -r '.coord.lon') set lat (echo $weather_data | jq -r '.coord.lat') # Fetch UVI data set UVI_API_URL "https://api.openweathermap.org/data/2.5/uvi?lat=$lat&lon=$lon&appid=$API_KEY" set uvi_data (curl -s "$UVI_API_URL") set uvi (echo $uvi_data | jq -r '.value') # Helper function for weather icon function weather_icon switch $argv[1] case "Clouds" echo "☁" case "Clear" echo "β˜€" case "Rain" echo "🌧" case "Snow" echo "❄" case "Thunderstorm" echo "β›ˆ" case "Drizzle" echo "🌦" case "Mist" "Haze" "Fog" "Smoke" "Dust" "Sand" "Ash" "Squall" "Tornado" echo "🌫" case "*" echo "🌈" end end set icon (weather_icon $weather_main) printf "%s %sΒ°C βΈ— ο†… %s βΈ—  %s%% (%s)\n" $icon $temperature $uvi $humidity $city_name ''