my complicated awesomewm config (SUNSETTED)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

175 lines
6.9 KiB

local awful = require("awful")
local wibox = require("wibox")
local gears = require("gears")
local awmtk = require("awmtk")
local beautiful = require("beautiful")
local simplepam = require("simplepam")
local function read(path)
local file = io.open(path,"r")
if file then
local answer = file:read("*a")
file:close()
return answer
end
end
return function(args)
local style = awmtk.style(awmtk.defaults,args.style or {},"lockscreen_")
if not args.screen then
error("Screen not specified")
end
local s = args.screen
if not G_KeyboardLock then
G_KeyboardLock = awful.keygrabber {
mask_modkeys = true,
mask_event_callback = true
}
end
local function gen_password_prompt()
G_KeyboardLock:start()
local inputbox = style.inputbox("Enter password",{},{
pre_callback = function()
--Just before we activate the prompt, deactivate keygrabber
G_KeyboardLock:stop()
end,
exe_callback = function(input,textbox)
--Activate keygrabber before calling pam interface
--This prevents any input while pam is checking password.
G_KeyboardLock:start()
if simplepam(input) then
s.lockscreen.visible = false
G_KeyboardLock:stop()
end
end,
highlighter = (args.obscure and function(b,a)
--This adds a black fully transparent text tag to password field
return "<span foreground='#00000000'>","</span>"
end),
prompt = "Password: ",
history_max = 0,
history_path = "/tmp/lockfakehist",
done_callback = function()
--Ensure that even if input is cancelled and if the lock screen is still visible, the lock would start.
if (not G_KeyboardLock.is_running) and s.lockscreen.visible then
G_KeyboardLock:start()
end
end
})
return inputbox
end
s.lockscreen = awful.popup({
widget = {
{
-- Bottom layer
{
{
--Top bar
{
{
-- Top bar contents
{
markup = "AwesomewWM",
widget = wibox.widget.textbox
},
{
widget = wibox.container.background
},
{
require("widgets.battery")({
percentage = true
}),
wibox.widget.textclock(),
widget = wibox.container.background,
layout = wibox.layout.fixed.horizontal
},
layout = wibox.layout.align.horizontal,
},
widget = wibox.container.margin,
left = 5,
right = 5
},
widget = wibox.container.background,
forced_width = s.geometry.width,
forced_height = style.lockscreen_bar_height or 25,
bg = style.lockscreen_bar_bg or
style.lockscreen_bg_normal
},
{
--Drop shadow
{
markup = "",
widget = wibox.widget.textbox,
},
widget = wibox.container.background,
forced_height = style.lockscreen_bar_shadow or 5,
forced_width = s.geometry.width,
bg = {
-- Gradient
type = "linear",
from = { 0, 0 },
to = { 0, style.lockscreen_bar_shadow or 5},
stops = {
{ 0, style.lockscreen_bar_shadow_color_start or
"#00000055" },
{ 1, style.lockscreen_bar_shadow_color_end or
"#00000000" }
}
}
},
layout = wibox.layout.fixed.vertical
},
widget = wibox.container.place,
valign = "top",
halign = "center"
},
{
--Combo box (face, nickname, password entry)
style.container({
(read("./.face") and style.container {
widget = wibox.widget.imagebox,
image = "./.face",
resize = true,
forced_height = style.lockscreen_image_height or 128,
forced_width = style.lockscreen_image_width or 128
}),
style.container {
widget = wibox.widget.textbox,
text = "Logged in as "..os.getenv("USER")
},
gen_password_prompt(),
layout = wibox.layout.fixed.vertical,
spacing = style.lockscreen_container_spacing_vertical
}),
widget = wibox.container.place
},
widget = wibox.container.background,
layout = wibox.layout.stack,
forced_width = s.geometry.width,
forced_height = s.geometry.height,
},
hide_on_right_click = false,
bgimage = function(context,cr,width,height)
local surface = gears.surface(
read("./.wallpaper") or beautiful.wallpaper
)
local bg_width,bg_height = gears.surface.get_size(surface)
local scale = height/bg_height
if width/bg_width > scale then
scale = width/bg_width
end
cr:translate((width - (bg_width*scale))/2,(height - (bg_height*scale))/2)
cr:rectangle(0,0, (bg_width*scale), (bg_height*scale))
cr:clip()
cr:scale(scale,scale)
cr:set_source_surface(surface)
cr:paint()
end,
visible = false,
ontop = true
})
awesome.connect_signal("lock_screen",function()
G_KeyboardLock:start()
s.lockscreen.visible = true
end)
G_KeyboardLock:stop()
return s
end