mirror of
https://github.com/elenapan/dotfiles.git
synced 2026-01-13 01:58:01 +08:00
209 lines
6.3 KiB
Lua
209 lines
6.3 KiB
Lua
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 performance = create_button("", x.color5, x.color13, apps.performance_mode, "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, performance, restart_awesome}, x.color8.."60"),
|
|
layout = wibox.layout.flex.vertical
|
|
},
|
|
bg = x.background,
|
|
-- bg = x.background.."AA",
|
|
-- bg = "#00000000",
|
|
widget = wibox.container.background
|
|
}
|
|
|