nixos-config/modules/home-manager/ricing/awesomewm/dotfiles/ui/control/mods/slider.lua
2024-07-12 18:19:30 +09:00

107 lines
2.7 KiB
Lua

local wibox = require("wibox")
local awful = require("awful")
local beautiful = require("beautiful")
local dpi = require("beautiful").xresources.apply_dpi
local gears = require("gears")
local helpers = require("helpers")
local createHandle = function()
return function(cr)
gears.shape.rounded_rect(cr, 20, 20, 15)
end
end
local createSlider = function(icon, signal, command)
local slidSlider = wibox.widget {
bar_shape = helpers.rrect(15),
bar_height = 3,
handle_color = beautiful.bg,
bar_color = beautiful.bg .. '00',
bar_active_color = beautiful.fg,
handle_shape = createHandle(),
handle_border_width = 2,
handle_width = dpi(20),
handle_margins = { top = 5.9 },
handle_border_color = beautiful.fg,
value = 25,
forced_height = 35,
maximum = 100,
widget = wibox.widget.slider,
}
local slidLabel = wibox.widget {
font = beautiful.sans .. " Bold 12",
markup = "86" .. "%",
valign = "center",
widget = wibox.widget.textbox,
}
local slidLabelBox = wibox.widget {
slidLabel,
widget = wibox.container.margin,
margins = {
left = dpi(16),
}
}
local slidIcon = wibox.widget {
{
font = beautiful.icon .. " 15",
markup = helpers.colorizeText(icon, beautiful.fg),
valign = "center",
widget = wibox.widget.textbox,
},
widget = wibox.container.margin,
}
local slidScale = wibox.widget {
nil,
{
{
slidIcon,
widget = wibox.container.place,
valign = "center",
halign = "left"
},
{
{
{
widget = wibox.container.background,
forced_height = 2,
shape = helpers.rrect(10),
bg = beautiful.mbg
},
widget = wibox.container.place,
content_fill_horizontal = true,
valign = "center",
},
slidSlider,
layout = wibox.layout.stack,
},
layout = wibox.layout.fixed.horizontal,
spacing = 20
},
nil,
layout = wibox.layout.align.horizontal,
}
awesome.connect_signal('signal::' .. signal, function(value)
slidSlider.value = value
end)
slidSlider:connect_signal("property::value", function(_, new_value)
awful.spawn.with_shell(string.format(command, new_value))
end)
return slidScale
end
local widget = wibox.widget {
createSlider("󰃟", "brightness", "brightnessctl s %d%%"),
createSlider("󰓃", "volume", "pamixer --set-volume %d"),
layout = wibox.layout.fixed.vertical,
spacing = 25,
}
return widget