local os = require('os') naughty = require('naughty') local wibox = require('wibox') local awful = require('awful') local gears = require('gears') local json = require('jsonutils') local home = os.getenv('HOME') local todo_path = home .. '/.config/todo/todo.json' local widget = nil function todo_list_widget(index, todo) local text = '\n ' .. index .. '. ' .. todo.title .. ' \n' for key, item in pairs(todo.items) do text = text .. ' ' .. key .. '. ' .. item .. ' \n' end local text = wibox.widget { markup = text, align = 'left', valign = 'top', font = "Ubuntu 18", widget = wibox.widget.textbox } local widget = wibox.widget.background(text, todo.color, function(cr, width, height) gears.shape.rounded_rect(cr, width, height, 20) end) widget.shape_border_width = 1 widget.shape_border_color = "#ffffff" return widget end function update_background_widget(s) local margin = 25 awful.spawn.easy_async_with_shell(":", function() if s.widget ~= nil then s.widget:remove() end local f = io.open(todo_path, "rb") if f ~= nil then local content = f:read("*all") f:close() todo = json.parse(content) local l = wibox.layout { homogeneous = false, spacing = margin, forced_num_cols = 3, layout = wibox.layout.grid, } -- l:set_orientation('horizontal') local widgets = {} for key, val in pairs(todo) do l:add(todo_list_widget(key, val)) end background_widget = awful.wibar({ screen = s, height = s.geometry.height, bg = "#00000000", }) background_widget:setup { wibox.container.margin(l, margin, margin, margin, margin), layout = wibox.layout.manual } background_widget:struts({left=0, right=0, top=0, bottom=0}) s.widget = background_widget end end) end