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 }