summaryrefslogtreecommitdiff
path: root/widgets/cpu.lua
diff options
context:
space:
mode:
authorTim Keller <tjk@tjkeller.xyz>2024-10-18 21:49:17 -0500
committerTim Keller <tjk@tjkeller.xyz>2024-10-18 21:49:17 -0500
commit923eb46350b1102749eb05cd2120c96cc6a715d0 (patch)
tree811da20b4195d4b5c65c8ac0090982a4a23f6a7d /widgets/cpu.lua
downloadawesome-923eb46350b1102749eb05cd2120c96cc6a715d0.tar.xz
awesome-923eb46350b1102749eb05cd2120c96cc6a715d0.zip
initial commit
Diffstat (limited to 'widgets/cpu.lua')
-rw-r--r--widgets/cpu.lua38
1 files changed, 38 insertions, 0 deletions
diff --git a/widgets/cpu.lua b/widgets/cpu.lua
new file mode 100644
index 0000000..d92bce8
--- /dev/null
+++ b/widgets/cpu.lua
@@ -0,0 +1,38 @@
+local wibox = require("wibox")
+local widgets = require("util.widgets")
+
+-- this is directly adapted from slstatus's cpu.c module
+local cpu_time = { 0,0,0,0,0,0,0 } -- user, nice, system, idle, iowait, irq, softirq
+
+function linux_cpu_usage(widget)
+ -- read stat
+ local statf = io.open("/proc/stat")
+ local stat_iter = statf:read():gmatch("%d+")
+ statf:close()
+
+ -- calc
+ local sum = 0
+ local a, b = cpu_time, {} -- set cpu_time as a for smaller code
+ table.move(a, 1, 7, 1, b) -- copy first 7 to b
+
+ for i = 1, 7 do
+ a[i] = stat_iter()
+ sum = sum + b[i] - a[i]
+ end
+
+ if sum == 0 then
+ return
+ end
+
+ local usage = ((b[1] + b[2] + b[3] + b[6] + b[7]) -
+ (a[1] + a[2] + a[3] + a[6] + a[7])) * 100 / sum
+
+ widget:set_text(math.floor(usage))
+end
+
+-- return correct widget for os
+if osname == "Linux" then
+ return widgets.watchfn(linux_cpu_usage, 5)
+end
+
+return wibox.widget.textbox("unsupported os")