74 lines
1.8 KiB
Typst
74 lines
1.8 KiB
Typst
#set page(width: 65mm,
|
|
height: 86mm,
|
|
margin: ("x":0cm,"y":0cm)
|
|
)
|
|
#let today = datetime.today()
|
|
#let weather = json("weather.json")
|
|
#let icons_map = (
|
|
"0": "icons/clear_day.svg",
|
|
"1": "icons/clear_day.svg",
|
|
"2": "icons/partly_cloudy_day.svg",
|
|
"3": "icons/partly_cloudy_day.svg",
|
|
"45": "icons/haze_day.svg",
|
|
"48": "icons/haze_day.svg",
|
|
"51": "icons/rain_day_night.svg",
|
|
"53": "icons/rain_day_night.svg",
|
|
"55": "icons/rain_day_night.svg",
|
|
"56": "icons/sleet_day_night.svg",
|
|
"57": "icons/sleet_day_night.svg",
|
|
"61": "icons/rain_day_night.svg",
|
|
"63": "icons/rain_day_night.svg",
|
|
"65": "icons/rain_day_night.svg",
|
|
"66": "icons/sleet_day_night.svg",
|
|
"67": "icons/sleet_day_night.svg",
|
|
"71": "icons/snow_day_night.svg",
|
|
"73": "icons/snow_day_night.svg",
|
|
"75": "icons/snow_day_night.svg",
|
|
"77": "icons/snow_day_night.svg",
|
|
"80": "icons/rain_day_night.svg",
|
|
"81": "icons/rain_day_night.svg",
|
|
"82": "icons/rain_day_night.svg",
|
|
"85": "icons/snow_day_night.svg",
|
|
"86": "icons/snow_day_night.svg",
|
|
"95": "icons/thunder_day_night.svg",
|
|
"96": "icons/hail_day_night.svg",
|
|
"99": "icons/hail_day_night.svg",
|
|
)
|
|
|
|
#let reduce_array(a,n:2) = {
|
|
let ret = ()
|
|
for (i,v) in a.enumerate(){
|
|
if calc.rem-euclid(i,n) == 0 and i>6{
|
|
ret.push(v)
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
#let times = ()
|
|
#for i in range(24){
|
|
times.push(datetime(hour:i,minute:0,second:0))
|
|
}
|
|
#let times = times.map(x=>x.display("[hour]"))
|
|
#let codes = weather.hourly.weather_code.map(x => image(icons_map.at(str(x)), height:1em))
|
|
#let temps = weather.hourly.temperature_2m
|
|
#let values = reduce_array(times.zip(codes,temps),n: 2)
|
|
|
|
|
|
#align(center)[
|
|
#v(1fr)
|
|
|
|
#text(size:2em, weight: "bold")[#today.display("[weekday] [day]")]
|
|
|
|
|
|
#v(1fr)
|
|
|
|
#grid(
|
|
columns: (1fr,2fr,2fr),
|
|
align: (right,center,center),
|
|
..values.flatten().map(x => text(size:1.7em)[#x])
|
|
)
|
|
|
|
#v(1fr)
|
|
|
|
]
|