nixos-config/modules/home-manager/ricing/awesomewm/dotfiles/ui/moment/mods/weather.lua
2024-07-12 18:19:30 +09:00

227 lines
6.0 KiB
Lua

local wibox = require("wibox")
local awful = require("awful")
local beautiful = require "beautiful"
local gears = require("gears")
local helpers = require "helpers"
local filesystem = gears.filesystem
local icon_dir = filesystem.get_configuration_dir() .. "theme/assets/weather/icons/"
local icon_map = {
["01d"] = "weather-clear-sky",
["02d"] = "weather-few-clouds",
["03d"] = "weather-clouds",
["04d"] = "weather-few-clouds",
["09d"] = "weather-showers-scattered",
["10d"] = "weather-showers",
["11d"] = "weather-strom",
["13d"] = "weather-snow",
["50d"] = "weather-fog",
["01n"] = "weather-clear-night",
["02n"] = "weather-few-clouds-night",
["03n"] = "weather-clouds-night",
["04n"] = "weather-clouds-night",
["09n"] = "weather-showers-scattered",
["10n"] = "weather-showers",
["11n"] = "weather-strom",
["13n"] = "weather-snow",
["50n"] = "weather-fog",
}
local dayWeather = function()
local widget = wibox.widget {
{
id = "day",
halign = 'center',
widget = wibox.widget.textbox,
font = beautiful.sans .. " 10",
},
{
id = "icon",
resize = true,
opacity = 0.6,
halign = 'center',
forced_height = 40,
forced_width = 40,
widget = wibox.widget.imagebox,
},
{
{
{
{
id = "max",
halign = 'center',
widget = wibox.widget.textbox,
font = beautiful.sans .. " 10",
},
{
halign = 'center',
markup = helpers.colorizeText("/", beautiful.blue),
widget = wibox.widget.textbox,
font = beautiful.sans .. " 10",
},
{
id = "min",
halign = 'center',
widget = wibox.widget.textbox,
font = beautiful.sans .. " 10",
},
spacing = 8,
layout = wibox.layout.fixed.horizontal,
},
widget = wibox.container.place,
halign = 'center',
},
widget = wibox.container.margin,
bottom = 20,
},
spacing = 10,
forced_width = 80,
layout = wibox.layout.fixed.vertical,
}
widget.update = function(out, i)
local day = out.daily[i]
widget:get_children_by_id('icon')[1].image = icon_dir .. icon_map[day.weather[1].icon] .. ".svg"
widget:get_children_by_id('day')[1].text = os.date("%a", tonumber(day.dt))
local getTemp = function(temp)
local sp = helpers.split(temp, '.')[1]
return sp
end
widget:get_children_by_id('min')[1].text = getTemp(day.temp.night)
widget:get_children_by_id('max')[1].text = getTemp(day.temp.day)
end
return widget
end
local day1 = dayWeather()
local day2 = dayWeather()
local day3 = dayWeather()
local day5 = dayWeather()
local day6 = dayWeather()
local day4 = dayWeather()
local daylist = { day1, day2, day3, day4, day5, day6 }
local widget = wibox.widget {
{
id = "image",
forced_height = 300,
forced_width = 460,
image = helpers.cropSurface(1.53, gears.surface.load_uncached(beautiful.songdefpicture)),
widget = wibox.widget.imagebox,
clip_shape = helpers.rrect(12),
opacity = 0.9,
resize = true,
horizontal_fit_policy = "fit"
},
{
{
widget = wibox.widget.textbox,
},
bg = {
type = "linear",
from = { 0, 0 },
to = { 250, 0 },
stops = { { 0, beautiful.bg .. "66" }, { 1, beautiful.bg .. 'dd' } }
},
shape = helpers.rrect(12),
widget = wibox.container.background,
},
{
{
{
{
{
id = "icon",
image = gears.filesystem.get_configuration_dir() .. "theme/assets/weather/icons/weather-fog.svg",
opacity = 0.9,
clip_shape = helpers.rrect(4),
forced_height = 80,
forced_width = 80,
valign = "center",
widget = wibox.widget.imagebox
},
{
id = "desc",
font = beautiful.sans .. " 12",
markup = "Scattered Clouds",
valign = "center",
widget = wibox.widget.textbox,
},
spacing = 10,
layout = wibox.layout.fixed.vertical,
},
nil,
{
{
id = "temp",
font = beautiful.sans .. " 32",
markup = "31 C",
valign = "center",
widget = wibox.widget.textbox,
},
{
id = "fl",
font = beautiful.sans .. " 12",
markup = "Feels Like 30 C",
valign = "center",
widget = wibox.widget.textbox,
},
{
id = "humid",
font = beautiful.sans .. " 12",
markup = "Humidity: 30%",
valign = "center",
widget = wibox.widget.textbox,
},
spacing = 10,
layout = wibox.layout.fixed.vertical,
},
layout = wibox.layout.align.horizontal,
},
nil,
{
{
day1,
day2,
day3,
day4,
day5,
day6,
spacing = 25,
layout = require("mods.overflow").horizontal,
scrollbar_width = 0,
},
widget = wibox.container.margin,
top = 15,
},
layout = wibox.layout.align.vertical,
},
widget = wibox.container.margin,
margins = {
left = 30,
right = 30,
top = 20,
bottom = 20,
},
},
layout = wibox.layout.stack,
}
awesome.connect_signal("signal::weather", function(out)
helpers.gc(widget, "image").image = helpers.cropSurface(1.53, gears.surface.load_uncached(out.thumb))
helpers.gc(widget, "icon").image = out.image
helpers.gc(widget, "temp").markup = out.temp .. "°C"
helpers.gc(widget, "desc").markup = out.desc
helpers.gc(widget, "humid").markup = "Humidity: " .. out.humidity .. "%"
helpers.gc(widget, "fl").markup = "Feels Like " .. out.temp .. "°C"
for i, j in ipairs(daylist) do
j.update(out, i)
end
end)
return widget