351 lines
6.9 KiB
Lua
351 lines
6.9 KiB
Lua
local awful = require('awful')
|
|
local gears = require('gears')
|
|
local wibox = require('wibox')
|
|
local beautiful = require('beautiful')
|
|
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
local icons = require('theme.icons')
|
|
local apps = require('configuration.apps')
|
|
local clickable_container = require('widget.clickable-container')
|
|
|
|
local filesystem = gears.filesystem
|
|
local config_dir = filesystem.get_configuration_dir()
|
|
local widget_icon_dir = config_dir .. 'configuration/user-profile/'
|
|
|
|
|
|
local greeter_message = wibox.widget {
|
|
markup = 'Choose wisely!',
|
|
font = 'SF Pro Text UltraLight 48',
|
|
align = 'center',
|
|
valign = 'center',
|
|
widget = wibox.widget.textbox
|
|
}
|
|
|
|
local profile_name = wibox.widget {
|
|
markup = 'user@hostname',
|
|
font = 'SF Pro Text Regular 12',
|
|
align = 'center',
|
|
valign = 'center',
|
|
widget = wibox.widget.textbox
|
|
}
|
|
|
|
local profile_imagebox = wibox.widget {
|
|
image = widget_icon_dir .. 'default.svg',
|
|
resize = true,
|
|
forced_height = dpi(110),
|
|
clip_shape = gears.shape.circle,
|
|
widget = wibox.widget.imagebox
|
|
}
|
|
|
|
local profile_imagebox_bg = wibox.widget {
|
|
bg = beautiful.groups_bg,
|
|
forced_width = dpi(120),
|
|
forced_height = dpi(120),
|
|
shape = gears.shape.circle,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
local update_profile_pic = function()
|
|
awful.spawn.easy_async_with_shell(
|
|
apps.bins.update_profile,
|
|
function(stdout)
|
|
stdout = stdout:gsub('%\n','')
|
|
if not stdout:match("default") then
|
|
profile_imagebox:set_image(stdout)
|
|
else
|
|
profile_imagebox:set_image(widget_icon_dir .. 'default.svg')
|
|
end
|
|
end
|
|
)
|
|
end
|
|
|
|
update_profile_pic()
|
|
|
|
local update_user_name = function()
|
|
awful.spawn.easy_async_with_shell(
|
|
"printf \"$(whoami)@$(hostname)\"",
|
|
function(stdout)
|
|
local stdout = stdout:gsub('%\n','')
|
|
local username = stdout:match("(.*)@")
|
|
username = username:sub(1, 1):upper() .. username:sub(2)
|
|
greeter_message:set_markup('Choose wisely, ' .. username .. '!')
|
|
profile_name:set_markup(stdout)
|
|
end
|
|
)
|
|
end
|
|
|
|
update_user_name()
|
|
|
|
local build_button = function(icon, name)
|
|
|
|
local button_text = wibox.widget {
|
|
text = name,
|
|
font = beautiful.font,
|
|
align = 'center',
|
|
valign = 'center',
|
|
widget = wibox.widget.textbox
|
|
}
|
|
|
|
local a_button = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
image = icon,
|
|
widget = wibox.widget.imagebox
|
|
},
|
|
margins = dpi(16),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = beautiful.groups_bg,
|
|
widget = wibox.container.background
|
|
},
|
|
shape = gears.shape.rounded_rect,
|
|
forced_width = dpi(90),
|
|
forced_height = dpi(90),
|
|
widget = clickable_container
|
|
},
|
|
left = dpi(24),
|
|
right = dpi(24),
|
|
widget = wibox.container.margin
|
|
}
|
|
|
|
local build_a_button = wibox.widget {
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(5),
|
|
a_button,
|
|
button_text
|
|
}
|
|
|
|
return build_a_button
|
|
end
|
|
|
|
local suspend_command = function()
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
awful.spawn.with_shell(apps.default.lock .. ' & systemctl suspend')
|
|
end
|
|
|
|
local exit_command = function()
|
|
awesome.quit()
|
|
end
|
|
|
|
local lock_command = function()
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
awful.spawn.with_shell('sleep 1 && ' .. apps.default.lock)
|
|
end
|
|
|
|
local poweroff_command = function()
|
|
awful.spawn.with_shell('poweroff')
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
end
|
|
|
|
local reboot_command = function()
|
|
awful.spawn.with_shell('reboot')
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
end
|
|
|
|
local poweroff = build_button(icons.power, 'Shutdown')
|
|
poweroff:connect_signal(
|
|
'button::release',
|
|
function()
|
|
poweroff_command()
|
|
end
|
|
)
|
|
|
|
local reboot = build_button(icons.restart, 'Restart')
|
|
reboot:connect_signal(
|
|
'button::release',
|
|
function()
|
|
reboot_command()
|
|
end
|
|
)
|
|
|
|
local suspend = build_button(icons.sleep, 'Sleep')
|
|
suspend:connect_signal(
|
|
'button::release',
|
|
function()
|
|
suspend_command()
|
|
end
|
|
)
|
|
|
|
local exit = build_button(icons.logout, 'Logout')
|
|
exit:connect_signal(
|
|
'button::release',
|
|
function()
|
|
exit_command()
|
|
end
|
|
)
|
|
|
|
local lock = build_button(icons.lock, 'Lock')
|
|
lock:connect_signal(
|
|
'button::release',
|
|
function()
|
|
lock_command()
|
|
end
|
|
)
|
|
|
|
screen.connect_signal(
|
|
"request::desktop_decoration",
|
|
function(s)
|
|
|
|
s.exit_screen = wibox
|
|
{
|
|
screen = s,
|
|
type = 'splash',
|
|
visible = false,
|
|
ontop = true,
|
|
bg = beautiful.background,
|
|
fg = beautiful.fg_normal,
|
|
height = s.geometry.height,
|
|
width = s.geometry.width,
|
|
x = s.geometry.x,
|
|
y = s.geometry.y
|
|
}
|
|
|
|
local exit_screen_hide = function()
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
|
|
end
|
|
|
|
|
|
local exit_screen_grabber = awful.keygrabber {
|
|
|
|
auto_start = true,
|
|
stop_event = 'release',
|
|
keypressed_callback = function(self, mod, key, command)
|
|
|
|
if key == 's' then
|
|
suspend_command()
|
|
|
|
elseif key == 'e' then
|
|
exit_command()
|
|
|
|
elseif key == 'l' then
|
|
lock_command()
|
|
|
|
elseif key == 'p' then
|
|
poweroff_command()
|
|
|
|
elseif key == 'r' then
|
|
reboot_command()
|
|
|
|
elseif key == 'Escape' or key == 'q' or key == 'x' then
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
}
|
|
|
|
awesome.connect_signal(
|
|
"module::exit_screen_show",
|
|
function()
|
|
for s in screen do
|
|
s.exit_screen.visible = false
|
|
end
|
|
awful.screen.focused().exit_screen.visible = true
|
|
exit_screen_grabber:start()
|
|
end
|
|
)
|
|
|
|
awesome.connect_signal(
|
|
"module::exit_screen_hide",
|
|
function()
|
|
exit_screen_grabber:stop()
|
|
for s in screen do
|
|
s.exit_screen.visible = false
|
|
end
|
|
end
|
|
)
|
|
|
|
s.exit_screen : buttons(
|
|
gears.table.join(
|
|
awful.button(
|
|
{},
|
|
2,
|
|
function()
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
end
|
|
),
|
|
awful.button(
|
|
{},
|
|
3,
|
|
function()
|
|
awesome.emit_signal("module::exit_screen_hide")
|
|
end
|
|
)
|
|
)
|
|
)
|
|
|
|
s.exit_screen : setup {
|
|
nil,
|
|
{
|
|
nil,
|
|
{
|
|
{
|
|
nil,
|
|
{
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(5),
|
|
{
|
|
profile_imagebox_bg,
|
|
{
|
|
layout = wibox.layout.align.vertical,
|
|
expand = 'none',
|
|
nil,
|
|
{
|
|
layout = wibox.layout.align.horizontal,
|
|
expand = 'none',
|
|
nil,
|
|
profile_imagebox,
|
|
nil
|
|
},
|
|
nil
|
|
},
|
|
layout = wibox.layout.stack
|
|
},
|
|
profile_name
|
|
},
|
|
nil,
|
|
expand = 'none',
|
|
layout = wibox.layout.align.horizontal
|
|
},
|
|
{
|
|
layout = wibox.layout.align.horizontal,
|
|
expand = 'none',
|
|
nil,
|
|
{
|
|
{
|
|
greeter_message,
|
|
{
|
|
poweroff,
|
|
reboot,
|
|
suspend,
|
|
exit,
|
|
lock,
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
spacing = dpi(30),
|
|
layout = wibox.layout.fixed.vertical
|
|
},
|
|
spacing = dpi(40),
|
|
layout = wibox.layout.fixed.vertical
|
|
},
|
|
nil
|
|
},
|
|
spacing = dpi(40),
|
|
layout = wibox.layout.fixed.vertical
|
|
},
|
|
nil,
|
|
expand = 'none',
|
|
layout = wibox.layout.align.horizontal
|
|
},
|
|
nil,
|
|
expand = 'none',
|
|
layout = wibox.layout.align.vertical
|
|
}
|
|
|
|
end
|
|
) |