awesome/module/dashboard.lua

317 lines
8.8 KiB
Lua

local awful = require('awful')
local gears = require('gears')
local wibox = require('wibox')
local beautiful = require('beautiful')
local icons = require('theme.icons')
local mat_list_item = require('widget.material.list-item')
local mat_icon = require('widget.material.icon')
local clickable_container = require('widget.material.clickable-container')
local apps = require('configuration.apps')
local dpi = require('beautiful').xresources.apply_dpi
local icon_size = beautiful.dashboard_icon_size or dpi(140)
local username = os.getenv("USER")
local panel_style = gears.shape.rounded_rect
local buildButton = function(icon, name)
local button_text = wibox.widget {
text = name,
font = beautiful.font,
align = 'center',
valign = 'center',
bg = beautiful.primary.hue_900,
fg = beautiful.fg_normal,
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 = panel_style,
forced_width = dpi(60),
forced_height = dpi(60),
visible = true,
-- bg = beautiful.bg_normal,
widget = clickable_container
},
visible = true,
-- bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local build_a_button = wibox.widget {
layout = wibox.layout.fixed.horizontal,
spacing = dpi(5),
a_button
-- button_text
}
return build_a_button
end
local buildLabel = function(name)
local label_text = wibox.widget {
{
text = name,
font = beautiful.font_large,
align = 'center',
valign = 'center',
bg = beautiful.primary.hue_900,
fg = beautiful.fg_normal,
widget = wibox.widget.textbox
},
shape = panel_style,
forced_height = dpi(56),
visible = true,
-- bg = beautiful.bg_normal,
widget = clickable_container
}
local build_a_label = wibox.widget {
layout = wibox.layout.flex.horizontal,
spacing = dpi(5),
label_text
}
return build_a_label
end
function suspend_command()
dashboard_hide()
awful.spawn.with_shell(apps.default.lock .. ' & systemctl suspend')
end
function exit_command() _G.awesome.quit() end
function lock_command()
dashboard_hide()
awful.spawn.with_shell('sleep 1 && ' .. apps.default.lock)
end
function poweroff_command()
awful.spawn.with_shell('poweroff')
awful.keygrabber.stop(_G.dashboard_grabber)
end
function reboot_command()
awful.spawn.with_shell('reboot')
awful.keygrabber.stop(_G.dashboard_grabber)
end
local poweroff = buildButton(icons.power, 'Shutdown')
poweroff:connect_signal('button::release', function() poweroff_command() end)
local reboot = buildButton(icons.restart, 'Restart')
reboot:connect_signal('button::release', function() reboot_command() end)
local suspend = buildButton(icons.sleep, 'Sleep')
suspend:connect_signal('button::release', function() suspend_command() end)
local exit = buildButton(icons.logout, 'Logout')
exit:connect_signal('button::release', function() exit_command() end)
local lock = buildButton(icons.lock, 'Lock')
lock:connect_signal('button::release', function() lock_command() end)
local search = buildButton(icons.search, 'Search')
search:connect_signal('button::release', function()
-- rofi_command()
dashboard_hide()
_G.awesome.spawn(apps.default.rofi)
end)
local close = buildButton(icons.close_dark, 'Close')
close:connect_signal('button::release', function() dashboard_hide() end)
-- Get screen geometry
local screen_geometry = awful.screen.focused().geometry
-- Create the widget
dashboard = wibox({
x = screen_geometry.x,
y = screen_geometry.y,
visible = false,
ontop = true,
type = 'splash',
bg = beautiful.accent.hue_800 .. '66',
height = screen_geometry.height,
width = screen_geometry.width
})
local dashboard_grabber
function dashboard_hide()
awful.keygrabber.stop(dashboard_grabber)
dashboard.visible = false
end
function dashboard_show()
dashboard_grabber = awful.keygrabber.run(
function(_, key, event)
if event == 'release' then return end
if key == 'Escape' or key == 'q' or key == 'x' or key == 'm' then
dashboard_hide()
end
end)
dashboard.visible = true
end
dashboard:buttons(gears.table.join( -- Middle click - Hide dashboard
awful.button({}, 2, function() dashboard_hide() end),
awful.button({}, 3, function() dashboard_hide() end)))
local power_options = wibox.widget {
{
poweroff,
reboot,
suspend,
exit,
lock,
layout = wibox.layout.flex.horizontal
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local search_button = wibox.widget {
{
search,
bg = beautiful.primary.hue_600,
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local quick_settings = wibox.widget {
{
{
require('layout.left-panel.dashboard.quick-settings'),
right = dpi(16),
bottom = dpi(12),
top = dpi(12),
widget = wibox.container.margin
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
},
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local hardware_monitor = wibox.widget {
{
require('layout.left-panel.dashboard.hardware-monitor'),
right = dpi(16),
bottom = dpi(12),
top = dpi(12),
widget = wibox.container.margin
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
widget = wibox.container.background
}
local home = buildLabel('Home')
home:connect_signal('button::release', function() files_command(".") end)
local downloads = buildLabel('Downloads')
downloads:connect_signal('button::release',
function() files_command("Downloads") end)
local desktop = buildLabel('Desktop')
desktop:connect_signal('button::release',
function() files_command("Desktop") end)
local pictures = buildLabel('Pictures')
pictures:connect_signal('button::release',
function() files_command("Pictures") end)
local videos = buildLabel('Videos')
videos:connect_signal('button::release', function() files_command("Videos") end)
local documents = buildLabel('Documents')
documents:connect_signal('button::release',
function() files_command("Documents") end)
local places = wibox.widget {
{
{ home,
desktop,
downloads,
pictures,
documents,
videos,
layout = wibox.layout.fixed.vertical
},
layout = wibox.layout.fixed.vertical
},
visible = true,
bg = beautiful.bg_normal,
shape = panel_style,
forced_width = dpi(182),
widget = wibox.container.background
}
-- Item placement
dashboard:setup{
nil,
{
nil,
{
{
search_button,
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
{
{
{
quick_settings,
hardware_monitor,
forced_width = dpi(300),
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
{
places,
layout = wibox.layout.fixed.vertical
},
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
{
power_options,
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
spacing = dpi(10),
layout = wibox.layout.fixed.vertical
},
spacing = dpi(10),
layout = wibox.layout.fixed.horizontal
},
nil,
expand = 'none',
layout = wibox.layout.align.horizontal
},
{nil, expand = 'none', layout = wibox.layout.align.horizontal},
expand = 'none',
layout = wibox.layout.align.vertical
}