.dotfiles/dot_config/sketchybar/items/widgets/battery.lua
2025-02-14 09:59:25 -05:00

100 lines
2.3 KiB
Lua

local icons = require("icons")
local colors = require("colors")
local settings = require("settings")
local battery = sbar.add("item", "widgets.battery", {
position = "right",
icon = {
font = {
style = settings.font.style_map["Regular"],
size = 19.0,
}
},
label = { font = { family = settings.font.numbers } },
update_freq = 180,
popup = { align = "center" }
})
local remaining_time = sbar.add("item", {
position = "popup." .. battery.name,
icon = {
string = "Time remaining:",
width = 100,
align = "left"
},
label = {
string = "??:??h",
width = 100,
align = "right"
},
})
battery:subscribe({"routine", "power_source_change", "system_woke"}, function()
sbar.exec("pmset -g batt", function(batt_info)
local icon = "!"
local label = "?"
local found, _, charge = batt_info:find("(%d+)%%")
if found then
charge = tonumber(charge)
label = charge .. "%"
end
local color = colors.green
local charging, _, _ = batt_info:find("AC Power")
if charging then
icon = icons.battery.charging
else
if found and charge > 80 then
icon = icons.battery._100
elseif found and charge > 60 then
icon = icons.battery._75
elseif found and charge > 40 then
icon = icons.battery._50
elseif found and charge > 20 then
icon = icons.battery._25
color = colors.orange
else
icon = icons.battery._0
color = colors.red
end
end
local lead = ""
if found and charge < 10 then
lead = "0"
end
battery:set({
icon = {
string = icon,
color = color
},
label = { string = lead .. label },
})
end)
end)
battery:subscribe("mouse.clicked", function(env)
local drawing = battery:query().popup.drawing
battery:set( { popup = { drawing = "toggle" } })
if drawing == "off" then
sbar.exec("pmset -g batt", function(batt_info)
local found, _, remaining = batt_info:find(" (%d+:%d+) remaining")
local label = found and remaining .. "h" or "No estimate"
remaining_time:set( { label = label })
end)
end
end)
sbar.add("bracket", "widgets.battery.bracket", { battery.name }, {
background = { color = colors.bg1 }
})
sbar.add("item", "widgets.battery.padding", {
position = "right",
width = settings.group_paddings
})