dots/.config/awesome/ui/statusbar/init.lua

166 lines
6 KiB
Lua

local awful = require "awful"
local beautiful = require "beautiful"
local qvars = require "quarrel.vars"
local wibox = require "wibox"
local qui = require "quarrel.ui"
local gcolor = require "gears.color"
local gdebug = require "gears.debug"
local phosphor = require "assets.phosphor"
local qbind = require "quarrel.bind"
local q = require "quarrel"
local rubato = require "lib.rubato"
local taglist = require "ui.statusbar.widgets.taglist"
local clock = require "ui.statusbar.widgets.clock"
local wifi = require "ui.statusbar.widgets.wifi"
local battery = require "ui.statusbar.widgets.battery"
local brightness = require "ui.statusbar.widgets.brightness"
local keyboardlayout = require "ui.statusbar.widgets.keyboardlayout"
screen.connect_signal("request::desktop_decoration", function(s)
local expand_button = wibox.widget {
widget = wibox.container.place,
valign = "center",
halign = "center",
{
widget = wibox.widget.imagebox,
image = gcolor.recolor_image(phosphor.caret_right_fill, qvars.colors.fg),
forced_width = qvars.icon_size,
forced_height = qvars.icon_size
},
_expanded = false
}
local bar = qui.popup {
placement = function(d)
local place = awful.placement.left
return place(d, {
margins = beautiful.useless_gap * 2
})
end,
minimum_height = s.geometry.height - (beautiful.useless_gap * 4 + qvars.border_width * 2),
widget = {
{
nil,
{
{
expand_button,
taglist,
layout = wibox.layout.fixed.vertical,
spacing = qvars.padding * 2,
},
nil,
{
widget = wibox.container.place,
valign = "bottom",
{
brightness,
battery,
wifi,
{
widget = wibox.container.place,
keyboardlayout
},
clock,
layout = wibox.layout.fixed.vertical,
spacing = qvars.padding * 2
},
},
layout = wibox.layout.align.vertical,
expand = "outside",
},
nil,
layout = wibox.layout.align.horizontal
},
nil,
nil,
layout = wibox.layout.align.horizontal,
}
}
local bar_width = bar.width
bar:struts {
-- left = qvars.bar_size + qvars.big_padding * 2 + beautiful.useless_gap * 4
-- left = qvars.bar_size + qvars.border_width * 2 + beautiful.useless_gap * 4
left = bar_width + qvars.border_width * 2 + beautiful.useless_gap * 4
}
local timed = rubato.timed {
duration = qvars.anim_duration,
intro = qvars.anim_intro,
pos = bar_width,
subscribed = function(pos)
if pos ~= bar_width and expand_button._expanded then
bar.widget.widget.third = wibox.widget {
{
widget = wibox.container.margin,
margins = {
left = qvars.big_padding
}
},
{
widget = wibox.container.constraint,
width = qvars.bar_size * 6,
strategy = "min",
{
{
{
widget = wibox.container.background,
bg = qvars.colors.black,
{
widget = wibox.widget.textbox,
text = "1"
}
},
{
widget = wibox.container.background,
bg = qvars.colors.black,
{
widget = wibox.widget.textbox,
text = "2"
}
},
{
widget = wibox.container.background,
bg = qvars.colors.black,
{
widget = wibox.widget.textbox,
text = "3"
}
},
spacing = qvars.padding,
layout = wibox.layout.flex.horizontal
},
layout = wibox.layout.fixed.vertical
}
},
layout = wibox.layout.fixed.horizontal
}
bar.ontop = true
elseif pos == bar_width and not expand_button._expanded then
bar.widget.widget.third = nil
bar.ontop = false
end
bar.maximum_width = pos
end
}
expand_button.buttons = {
qbind:new {
triggers = qvars.btns.left,
press = function()
if expand_button._expanded then
timed.target = bar_width
else
timed.target = bar_width + qvars.bar_size * 6
end
expand_button._expanded = not expand_button._expanded
end,
hidden = true
}
}
end)