From 225eeafcea67d63a608f9c666faf2a2ef014be4a Mon Sep 17 00:00:00 2001 From: delta Date: Mon, 19 Jan 2026 06:30:33 +0100 Subject: sync: electric boogaloo --- .../ui/statusbar/panel/widgets/calendar.lua | 143 ++++++++++++--------- 1 file changed, 79 insertions(+), 64 deletions(-) (limited to '.config/awesome/ui/statusbar/panel/widgets/calendar.lua') diff --git a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua index ddbffc0..c3f0424 100644 --- a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua +++ b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua @@ -1,14 +1,36 @@ -local awful = require "awful" local phosphor = require "assets.phosphor" -local qbind = require "quarrel.bind" local qcolor = require "quarrel.color" -local qmarkup = require "quarrel.markup" local qui = require "quarrel.ui" local wibox = require "wibox" -local weekday_map = { 7, 1, 2, 3, 4, 5, 6 } +local WEEKDAY_MAP = { 7, 1, 2, 3, 4, 5, 6 } -local calendar = wibox.widget(qui.styled { +local M = {} + +local l_grid = wibox.widget { + layout = wibox.layout.grid, + forced_num_rows = 7, + forced_num_cols = 7, + border_width = { + inner = qui.BORDER_WIDTH, + outer = 0, + }, + border_color = qcolor.palette.border.variant, +} + +local w_month = wibox.widget { + widget = wibox.widget.textbox, + text = "-", +} + +local w_year = wibox.widget { + widget = wibox.widget.textbox, + text = "-", +} + +local offset = 0 + +M.widget = wibox.widget(qui.styled { widget = wibox.container.background, bg = qcolor.palette.bg.high, { @@ -16,18 +38,7 @@ local calendar = wibox.widget(qui.styled { margins = qui.BORDER_WIDTH, { { - { - layout = wibox.layout.grid, - forced_num_rows = 7, - forced_num_cols = 7, - -- spacing = (qui.PADDING) / 2, - border_width = { - inner = qui.BORDER_WIDTH, - outer = 0, - }, - border_color = qcolor.palette.border.variant, - id = "grid", - }, + l_grid, { widget = wibox.container.background, bg = qcolor.palette.border(), @@ -43,9 +54,17 @@ local calendar = wibox.widget(qui.styled { widget = wibox.container.place, fill_horizontal = true, { - widget = wibox.widget.textbox, - text = "05\n25", - }, + { + widget = wibox.container.place, + w_month, + }, + qui.separator { + size = qui.BORDER_WIDTH + }, + w_year, + layout = wibox.layout.fixed.vertical, + spacing = qui.PADDING + } }, nil, qui.styled { @@ -86,7 +105,6 @@ local calendar = wibox.widget(qui.styled { }, }, layout = wibox.layout.fixed.vertical, - -- spacing = qui.PADDING }, }, layout = wibox.layout.align.vertical, @@ -97,11 +115,32 @@ local calendar = wibox.widget(qui.styled { }, }) -local grid = calendar:get_children_by_id("grid")[1] +function M:render(grid) + for i, row in ipairs(grid) do + for j, col in ipairs(row) do + local widget = l_grid:get_widgets_at(i, j)[1] + widget.widget.widget.widget.text = col[1] + if col[2] then + widget.bg = qcolor.palette.yellow() + widget.fg = qcolor.palette.bg() + elseif j % 6 == 0 or j % 7 == 0 then + widget.bg = col[3] and qcolor.palette.bg.highest or qcolor.palette.bg.high + else + widget.bg = col[3] and qcolor.palette.bg.high or qcolor.palette.bg() + end + + if i == 1 then + widget.fg = qcolor.palette.fg() + elseif not col[2] then + widget.fg = qcolor.palette.fg.low + end + end + end +end -- Logic heavily inspired by https://github.com/Sinomor/dotfiles/blob/e409f9a84bf40daf1e39c0179ec749232ed827c9/home/.config/awesome/ui/control/moment/calendar.lua#L134-L173 -function calendar:compute_grid(year, month) - local calendar_table = { +function M:compute(year, month) + local grid = { { { "Mo", false, true }, { "Tu", false, true }, @@ -125,7 +164,7 @@ function calendar:compute_grid(year, month) local days = last_day.day local prev_days = os.date("*t", os.time { year = year, month = month, day = 0 }) - local prev_offset = weekday_map[first_day.wday] - 1 + local prev_offset = WEEKDAY_MAP[first_day.wday] - 1 local prev_month = month - 1 == -1 and 12 or month - 1 local prev_year = prev_month == 12 and year - 1 or year @@ -133,7 +172,7 @@ function calendar:compute_grid(year, month) for offset = prev_offset, 1, -1 do local day = prev_days.day - offset + 1 table.insert( - calendar_table[2], + grid[2], { day, day == current.day and prev_month == current.month and prev_year == current.year, false } ) end @@ -141,10 +180,10 @@ function calendar:compute_grid(year, month) do local row = 2 - local weekday = weekday_map[first_day.wday] + local weekday = WEEKDAY_MAP[first_day.wday] for day = 1, days do table.insert( - calendar_table[row], + grid[row], { day, day == current.day and month == current.month and year == current.year, true } ) if weekday == 7 then @@ -159,7 +198,7 @@ function calendar:compute_grid(year, month) local next_year = next_month == 1 and year + 1 or year for day = 1, 42 - prev_offset - days do table.insert( - calendar_table[row], + grid[row], { day, day == current.day and next_month + 1 == current.month and next_year == current.year, false } ) if weekday == 7 then @@ -171,35 +210,16 @@ function calendar:compute_grid(year, month) end end - for i, row in ipairs(calendar_table) do - for j, col in ipairs(row) do - local widget = grid:get_widgets_at(i, j)[1] - widget.widget.widget.widget.text = col[1] - if col[2] then - widget.bg = qcolor.palette.yellow() - widget.fg = qcolor.palette.bg() - elseif j % 6 == 0 or j % 7 == 0 then - widget.bg = col[3] and qcolor.palette.bg.highest or qcolor.palette.bg.high - else - widget.bg = col[3] and qcolor.palette.bg.high or qcolor.palette.bg() - end - - if i == 1 then - widget.fg = qcolor.palette.fg() - elseif not col[2] then - -- widget.fg = col[3] and qcolor.palette.fg() or qcolor.palette.fg.low - widget.fg = qcolor.palette.fg.low - end - end - end + w_month.text = month + w_year.text = year + self:render(grid) end -local cells = {} -local function cell(content) - local widget = wibox.widget { +-- Set up the widget +for _ = 1, 49 do + local cell = wibox.widget { widget = wibox.container.background, bg = qcolor.palette.bg.high, - -- shape = qui.shape, { widget = wibox.container.margin, margins = qui.PADDING * 1.5, @@ -209,20 +229,15 @@ local function cell(content) forced_width = qui.CHAR_HEIGHT, { widget = wibox.widget.textbox, - markup = content, + markup = "", }, }, }, } - table.insert(cells, widget) -end - -for _ = 1, 49 do - cell() + l_grid:add(cell) end -grid:add(table.unpack(cells)) local current_time = os.date "*t" -calendar:compute_grid(current_time.year, current_time.month) -grid:add_row_border(2, qui.BORDER_WIDTH, { color = qcolor.palette.border() }) +M:compute(current_time.year, current_time.month) +l_grid:add_row_border(2, qui.BORDER_WIDTH, { color = qcolor.palette.border() }) -return calendar +return M -- cgit v1.2.3