AwesomeFiles/config/awesome/ui/central-panel/dashboard/stats.lua
VincentKnightTesting 0cc6886341 updated
2022-04-25 09:51:27 -05:00

188 lines
4.1 KiB
Lua

-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
-- Widget library
local wibox = require("wibox")
-- rubato
local rubato = require("module.rubato")
-- Helpers
local helpers = require("helpers")
-- Stats
----------
local stats_text = wibox.widget({
font = beautiful.font_name .. "medium 8",
markup = helpers.colorize_text("Stats", beautiful.dashboard_box_fg),
valign = "center",
widget = wibox.widget.textbox,
})
-- Vars
local vol_color = beautiful.xcolor4
local brightness_color = beautiful.xcolor5
local cpu_color = beautiful.xcolor6
local ram_color = beautiful.xcolor2
-- Helpers
local function create_slider_widget(slider_color)
local slider_widget = wibox.widget({
{
id = "slider",
max_value = 100,
value = 20,
background_color = slider_color .. "44",
color = slider_color,
shape = gears.shape.rounded_rect,
bar_shape = gears.shape.rounded_rect,
widget = wibox.widget.progressbar,
},
forced_width = dpi(4),
forced_height = dpi(145),
direction = "east",
widget = wibox.container.rotate,
})
return slider_widget
end
local stats_tooltip = wibox.widget({
visible = false,
top_only = true,
layout = wibox.layout.stack,
})
local tooltip_counter = 0
local function create_tooltip(w)
local tooltip = wibox.widget({
font = beautiful.font_name .. "medium 8",
align = "right",
valign = "center",
widget = wibox.widget.textbox,
})
tooltip_counter = tooltip_counter + 1
local index = tooltip_counter
stats_tooltip:insert(index, tooltip)
w:connect_signal("mouse::enter", function()
-- Raise tooltip to the top of the stack
stats_tooltip:set(1, tooltip)
stats_tooltip.visible = true
end)
w:connect_signal("mouse::leave", function()
stats_tooltip.visible = false
end)
return tooltip
end
-- Widget
local vol = create_slider_widget(vol_color)
local brightness = create_slider_widget(brightness_color)
local cpu = create_slider_widget(cpu_color)
local ram = create_slider_widget(ram_color)
local vol_tooltip = create_tooltip(vol)
local brightness_tooltip = create_tooltip(brightness)
local cpu_tooltip = create_tooltip(cpu)
local ram_tooltip = create_tooltip(ram)
awesome.connect_signal("signal::volume", function(value, muted)
local fill_color
local vol_value = value or 0
if muted then
fill_color = beautiful.xcolor8
else
fill_color = vol_color
end
vol.slider.value = vol_value
vol.slider.color = fill_color
vol_tooltip.markup = helpers.colorize_text(vol_value .. "%", vol_color)
end)
awesome.connect_signal("signal::brightness", function(value)
brightness.slider.value = value
brightness_tooltip.markup = helpers.colorize_text(value .. "%", brightness_color)
end)
awesome.connect_signal("signal::cpu", function(value)
cpu.slider.value = value
cpu_tooltip.markup = helpers.colorize_text(value .. "%", cpu_color)
end)
awesome.connect_signal("signal::ram", function(used, total)
local r_average = (used / total) * 100
local r_used = string.format("%.1f", used / 1000) .. "G"
ram.slider.value = r_average
ram_tooltip.markup = helpers.colorize_text(r_used, ram_color)
end)
vol:buttons(gears.table.join(
awful.button({}, 1, function()
helpers.volume_control(0)
end),
-- Scrolling
awful.button({}, 4, function()
helpers.volume_control(5)
end),
awful.button({}, 5, function()
helpers.volume_control(-5)
end)
))
brightness:buttons(gears.table.join(
-- Scrolling
awful.button({}, 4, function()
awful.spawn.with_shell("brightnessctl set 5%+ -q")
end),
awful.button({}, 5, function()
awful.spawn.with_shell("brightnessctl set 5%- -q")
end)
))
local stats = wibox.widget({
{
stats_text,
nil,
stats_tooltip,
expand = "none",
layout = wibox.layout.align.horizontal,
},
{
nil,
{
nil,
{
vol,
brightness,
cpu,
ram,
spacing = dpi(24),
layout = wibox.layout.fixed.horizontal,
},
expand = "none",
layout = wibox.layout.fixed.vertical,
},
expand = "none",
layout = wibox.layout.align.horizontal,
},
spacing = dpi(10),
layout = wibox.layout.fixed.vertical,
})
return stats