Added weather module.

This commit is contained in:
kat witch 2021-02-12 04:20:01 +00:00 committed by kat
parent 30572115a9
commit a7833d0d81
5 changed files with 78 additions and 3 deletions

3
.gitignore vendored
View file

@ -1,2 +1,3 @@
/result /result
/config/hosts/beltane/secrets.nix /config/hosts/beltane/secrets.nix
/secrets.nix

View file

@ -1,6 +1,7 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let colors = import ./colors.nix; let colors = import ./colors.nix;
secrets = import ../../../secrets.nix;
in { in {
config = lib.mkIf (lib.elem "sway" config.meta.deploy.profiles) { config = lib.mkIf (lib.elem "sway" config.meta.deploy.profiles) {
fonts.fonts = with pkgs; [ fonts.fonts = with pkgs; [
@ -264,6 +265,7 @@ in {
modules-right = [ modules-right = [
"pulseaudio" "pulseaudio"
"network" "network"
"custom/weather"
"cpu" "cpu"
"memory" "memory"
"temperature" "temperature"
@ -273,6 +275,11 @@ in {
]; ];
modules = { modules = {
"custom/weather" = {
format = "{}";
interval = 3600;
exec = "nix-shell --command 'python ${../../../scripts/weather.py} ${secrets.profiles.sway.city} ${secrets.profiles.sway.api_key}' ${../../../scripts/weather.nix}";
};
cpu = { format = " {usage}%"; }; cpu = { format = " {usage}%"; };
memory = { format = " {percentage}%"; }; memory = { format = " {percentage}%"; };
temperature = { format = " {temperatureC}°C"; }; temperature = { format = " {temperatureC}°C"; };
@ -303,7 +310,7 @@ in {
format-ethernet = " {ifname}: {ipaddr}/{cidr}"; format-ethernet = " {ifname}: {ipaddr}/{cidr}";
format-linked = " {ifname} (No IP)"; format-linked = " {ifname} (No IP)";
format-disconnected = " Disconnected "; format-disconnected = " Disconnected ";
format-alt = "{ifname}: {ipaddr}/{cidr}"; format-alt = " {ifname}: {ipaddr}/{cidr}";
}; };
clock = { format = " {:%A, %F %T %Z}"; }; clock = { format = " {:%A, %F %T %Z}"; };
}; };

View file

@ -9,7 +9,7 @@
min-height: 14px min-height: 14px
} }
#clock, #memory, #cpu, #temperature, #pulseaudio, #network, #mpd, #backlight, #battery { #clock, #memory, #cpu, #temperature, #pulseaudio, #network, #mpd, #backlight, #battery, #custom-weather {
margin-left: 8px; margin-left: 8px;
margin-right: 8px; margin-right: 8px;
padding-left: 8px; padding-left: 8px;
@ -57,6 +57,7 @@
#mpd { border-color: #5af78e } #mpd { border-color: #5af78e }
#mpd.disconnected, #mpd.stopped { border-color: #282a36 } #mpd.disconnected, #mpd.stopped { border-color: #282a36 }
#network { border-color: ${colors.base16.color3} } #network { border-color: ${colors.base16.color3} }
#custom-weather { border-color: ${colors.base16.color15} }
#pulseaudio { border-color: ${colors.base16.color2} } #pulseaudio { border-color: ${colors.base16.color2} }
#temperature { border-color: ${colors.base16.color4} } #temperature { border-color: ${colors.base16.color4} }
#battery { border-color: ${colors.base16.color6} } #battery { border-color: ${colors.base16.color6} }

18
scripts/weather.nix Normal file
View file

@ -0,0 +1,18 @@
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
mkShell {
buildInputs = [
pkgs.python3
pkgs.python3.pkgs.requests
];
shellHook = ''
# Tells pip to put packages into $PIP_PREFIX instead of the usual locations.
# See https://pip.pypa.io/en/stable/user_guide/#environment-variables.
export PIP_PREFIX=$(pwd)/_build/pip_packages
export PYTHONPATH="$PIP_PREFIX/${pkgs.python3.sitePackages}:$PYTHONPATH"
export PATH="$PIP_PREFIX/bin:$PATH"
unset SOURCE_DATE_EPOCH
'';
}

48
scripts/weather.py Normal file
View file

@ -0,0 +1,48 @@
import requests
import json
import sys
#city = "London"
#api_key = "08588263e133e79c17cef6d01a5c6da8"
city = sys.argv[1]
api_key = sys.argv[2]
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
weather_icons = {
"Thunderstorm": "",
"Clouds": "",
"Drizzle": "",
"Rain": "",
"Snow": "",
"Clear": "",
"Mist": "",
"Smoke": "",
"Haze": "",
"Dust": "",
"Fog": "",
"Sand": "",
"Ash": "",
"Squall": "",
"Tornado": ""
}
def degrees_to_cardinal(d):
dirs = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE",
"S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]
ix = int((d + 11.25)/22.5)
return dirs[ix % 16]
response = requests.get(url)
data = json.loads(response.text)
#print(data)
condition = data["weather"][0]["main"]
weather_icon = weather_icons[condition]
temperature = f"{data['main']['temp']}°C"
feels_like_temperature = f"{data['main']['feels_like']}°C"
humidity = f"{data['main']['humidity']}%"
wind = f"{data['wind']['speed']}m/s {degrees_to_cardinal(data['wind']['deg'])}"
end_string = f"{weather_icon} {temperature} {feels_like_temperature} {humidity} {wind}"
print(end_string)