#!/usr/bin/env lua local function read(path) local f = io.open(path) if not f then return nil end local v = tonumber(f:read('*l')) f:close() return v end local function batterytext() local base = '/sys/class/power_supply/macsmc-battery/' local energy_now = read(base .. 'energy_now') local energy_full = read(base .. 'energy_full') local status_f = io.open(base .. 'status') if not energy_now or not energy_full or not status_f then return { { full_text = 'bat ?' } } end local status = status_f:read('*l') status_f:close() local capacity = math.floor(energy_now / energy_full * 100 + 0.5) local text_color = '#ffffff' local battery_symbol = ' ' if capacity < 30 then text_color = '#ed8796' battery_symbol = '󰁼' elseif capacity > 70 then text_color = '#a6da95' battery_symbol = '󰂁' else text_color = '#eed49f' battery_symbol = '󰁾' end local symbol = ({ Charging = '󱐋', Discharging = battery_symbol, })[status] or ' ' return string.format('%s %2d%%', symbol, capacity), text_color end function hexToRgb(hex) hex = hex:gsub("#", "") local r = tonumber(hex:sub(1, 2), 16) local g = tonumber(hex:sub(3, 4), 16) local b = tonumber(hex:sub(5, 6), 16) return r, g, b end function printHexColor(text, hex) local r, g, b = hexToRgb(hex) local colorCode = string.format("\27[38;2;%d;%d;%dm", r, g, b) local resetCode = "\27[0m" print(colorCode .. text .. resetCode) end while true do printHexColor(batterytext()) os.execute("sleep 1") -- Wait for 1 second end