151 lines
4.2 KiB
Lua
151 lines
4.2 KiB
Lua
---------------------------------
|
|
-- This is the CPU Info widget --
|
|
---------------------------------
|
|
|
|
-- Awesome Libs
|
|
local awful = require("awful")
|
|
local color = require("src.theme.colors")
|
|
local dpi = require("beautiful").xresources.apply_dpi
|
|
local gears = require("gears")
|
|
local watch = awful.widget.watch
|
|
local wibox = require("wibox")
|
|
require("src.core.signals")
|
|
|
|
local icon_dir = awful.util.getdir("config") .. "src/assets/icons/cpu/"
|
|
|
|
return function(widget)
|
|
local gpu_usage_widget = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
id = "icon",
|
|
widget = wibox.widget.imagebox,
|
|
image = gears.color.recolor_image(icon_dir .. "gpu.svg", color["Grey900"]),
|
|
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 = "gpu_layout",
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
id = "container",
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = color["Green200"],
|
|
fg = color["Grey900"],
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, 5)
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
Hover_signal(gpu_usage_widget, color["Green200"], color["Grey900"])
|
|
|
|
local gpu_temp_widget = wibox.widget {
|
|
{
|
|
{
|
|
{
|
|
{
|
|
{
|
|
id = "icon",
|
|
widget = wibox.widget.imagebox,
|
|
image = gears.color.recolor_image(icon_dir .. "cpu.svg", color["Grey900"]),
|
|
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 = "gpu_layout",
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
id = "container",
|
|
left = dpi(8),
|
|
right = dpi(8),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = color["Blue200"],
|
|
fg = color["Grey900"],
|
|
shape = function(cr, width, height)
|
|
gears.shape.rounded_rect(cr, width, height, 5)
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
-- GPU Utilization
|
|
watch(
|
|
[[ bash -c "nvidia-smi -q -d UTILIZATION | grep Gpu | awk '{print $3}'"]],
|
|
3,
|
|
function(_, stdout)
|
|
gpu_usage_widget.container.gpu_layout.label.text = stdout:gsub("\n", "") .. "%"
|
|
awesome.emit_signal("update::gpu_usage_widget", tonumber(stdout))
|
|
end
|
|
)
|
|
|
|
-- GPU Temperature
|
|
watch(
|
|
[[ bash -c "nvidia-smi -q -d TEMPERATURE | grep 'GPU Current Temp' | awk '{print $5}'"]],
|
|
3,
|
|
function(_, stdout)
|
|
|
|
local temp_icon
|
|
local temp_color
|
|
local temp_num = tonumber(stdout)
|
|
|
|
if temp_num then
|
|
|
|
if temp_num < 50 then
|
|
temp_color = color["Green200"]
|
|
temp_icon = icon_dir .. "thermometer-low.svg"
|
|
elseif temp_num >= 50 and temp_num < 80 then
|
|
temp_color = color["Orange200"]
|
|
temp_icon = icon_dir .. "thermometer.svg"
|
|
elseif temp_num >= 80 then
|
|
temp_color = color["Red200"]
|
|
temp_icon = icon_dir .. "thermometer-high.svg"
|
|
end
|
|
else
|
|
temp_num = "NaN"
|
|
temp_color = color["Green200"]
|
|
temp_icon = icon_dir .. "thermometer-low.svg"
|
|
end
|
|
Hover_signal(gpu_temp_widget, temp_color, color["Grey900"])
|
|
gpu_temp_widget.container.gpu_layout.icon_margin.icon_layout.icon:set_image(temp_icon)
|
|
gpu_temp_widget:set_bg(temp_color)
|
|
gpu_temp_widget.container.gpu_layout.label.text = tostring(temp_num) .. "°C"
|
|
awesome.emit_signal("update::gpu_temp_widget", temp_num, temp_icon)
|
|
|
|
end
|
|
)
|
|
|
|
if widget == "usage" then
|
|
return gpu_usage_widget
|
|
elseif widget == "temp" then
|
|
return gpu_temp_widget
|
|
end
|
|
end
|