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

178 lines
4.7 KiB
Lua

local wibox = require("wibox")
local awful = require("awful")
local beautiful = require "beautiful"
local gears = require("gears")
local helpers = require "helpers"
local dpi = beautiful.xresources.apply_dpi
local datewidget = function(date, weekend, notIn)
weekend = weekend or false
if notIn then
return wibox.widget {
markup = helpers.colorizeText(date, beautiful.fg3),
halign = 'center',
font = beautiful.sans .. " 14",
widget = wibox.widget.textbox
}
else
return wibox.widget {
markup = weekend and helpers.colorizeText(date, beautiful.fg) or date,
halign = 'center',
font = beautiful.sans .. " 14",
widget = wibox.widget.textbox
}
end
end
local daywidget = function(day, weekend, notIn)
weekend = weekend or false
return wibox.widget {
markup = weekend and helpers.colorizeText(day, beautiful.red) or day,
halign = 'center',
font = beautiful.sans .. " 14",
widget = wibox.widget.textbox
}
end
local currwidget = function(day)
return wibox.widget {
markup = helpers.colorizeText(day, beautiful.blue),
halign = 'center',
font = beautiful.sans .. " 14",
widget = wibox.widget.textbox
}
end
local title = wibox.widget {
font = beautiful.sans .. " Bold 14",
widget = wibox.widget.textbox,
halign = 'center'
}
local theGrid = wibox.widget {
forced_num_rows = 7,
forced_num_cols = 7,
vertical_spacing = dpi(10),
horizontal_spacing = dpi(10),
min_cols_size = dpi(30),
min_rows_size = dpi(30),
homogenous = true,
layout = wibox.layout.grid,
}
local curr
local updateCalendar = function(date)
title.text = os.date("%B %Y", os.time(date))
theGrid:reset()
for _, w in ipairs { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" } do
if w == "Sun" or w == "Sat" then
theGrid:add(daywidget(w, true, false))
else
theGrid:add(daywidget(w, false, false))
end
end
local firstDate = os.date("*t", os.time({ day = 1, month = date.month, year = date.year }))
local lastDate = os.date("*t", os.time({ day = 0, month = date.month + 1, year = date.year }))
local days_to_add_at_month_start = firstDate.wday - 1
local days_to_add_at_month_end = 42 - lastDate.day - days_to_add_at_month_start
local previous_month_last_day = os.date("*t", os.time({ year = date.year, month = date.month, day = 0 })).day
local row = 2
local col = firstDate.wday
for day = previous_month_last_day - days_to_add_at_month_start, previous_month_last_day - 1, 1 do
theGrid:add(datewidget(day, false, true))
end
for day = 1, lastDate.day do
if day == date.day then
theGrid:add_widget_at(currwidget(day), row, col)
elseif col == 1 or col == 7 then
theGrid:add_widget_at(datewidget(day, true, false), row, col)
else
theGrid:add_widget_at(datewidget(day, false, false), row, col)
end
if col == 7 then
col = 1
row = row + 1
else
col = col + 1
end
end
for day = 1, days_to_add_at_month_end do
theGrid:add(datewidget(day, false, true))
end
end
return function()
curr = os.date("*t")
updateCalendar(curr)
gears.timer {
timeout = 60,
call_now = true,
autostart = true,
callback = function()
curr = os.date("*t")
updateCalendar(curr)
end
}
return wibox.widget {
{
{
{
{
{
text = "󰁍",
font = beautiful.icofont,
widget = wibox.widget.textbox,
buttons = awful.button({}, 1, function()
curr = os.date("*t", os.time({
day = curr.day,
month = curr.month - 1,
year = curr.year
}))
updateCalendar(curr)
end)
},
widget = wibox.container.margin,
left = 38,
},
title,
{
{
text = "󰁔",
font = beautiful.icofont,
widget = wibox.widget.textbox,
buttons = awful.button({}, 1, function()
curr = os.date("*t", os.time({
day = curr.day,
month = curr.month + 1,
year = curr.year
}))
updateCalendar(curr)
end)
},
widget = wibox.container.margin,
right = 38,
},
layout = wibox.layout.align.horizontal
},
{
theGrid,
widget = wibox.container.place,
halign = 'center',
},
spacing = 17,
layout = wibox.layout.fixed.vertical
},
widget = wibox.container.margin,
margins = 50
},
shape = helpers.rrect(10),
widget = wibox.container.background,
bg = beautiful.mbg
}
end