AwesomeWM configuration files
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.

208 lines
6.3 KiB

local awful = require("awful")
local gears = require("gears")
local wibox = require("wibox")
local beautiful = require("beautiful")
local apps = require("apps")
-- local naughty = require("naughty")
local helpers = require("helpers")
-- Appearance
local button_size = beautiful.app_drawer_icon_size or dpi(100)
--
local keybinds = {}
-- Helper function that creates buttons given a text symbol, color, hover_color
-- and the command to run on click.
local function create_button(symbol, color, hover_color, cmd, key)
local icon = wibox.widget {
markup = helpers.colorize_text(symbol, color),
align = "center",
valign = "center",
font = "icomoon 50",
forced_width = dpi(180),
forced_height = dpi(200),
widget = wibox.widget.textbox
}
-- Press "animation"
icon:connect_signal("button::press", function(_, _, __, button)
if button == 3 then
icon.markup = helpers.colorize_text(symbol, hover_color.."55")
end
end)
icon:connect_signal("button::release", function ()
icon.markup = helpers.colorize_text(symbol, hover_color)
end)
-- Hover "animation"
icon:connect_signal("mouse::enter", function ()
icon.markup = helpers.colorize_text(symbol, hover_color)
end)
icon:connect_signal("mouse::leave", function ()
icon.markup = helpers.colorize_text(symbol, color)
end)
-- Change cursor on hover
helpers.add_hover_cursor(icon, "hand1")
-- Adds mousebinds if cmd is provided
if cmd then
icon:buttons(gears.table.join(
awful.button({ }, 1, function ()
cmd()
end),
awful.button({ }, 3, function ()
cmd()
end)
))
end
-- Add keybind to dict, if given
if key then
keybinds[key] = cmd
end
return icon
end
-- Create app buttons
local browser = create_button("", x.color3, x.color11, apps.browser, "w")
local discord = create_button("", x.color5, x.color13, apps.discord, "d")
local telegram = create_button("", x.color4, x.color12, apps.telegram, "t")
local mail = create_button("", x.color6, x.color14, apps.mail, "m")
local files = create_button("", x.color3, x.color11, apps.file_manager, "f")
local gimp = create_button("", x.color5, x.color13, apps.gimp, "g")
local youtube = create_button("", x.color1, x.color9, apps.youtube, "y")
local networks = create_button("", x.color3, x.color11, apps.networks, "n")
local passwords = create_button("", x.color1, x.color9, apps.passwords, "p")
local night_mode = create_button("", x.color1, x.color9, apps.night_mode, "x")
local record = create_button("", x.color4, x.color12, apps.record, "r")
local lutris = create_button("", x.color6, x.color14, apps.lutris, "l")
local steam = create_button("", x.color2, x.color10, apps.steam, "s")
local org = create_button("", x.color2, x.color10, apps.org, "o")
local compositor = create_button("", x.color5, x.color13, apps.compositor, "z")
local restart_awesome = create_button("", x.color4, x.color12)
restart_awesome:buttons(gears.table.join(
awful.button({ }, 1, awesome.restart)
))
-- Create the widget
app_drawer = wibox({visible = false, ontop = true, type = "dock"})
awful.placement.maximize(app_drawer)
app_drawer.bg = "#00000000"
-- app_drawer.bg = beautiful.app_drawer_bg or x.background or "#111111"
app_drawer.fg = beautiful.app_drawer_fg or x.foreground or "#FEFEFE"
-- Add app drawer or mask to each screen
for s in screen do
if s == screen.primary then
s.app_drawer = app_drawer
else
s.app_drawer = helpers.screen_mask(s, beautiful.lock_screen_bg or beautiful.exit_screen_bg or x.background)
end
end
local function set_visibility(v)
for s in screen do
s.app_drawer.visible = v
end
end
local app_drawer_grabber
function app_drawer_hide()
awful.keygrabber.stop(app_drawer_grabber)
set_visibility(false)
end
function app_drawer_show()
-- naughty.notify({text = "starting the keygrabber"})
app_drawer_grabber = awful.keygrabber.run(function(_, key, event)
local invalid_key = false
-- Debug
-- naughty.notify({ title = event, text = key })
-- if event == "press" and key == "Alt_L" or key == "Alt_R" then
-- naughty.notify({ title = "you pressed alt" })
-- end
-- if event == "release" and key == "Alt_L" or key == "Alt_R" then
-- naughty.notify({ title = "you released alt" })
-- end
if event == "release" then return end
if keybinds[key] then
keybinds[key]()
else
invalid_key = true
end
if not invalid_key or key == 'Escape' then
app_drawer_hide()
end
end)
set_visibility(true)
end
app_drawer:buttons(gears.table.join(
-- Left click - Hide app_drawer
awful.button({ }, 1, function ()
app_drawer_hide()
end),
-- Right click - Hide app_drawer
awful.button({ }, 2, function ()
app_drawer_hide()
end),
-- Middle click - Hide app_drawer
awful.button({ }, 2, function ()
app_drawer_hide()
end)
))
local function create_stripe(widgets, bg)
local buttons = wibox.widget {
-- spacing = dpi(20),
layout = wibox.layout.fixed.horizontal
}
for _, widget in ipairs(widgets) do
buttons:add(widget)
end
local stripe = wibox.widget {
{
nil,
{
nil,
buttons,
expand = "none",
layout = wibox.layout.align.horizontal
},
expand = "none",
layout = wibox.layout.align.vertical
},
bg = bg,
widget = wibox.container.background
}
return stripe
end
app_drawer:setup {
-- Background
{
-- Stripes
create_stripe({browser, youtube, discord, telegram}, "#00000000"),
create_stripe({mail, org, files, passwords}, x.color8.."20"),
create_stripe({gimp, record, lutris, steam}, x.color8.."40"),
create_stripe({networks, night_mode, compositor, restart_awesome}, x.color8.."60"),
layout = wibox.layout.flex.vertical
},
bg = x.background,
-- bg = x.background.."AA",
-- bg = "#00000000",
widget = wibox.container.background
}