dots/.config/awesome/services/common.lua
delta f42a3a2cc9 major update of awesome config
add new icons, switch over to using stylesheets instead of gears.color.recolor_image, add a music widget to the panel, optimize services in common.lua, fix the application lense filtering and increase the update rate of services in common.lua

Signed-off-by: delta <darkussdelta@gmail.com>
2023-05-21 10:12:46 +02:00

147 lines
4.7 KiB
Lua

local gfs = require "gears.filesystem"
local gtimer = require "gears.timer"
local phosphor = require "assets.phosphor"
local qfs = require "quarrel.fs"
local qjson = require "quarrel.json"
local qmath = require "quarrel.math"
local qnative = require "quarrel.native"
local qstore = require "quarrel.store"
local qvars = require "quarrel.vars"
local q = require "quarrel"
local function register(name, service, icon)
gtimer {
timeout = 0.5,
call_now = true,
autostart = true,
callback = function()
local service_result = table.pack(service())
awesome.emit_signal("services::" .. name, table.unpack(service_result))
awesome.emit_signal("services::" .. name .. "::icon", icon(table.unpack(service_result)))
end
}
end
local function read(file, format)
local content = file:read(format or "a")
file:seek("set")
return content
end
-- create file in case it's not there yet
if not gfs.file_readable("/tmp/wp_audio_status") then
assert(io.open("/tmp/wp_audio_status", "w")):write("{}"):close()
end
qstore.audio_file = assert(io.open("/tmp/wp_audio_status", "r"))
qstore.battery_capacity_file = assert(io.open("/sys/class/power_supply/BAT0/capacity", "r"))
qstore.battery_status_file = assert(io.open("/sys/class/power_supply/BAT0/status", "r"))
qstore.brightness_file = assert(io.open("/sys/class/backlight/amdgpu_bl0/actual_brightness", "r"))
qstore.wifi_file = assert(io.open("/proc/net/wireless", "r"))
-- follows the format `service = { provider, icon_provider }`
local services = {
audio = {
-- volume, muted
function()
local audio_status = qjson.decode(read(qstore.audio_file))
local default_sink = audio_status["G435 Wireless Gaming Headset Analog Stereo"]
if not default_sink then
return nil, false
end
return default_sink.volume, default_sink.muted
end,
function(volume, muted)
if muted or not volume then
return phosphor.speaker_simple_x_fill, qvars.colors.red
end
local icon_data = qmath.step_value(volume, {
{ 0, "slash" },
{ 25, "none" },
{ 50, "low" },
{ 75, "high" },
{ 100 }
})
return phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg
end
},
battery = {
-- capacity, status
function()
return read(qstore.battery_capacity_file, "n"), read(qstore.battery_status_file, "l")
end,
function(capacity, status)
local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
{ 0, { "empty", "red" } },
{ 20, { "low", "red" } },
{ 40, { "medium", "yellow" } },
{ 60, { "high", "green" } },
{ 80, { "full", "green" } },
{ 100 }
})
return phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]]
end
},
brightness = {
-- brightness
function()
return read(qstore.brightness_file, "n")
end,
function(brightness)
local icon_data = qmath.step_value(brightness, {
{ 0, "cloud_moon" },
{ 51, "moon" },
{ 102, "sun_horizon" },
{ 153, "sun_dim" },
{ 204, "sun" },
{ 255 }
})
return phosphor[icon_data .. "_fill"], qvars.colors.fg
end
},
wifi = {
-- essid, strength, connected
function()
local lines = {}
for line in qstore.wifi_file:lines() do
table.insert(lines, line)
end
qstore.wifi_file:seek("set")
if not lines[3] then
return nil, 0, false
end
local strength = lines[3]:match("^%s*(.*)"):match("^.-%s+.-%s+.-(%S+)%.")
return qnative.get_essid(), math.floor(tonumber(strength) * 10 / 7), true
end,
function(_, strength, connected)
if not connected then
return phosphor.wifi_x_fill, qvars.colors.red
end
local icon_data = qmath.step_value(strength, {
{ 0, { "none", "red" } },
{ 25, { "low", "yellow" } },
{ 50, { "medium", "yellow" } },
{ 75, { "high", "green" } },
{ 100 }
})
return phosphor["wifi_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]]
end
}
}
for name, service in pairs(services) do
register(name, service[1], service[2])
end