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")