dotfiles/awesome/widget/notif-center/dont-disturb/init.lua
2020-06-03 21:27:00 -05:00

122 lines
2.5 KiB
Lua

local awful = require('awful')
local naughty = require('naughty')
local wibox = require('wibox')
local gears = require('gears')
local beautiful = require('beautiful')
local dpi = beautiful.xresources.apply_dpi
local clickable_container = require('widget.clickable-container')
local config_dir = gears.filesystem.get_configuration_dir()
local widget_dir = config_dir .. 'widget/notif-center/dont-disturb/'
local widget_icon_dir = config_dir .. 'widget/notif-center/icons/'
_G.dont_disturb = false
local dont_disturb_imagebox = wibox.widget {
{
id = 'icon',
image = widget_icon_dir .. 'dont-disturb-mode.svg',
resize = true,
forced_height = dpi(20),
forced_width = dpi(20),
widget = wibox.widget.imagebox,
},
layout = wibox.layout.fixed.horizontal
}
local function update_icon()
local widget_icon_name = nil
local dd_icon = dont_disturb_imagebox.icon
if dont_disturb then
widget_icon_name = 'toggled-on'
dd_icon:set_image(widget_icon_dir .. 'dont-disturb-mode.svg')
else
widget_icon_name = 'toggled-off'
dd_icon:set_image(widget_icon_dir .. 'notify-mode.svg')
end
end
local check_disturb_status = function()
awful.spawn.easy_async_with_shell(
"cat " .. widget_dir .. "disturb_status",
function(stdout)
local status = stdout
if status:match("true") then
dont_disturb = true
elseif status:match("false") then
dont_disturb = false
else
dont_disturb = false
awful.spawn.with_shell("echo 'false' > " .. widget_dir .. "disturb_status")
end
update_icon()
end
)
end
check_disturb_status()
local toggle_disturb = function()
if dont_disturb then
dont_disturb = false
else
dont_disturb = true
end
awful.spawn.with_shell("echo " .. tostring(dont_disturb) .. " > " .. widget_dir .. "disturb_status")
update_icon()
end
local dont_disturb_button = wibox.widget {
{
dont_disturb_imagebox,
margins = dpi(7),
widget = wibox.container.margin
},
widget = clickable_container
}
dont_disturb_button:buttons(
gears.table.join(
awful.button(
{},
1,
nil,
function()
toggle_disturb()
end
)
)
)
local dont_disturb_wrapped = wibox.widget {
nil,
{
dont_disturb_button,
bg = beautiful.groups_bg,
shape = gears.shape.circle,
widget = wibox.container.background
},
nil,
expand = 'none',
layout = wibox.layout.align.vertical
}
-- Create a notification sound
naughty.connect_signal(
"request::display",
function(n)
if not dont_disturb then
awful.spawn.with_shell('canberra-gtk-play -i message')
end
end
)
return dont_disturb_wrapped