diff --git a/dotfiles/polybar/config b/dotfiles/polybar/config index d59f508..179d94c 100644 --- a/dotfiles/polybar/config +++ b/dotfiles/polybar/config @@ -4,6 +4,7 @@ throttle-limit = 5 [bar/cute] monitor = DP-2 + width = 100% height = 27 offset-y = 5 @@ -21,6 +22,7 @@ padding-right = 2 module-margin-left = 0 module-margin-right = 2 + font-0 = Fixedsys Excelsior 3.01:pixelsize=12:antialias=true:autohint=true font-1 = Fixedsys Excelsior 3.01:pixelsize=12:antialias=true:autohint=true font-2 = Fixedsys Excelsior 3.01:pixelsize=12:antialias=true:autohint=true @@ -28,7 +30,7 @@ font-3 = Fixedsys Excelsior 3.01:pixelsize=12:antialias=true:autohint=true font-4 = Fixedsys Excelsior 3.01:pixelsize=12:antialias=true:autohint=true modules-left = i3 title -modules-right = pulseaudio filesystem clock +modules-right = pulseaudio filesystem wttr clock tray-position = right #override-redirect = true @@ -96,6 +98,15 @@ label-mounted-padding = 2 label-mounted = %mountpoint% %percentage_used% of %total% +[module/wttr] +type = custom/script +exec = /home/shockrah/Rice/weather-fetch/fetch.py +interval = 3600 + +format-background = #155415 +format-underline = #249124 +format-overline = #249124 + [module/cpu] type = internal/cpu interval = 0.5 diff --git a/weather-fetch/fetch.py b/weather-fetch/fetch.py new file mode 100755 index 0000000..4d4cbc0 --- /dev/null +++ b/weather-fetch/fetch.py @@ -0,0 +1,53 @@ +#!/usr/bin/python3 + +import json, requests, sys + +class ReportErr(Exception): + pass + +class Report: + def __init__(self, content: dict): + if 'current_condition' not in content: + raise ReportErr('Unable to get current_conditions from json') + + # ref to inner data + target = content['current_condition'][0] + # time2fill fields + self.temp_c = int(target['temp_C']) + self.hum = int(target['humidity']) + + if len(target['weatherDesc']) < 1: + self.desc = '' + else: + # fuck me this is stupid with all th eindexing + self.desc = target['weatherDesc'][0]['value'] + @property + def __dict__(self): + return { + 'hum': self.hum, + 'temp_c': self.temp_c, + 'desc': self.desc + } + + def __str__(self): + ''' + Basically just a pretty print that we use to + ''' + return f"It's {self.temp_c}° @ {self.hum}% humidity Status: {self.desc}" + + +if __name__ == '__main__': + + response = requests.get('http://wttr.in/?format=j1') + + if response.status_code == 200: + try: + report = Report(response.json()) + print(report) + except ReportErr as re: + print(re, file=sys.stderr) + except Exception as e: + print('unable to decode response payload', file=sys.stderr) + print('Error caught', e, file=sys.stderr) + else: + print('Unable to fetch data from wttr.in', file=sys.stderr)