229 lines
6.2 KiB
Lua
229 lines
6.2 KiB
Lua
---------------------------------
|
|
-- This is the CPU Info widget --
|
|
---------------------------------
|
|
|
|
-- Awesome Libs
|
|
local awful = require("awful")
|
|
local dpi = require("beautiful").xresources.apply_dpi
|
|
local gears = require("gears")
|
|
local wibox = require("wibox")
|
|
|
|
local color = require("src.lib.color")
|
|
local rubato = require("src.lib.rubato")
|
|
|
|
local capi = {
|
|
awesome = awesome,
|
|
}
|
|
|
|
local icon_dir = awful.util.getdir("config") .. "src/assets/icons/cpu/"
|
|
|
|
--TODO: Add tooltip with more CPU and per core information
|
|
return function(widget, _)
|
|
|
|
local cpu_usage_widget = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
id = "icon",
|
|
widget = wibox.widget.imagebox,
|
|
valign = "center",
|
|
halign = "center",
|
|
image = gears.color.recolor_image(icon_dir .. "cpu.svg", Theme_config.cpu_usage.fg),
|
|
resize = false
|
|
},
|
|
id = "icon_layout",
|
|
widget = wibox.container.place
|
|
},
|
|
top = dpi(2),
|
|
widget = wibox.container.margin,
|
|
id = "icon_margin"
|
|
},
|
|
spacing = dpi(10),
|
|
{
|
|
id = "label",
|
|
align = "center",
|
|
valign = "center",
|
|
widget = wibox.widget.textbox
|
|
},
|
|
id = "cpu_layout",
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
id = "container",
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = Theme_config.cpu_usage.bg,
|
|
fg = Theme_config.cpu_usage.fg,
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, dpi(6))
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
local cpu_temp = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
id = "icon",
|
|
image = gears.color.recolor_image(icon_dir .. "thermometer.svg", Theme_config.cpu_temp.fg),
|
|
widget = wibox.widget.imagebox,
|
|
valign = "center",
|
|
halign = "center",
|
|
resize = false
|
|
},
|
|
id = "icon_layout",
|
|
widget = wibox.container.place
|
|
},
|
|
top = dpi(2),
|
|
widget = wibox.container.margin,
|
|
id = "icon_margin"
|
|
},
|
|
spacing = dpi(10),
|
|
{
|
|
id = "label",
|
|
align = "center",
|
|
valign = "center",
|
|
widget = wibox.widget.textbox
|
|
},
|
|
id = "cpu_layout",
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
id = "container",
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = Theme_config.cpu_temp.bg_low,
|
|
fg = Theme_config.cpu_temp.fg,
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, dpi(6))
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
local cpu_clock = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
id = "icon",
|
|
widget = wibox.widget.imagebox,
|
|
valign = "center",
|
|
halign = "center",
|
|
image = gears.color.recolor_image(icon_dir .. "cpu.svg", Theme_config.cpu_freq.fg),
|
|
resize = false
|
|
},
|
|
id = "icon_layout",
|
|
widget = wibox.container.place
|
|
},
|
|
top = dpi(2),
|
|
widget = wibox.container.margin,
|
|
id = "icon_margin"
|
|
},
|
|
spacing = dpi(10),
|
|
{
|
|
id = "label",
|
|
align = "center",
|
|
valign = "center",
|
|
widget = wibox.widget.textbox
|
|
},
|
|
id = "cpu_layout",
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
id = "container",
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = Theme_config.cpu_freq.bg,
|
|
fg = Theme_config.cpu_freq.fg,
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, dpi(6))
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
capi.awesome.connect_signal(
|
|
"update::cpu_usage",
|
|
function(usage)
|
|
cpu_usage_widget.container.cpu_layout.label.text = usage .. "%"
|
|
end
|
|
)
|
|
|
|
local r_timed_cpu_bg = rubato.timed { duration = 2.5 }
|
|
local g_timed_cpu_bg = rubato.timed { duration = 2.5 }
|
|
local b_timed_cpu_bg = rubato.timed { duration = 2.5 }
|
|
|
|
r_timed_cpu_bg.pos, g_timed_cpu_bg.pos, b_timed_cpu_bg.pos = color.utils.hex_to_rgba(Theme_config.cpu_temp.bg_low)
|
|
|
|
-- Subscribable function to have rubato set the bg/fg color
|
|
local function update_bg()
|
|
cpu_temp:set_bg("#" .. color.utils.rgba_to_hex { r_timed_cpu_bg.pos, g_timed_cpu_bg.pos, b_timed_cpu_bg.pos })
|
|
end
|
|
|
|
r_timed_cpu_bg:subscribe(update_bg)
|
|
g_timed_cpu_bg:subscribe(update_bg)
|
|
b_timed_cpu_bg:subscribe(update_bg)
|
|
|
|
-- Both functions to set a color, if called they take a new color
|
|
local function set_bg(newbg)
|
|
r_timed_cpu_bg.target, g_timed_cpu_bg.target, b_timed_cpu_bg.target = color.utils.hex_to_rgba(newbg)
|
|
end
|
|
|
|
capi.awesome.connect_signal(
|
|
"update::cpu_temp",
|
|
function(temp)
|
|
local temp_icon
|
|
local temp_color
|
|
|
|
if temp < 50 then
|
|
temp_color = Theme_config.cpu_temp.bg_low
|
|
temp_icon = icon_dir .. "thermometer-low.svg"
|
|
elseif temp >= 50 and temp < 80 then
|
|
temp_color = Theme_config.cpu_temp.bg_mid
|
|
temp_icon = icon_dir .. "thermometer.svg"
|
|
elseif temp >= 80 then
|
|
temp_color = Theme_config.cpu_temp.bg_high
|
|
temp_icon = icon_dir .. "thermometer-high.svg"
|
|
end
|
|
cpu_temp.container.cpu_layout.icon_margin.icon_layout.icon:set_image(temp_icon)
|
|
set_bg(temp_color)
|
|
cpu_temp.container.cpu_layout.label.text = math.floor(temp) .. "°C"
|
|
capi.awesome.emit_signal("update::cpu_temp_widget", temp, temp_icon)
|
|
end
|
|
)
|
|
|
|
capi.awesome.connect_signal(
|
|
"update::cpu_freq_average",
|
|
function(average)
|
|
cpu_clock.container.cpu_layout.label.text = average .. "Mhz"
|
|
end
|
|
)
|
|
|
|
capi.awesome.connect_signal(
|
|
"update::cpu_freq_core",
|
|
function(freq)
|
|
cpu_clock.container.cpu_layout.label.text = freq .. "Mhz"
|
|
end
|
|
)
|
|
|
|
Hover_signal(cpu_temp)
|
|
Hover_signal(cpu_usage_widget)
|
|
Hover_signal(cpu_clock)
|
|
|
|
if widget == "usage" then
|
|
return cpu_usage_widget
|
|
elseif widget == "temp" then
|
|
return cpu_temp
|
|
elseif widget == "freq" then
|
|
return cpu_clock
|
|
end
|
|
|
|
end
|