147 lines
4.0 KiB
Lua
147 lines
4.0 KiB
Lua
|
|
||
|
-- Standard awesome library
|
||
|
local gears = require("gears")
|
||
|
local awful = require("awful")
|
||
|
|
||
|
-- Widget and layout library
|
||
|
local wibox = require("wibox")
|
||
|
|
||
|
local icons = require("icons")
|
||
|
local config = require("config")
|
||
|
local vicious = require("vicious")
|
||
|
|
||
|
local util = require("util")
|
||
|
|
||
|
local backlight_widget_type = {
|
||
|
async = function (format, warg, callback)
|
||
|
awful.spawn.easy_async("xbacklight ", function (stdout)
|
||
|
callback{ round(tonumber(stdout)) }
|
||
|
end)
|
||
|
end
|
||
|
}
|
||
|
|
||
|
local function format_widget(...)
|
||
|
local result = " "
|
||
|
for _, v in ipairs({...}) do
|
||
|
result = result .. v .. " "
|
||
|
end
|
||
|
return result
|
||
|
end
|
||
|
|
||
|
local function battery_icon(percent, charging)
|
||
|
local key = ""..math.floor(util.round(percent / 10) * 10)..""
|
||
|
if charging then
|
||
|
return icons.battery.charging[key]
|
||
|
else
|
||
|
|
||
|
return icons.battery.not_charging[key]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function format_battery(widget, args)
|
||
|
return format_widget(battery_icon(args[2], args[1] == "+"), args[2])
|
||
|
end
|
||
|
|
||
|
local function format_wifi(widget, args)
|
||
|
if args["{ssid}"] ~= "N/A" then
|
||
|
return format_widget("", args["{linp}"])
|
||
|
end
|
||
|
return ""
|
||
|
end
|
||
|
|
||
|
local function format_brightness(widget, args)
|
||
|
local index = math.min(util.round(args[1] / 100 * 6 + 1), 7)
|
||
|
return format_widget(icons.brightness[index], args[1])
|
||
|
end
|
||
|
|
||
|
local function format_volume(widget, args)
|
||
|
if args[2] == "🔉" then
|
||
|
local index = math.min(util.round(args[1] / 100 * 2 + 1), 3)
|
||
|
return format_widget(icons.volume.levels[index], args[1])
|
||
|
else
|
||
|
return format_widget(icons.volume.muted, "")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function format_memory(widget, args)
|
||
|
return format_widget("", util.round(args[2] / 100) / 10 .. " GiB")
|
||
|
end
|
||
|
|
||
|
local function format_cpu(widget, args)
|
||
|
return format_widget("", args[1])
|
||
|
end
|
||
|
|
||
|
local function format_mpd(widget, args)
|
||
|
if args["{state}"] == "Stop" then
|
||
|
return ''
|
||
|
else
|
||
|
local icon = (args["{state}"] == "Pause" and "" or "")
|
||
|
return format_widget(icon,
|
||
|
('%s - %s'):format(args["{Artist}"], args["{Title}"]), icon)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function format_thermal(widget, args)
|
||
|
local key = math.floor(math.min(util.round(math.max(args[1] - 30, 0) / 60 * 4 + 1), 5))
|
||
|
return format_widget(icons.thermal[key], args[1])
|
||
|
end
|
||
|
|
||
|
volumebox = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.volume)
|
||
|
vicious.register(volumebox, vicious.widgets.volume, format_volume, 3, config.volume.options)
|
||
|
|
||
|
backlightbox = wibox.widget.textbox()
|
||
|
vicious.cache(backlight_widget_type)
|
||
|
vicious.register(backlightbox, backlight_widget_type, format_brightness, 3)
|
||
|
|
||
|
batwidget = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.bat)
|
||
|
vicious.register(batwidget, vicious.widgets.bat, format_battery, 20, config.battery)
|
||
|
|
||
|
wifiwidget = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.wifiiw)
|
||
|
vicious.register(wifiwidget, vicious.widgets.wifiiw, format_wifi, 3, config.net_interface)
|
||
|
|
||
|
cpuwidget = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.cpu)
|
||
|
vicious.register(cpuwidget, vicious.widgets.cpu, format_cpu, 1)
|
||
|
|
||
|
memwidget = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.mem)
|
||
|
vicious.register(memwidget, vicious.widgets.mem, format_memory, 1)
|
||
|
|
||
|
mpdwidget = wibox.widget.textbox()
|
||
|
mpdwidget.align = 'center'
|
||
|
vicious.cache(vicious.widgets.mpd)
|
||
|
vicious.register(mpdwidget, vicious.widgets.mpd, format_mpd)
|
||
|
|
||
|
thermalwidget = wibox.widget.textbox()
|
||
|
vicious.cache(vicious.widgets.thermal)
|
||
|
vicious.register(thermalwidget, vicious.widgets.thermal, format_thermal, 2, config.thermal_zone)
|
||
|
|
||
|
local widget_table = {
|
||
|
["mpd"] = mpdwidget,
|
||
|
["memory"] = memwidget,
|
||
|
["cpu"] = cpuwidget,
|
||
|
["volume"] = volumebox,
|
||
|
["backlight"] = backlightbox,
|
||
|
["wifi"] = wifiwidget,
|
||
|
["battery"] = batwidget,
|
||
|
["clock"] = mytextclock,
|
||
|
["thermal"] = thermalwidget,
|
||
|
}
|
||
|
|
||
|
Widgets = {}
|
||
|
|
||
|
function Widgets.get(conf)
|
||
|
local t = {}
|
||
|
|
||
|
for _, v in ipairs(conf) do
|
||
|
table.insert(t, widget_table[v])
|
||
|
end
|
||
|
|
||
|
return t
|
||
|
end
|
||
|
|
||
|
return Widgets
|