dots/.config/awesome/services/common.lua

119 lines
4 KiB
Lua

local qfs = require "quarrel.fs"
local gfs = require "gears.filesystem"
local qservice = require "quarrel.service"
local qjson = require "quarrel.json"
local qnative = require "quarrel.native"
local gcolor = require "gears.color"
local qmath = require "quarrel.math"
local phosphor = require "assets.phosphor"
local qvars = require "quarrel.vars"
-- follows the format `service = { provider, icon_provider }`
local services = {
audio = {
-- volume, muted
function()
if not gfs.file_readable("/tmp/wp_audio_status") then
awesome.emit_signal("services::audio", -1, false)
return
end
local audio_status = qjson.decode(qfs.read("/tmp/wp_audio_status"))
local default_sink = audio_status["alsa_output.usb-046d_G435_Wireless_Gaming_Headset_V001008005.1-01.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 gcolor.recolor_image(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 }
})
gcolor.recolor_image(phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg)
end
},
battery = {
-- capacity, status
function()
return qfs.read("/sys/class/power_supply/BAT0/capacity", "n"), qfs.read("/sys/class/power_supply/BAT0/status", "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 gcolor.recolor_image(phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])
end
},
brightness = {
-- brightness
function()
return qfs.read("/sys/class/backlight/amdgpu_bl0/actual_brightness", "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 gcolor.recolor_image(phosphor[icon_data .. "_fill"], qvars.colors.fg)
end
},
wifi = {
-- essid, strength, connected
function()
local lines = {}
for line in io.lines("/proc/net/wireless") do
table.insert(lines, line)
end
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 gcolor.recolor_image(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 gcolor.recolor_image(phosphor["wifi_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])
end
}
}
for name, service in pairs(services) do
qservice.register(name, service[1], service[2])
end