local constants = require 'constants' local settings = require 'config.settings' local isCharging = false local battery = sbar.add('item', constants.items.battery, { position = 'right', update_freq = 60, }) local batteryPopup = sbar.add('item', { position = 'popup.' .. battery.name, width = 'dynamic', label = { padding_right = settings.dimens.padding.label, padding_left = settings.dimens.padding.label, }, icon = { padding_left = 0, padding_right = 0, }, }) battery:subscribe({ 'routine', 'power_source_change', 'system_woke' }, function() sbar.exec('pmset -g batt', function(batteryInfo) local icon = '!' local label = '?' local found, _, charge = batteryInfo:find '(%d+)%%' if found then charge = tonumber(charge) label = charge .. '%' end local color = settings.colors.green local charging, _, _ = batteryInfo:find 'AC Power' isCharging = charging if charging then icon = settings.icons.text.battery.charging else if found and charge > 80 then icon = settings.icons.text.battery._100 elseif found and charge > 60 then icon = settings.icons.text.battery._75 elseif found and charge > 40 then icon = settings.icons.text.battery._50 elseif found and charge > 30 then icon = settings.icons.text.battery._50 color = settings.colors.yellow elseif found and charge > 20 then icon = settings.icons.text.battery._25 color = settings.colors.orange else icon = settings.icons.text.battery._0 color = settings.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, padding_left = 0, }, } 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(batteryInfo) local found, _, remaining = batteryInfo:find '(%d+:%d+) remaining' local label = found and ('Time remaining: ' .. remaining .. 'h') or (isCharging and 'Charging' or 'No estimate') batteryPopup:set { label = label } end) end end)