dotfiles/awes2/widget/blue-light/init.lua

128 lines
2.2 KiB
Lua

local awful = require('awful')
local wibox = require('wibox')
local gears = require('gears')
local dpi = require('beautiful').xresources.apply_dpi
local clickable_container = require('widget.window-effects.clickable-container')
local icons = require('theme.icons')
local blue_light_state = nil
local action_name = wibox.widget {
text = 'Blue Light Filter',
font = 'SF Pro Text Regular 11',
align = 'left',
widget = wibox.widget.textbox
}
local button_widget = wibox.widget {
{
id = 'icon',
image = icons.toggled_off,
widget = wibox.widget.imagebox,
resize = true
},
layout = wibox.layout.align.horizontal
}
local widget_button = wibox.widget {
{
button_widget,
top = dpi(7),
bottom = dpi(7),
widget = wibox.container.margin
},
widget = clickable_container
}
local update_imagebox = function()
local button_icon = button_widget.icon
if blue_light_state then
button_icon:set_image(icons.toggled_on)
else
button_icon:set_image(icons.toggled_off)
end
end
local kill_state = function()
awful.spawn.easy_async_with_shell(
[[
redshift -x
kill -9 $(pgrep redshift)
]],
function(stdout)
stdout = tonumber(stdout)
if stdout then
blue_light_state = false
update_imagebox()
end
end
)
end
kill_state()
local toggle_action = function()
awful.spawn.easy_async_with_shell(
[[
if [ ! -z $(pgrep redshift) ];
then
redshift -x && pkill redshift && killall redshift
echo 'OFF'
else
redshift -l 0:0 -t 4500:4500 -r &>/dev/null &
echo 'ON'
fi
]],
function(stdout)
if stdout:match('ON') then
blue_light_state = true
else
blue_light_state = false
end
update_imagebox()
end
)
end
widget_button:buttons(
gears.table.join(
awful.button(
{},
1,
nil,
function()
toggle_action()
end
)
)
)
local action_widget = wibox.widget {
{
action_name,
nil,
{
widget_button,
layout = wibox.layout.fixed.horizontal,
},
layout = wibox.layout.align.horizontal,
},
left = dpi(24),
right = dpi(24),
forced_height = dpi(48),
widget = wibox.container.margin
}
awesome.connect_signal(
'widget::blue_light:toggle',
function()
toggle_action()
end
)
return action_widget