dotfiles/awesome/widget/package-updater/init.lua
2020-07-01 11:26:52 -05:00

123 lines
2.4 KiB
Lua

-------------------------------------------------
-- Package Updater Widget for Awesome Window Manager
-- Shows the package updates information in Arch Linux
-- Will only show if there is/are updates available
-------------------------------------------------
local awful = require('awful')
local naughty = require('naughty')
local wibox = require('wibox')
local gears = require('gears')
local watch = awful.widget.watch
local apps = require('configuration.apps')
local clickable_container = require('widget.clickable-container')
local dpi = require('beautiful').xresources.apply_dpi
local config_dir = gears.filesystem.get_configuration_dir()
local widget_icon_dir = config_dir .. 'widget/package-updater/icons/'
local update_available = false
local number_of_updates_available = nil
local update_package = nil
local return_button = function()
local widget = wibox.widget {
{
id = 'icon',
widget = wibox.widget.imagebox,
image = widget_icon_dir .. 'package' .. '.svg',
resize = true
},
layout = wibox.layout.align.horizontal
}
local widget_button = wibox.widget {
{
widget,
margins = dpi(2),
widget = wibox.container.margin
},
widget = clickable_container
}
widget_button:buttons(
gears.table.join(
awful.button(
{},
1,
nil,
function()
if update_available then
awful.spawn(apps.default.package_manager .. ' --updates', false)
else
awful.spawn(apps.default.package_manager, false)
end
end
)
)
)
-- Tooltip
awful.tooltip(
{
objects = {widget_button},
mode = 'outside',
align = 'right',
margin_leftright = dpi(8),
margin_topbottom = dpi(8),
timer_function = function()
if update_available then
return update_package:gsub('\n$', '')
else
return 'We are up-to-date!'
end
end,
preferred_positions = {'right', 'left', 'top', 'bottom'}
}
)
watch('pamac checkupdates', 60, function(_, stdout)
number_of_updates_available = tonumber(stdout:match('.-\n'):match('%d*'))
update_package = stdout
local icon_name
if number_of_updates_available ~= nil then
update_available = true
icon_name = 'package-up'
else
update_available = false
icon_name = 'package'
end
widget.icon:set_image(widget_icon_dir .. icon_name .. '.svg')
collectgarbage('collect')
end)
return widget_button
end
return return_button