diff --git a/css/style.css b/css/style.css index ccc590f..e746ba0 100644 --- a/css/style.css +++ b/css/style.css @@ -129,6 +129,18 @@ font-size: 16px; } +.battery-util-progress { + color: #ff79c6; + background-color: #44475a; + font-size: 16px; +} + +.battery-data-text { + color: #ff79c6; + margin-right: 6px; + font-size: 16px; +} + .ws-dead { color: #44475a; font-size: 16px; diff --git a/css/style.css.map b/css/style.css.map index 4c33486..a66dc5a 100644 --- a/css/style.css.map +++ b/css/style.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["style.scss"],"names":[],"mappings":"AAkBA;EACI;EACA;;;AASJ;EACI,kBA7BC;EA8BD;;;AAGJ;EACI;EACA;;;AAGJ;EACI,WAxBO;;;AA2BX;EACI;EAEA;EAEA,OA5CO;;;AA8CX;EACI;EAGA,OAlDO;;;AAoDX;EACI;EAGA,OAxDO;;;AA2DX;EACI;EAGA,OAzDE;;;AA+DN;EACI;;;AAGJ;EACI;EACA,OAxEK;EAyEL;;;AAGJ;EACI,WApEO;EAqEP,OAvEK;EAwEL;;;AAEJ;EACI;EACA,OA5EK;EA6EL;;;AAEJ;EACI;EACA,OAjFK;EAkFL;;;AAEJ;EACI;EACA,OAtFK;EAuFL;;;AAGJ;EACI,OAhGK;EAiGL,kBAvGO;EAwGP,WA3FO;;;AA6FX;EACI,OArGK;EAsGL;EACA,WAhGO;;;AAmGX;EACI,OA7GK;EA8GL,kBAlHO;;;AAoHX;EACI,OAjHK;EAkHL;EACA,WA1GO;;;AA6GX;EACI,OAnHK;EAoHL,kBA5HO;;;AA8HX;EACI,OAvHK;EAwHL;EACA,WApHO;;;AAuHX;EACI,OAnIG;EAoIH,kBAtIO;;;AAwIX;EACI,OAvIG;EAwIH;EACA,WA9HO;;;AAiIX;EACI,OA5II;EA6IJ,kBAhJO;EAiJP,WApIO;;;AAsIX;EACI,OAjJI;EAkJJ;EACA,WAzIO;;;AA4IX;EACI,OA1JO;EA2JP,WA9IO;;;AAgJX;EACI,OA7JO;EA8JP,WAlJO;;;AAoJX;EACI,OAhKG;EAiKH,WAtJO;;;AAwJX;EACI,OA9JK;EA+JL,WA1JO;;;AA4JX;EACI,OAvKI;EAwKJ,WA9JO;;;AAkKX;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI,OA1LC;;EA4LL;IACI,OAlMA;;;AAqMR;EACI;IACI,OAvMA;;EAyMJ;IACI,OArMC;;;AAyMT;EACI,kBApNC;EAqND;;;AAEJ;EACI;EACA;EACA;EACA;EACA,OA/MK;;;AAiNT;EACI;EACA;;;AAEJ;EAgBI;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAxBA;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI,OAvOF;;;AAqPN;EACI,OAtPE;EAuPF,kBA9PO;EA+PP;EACH;EACA;;;AAED;EAaI,OAxQK;EAyQL,kBAjRO;EAkRP;EACA;EACH;EACG;;AAjBA;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;;AAWR;EACI;EACA;EACH;EACG,kBA7RO;EA8RP;EACH;EACA;;;AAGD;EAEC;EACG;EACH;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACG;EACH;EACG;EACH,kBA/SQ","file":"style.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["style.scss"],"names":[],"mappings":"AAmBA;EACI;EACA;;;AASJ;EACI,kBA7BC;EA8BD;;;AAGJ;EACI;EACA;;;AAGJ;EACI,WAxBO;;;AA2BX;EACI;EAEA;EAEA,OA5CO;;;AA8CX;EACI;EAGA,OAlDO;;;AAoDX;EACI;EAGA,OAxDO;;;AA2DX;EACI;EAGA,OAzDE;;;AA+DN;EACI;;;AAGJ;EACI;EACA,OAxEK;EAyEL;;;AAGJ;EACI,WApEO;EAqEP,OAvEK;EAwEL;;;AAEJ;EACI;EACA,OA5EK;EA6EL;;;AAEJ;EACI;EACA,OAjFK;EAkFL;;;AAEJ;EACI;EACA,OAtFK;EAuFL;;;AAGJ;EACI,OAhGK;EAiGL,kBAvGO;EAwGP,WA3FO;;;AA6FX;EACI,OArGK;EAsGL;EACA,WAhGO;;;AAmGX;EACI,OA7GK;EA8GL,kBAlHO;;;AAoHX;EACI,OAjHK;EAkHL;EACA,WA1GO;;;AA6GX;EACI,OAnHK;EAoHL,kBA5HO;;;AA8HX;EACI,OAvHK;EAwHL;EACA,WApHO;;;AAuHX;EACI,OAnIG;EAoIH,kBAtIO;;;AAwIX;EACI,OAvIG;EAwIH;EACA,WA9HO;;;AAiIX;EACI,OA5II;EA6IJ,kBAhJO;EAiJP,WApIO;;;AAsIX;EACI,OAjJI;EAkJJ;EACA,WAzIO;;;AA4IX;EACI,OArJG;EAsJH,kBA3JO;EA4JP,WA/IO;;;AAiJX;EACI,OA1JG;EA2JH;EACA,WApJO;;;AAuJX;EACI,OArKO;EAsKP,WAzJO;;;AA2JX;EACI,OAxKO;EAyKP,WA7JO;;;AA+JX;EACI,OA3KG;EA4KH,WAjKO;;;AAmKX;EACI,OAzKK;EA0KL,WArKO;;;AAuKX;EACI,OAlLI;EAmLJ,WAzKO;;;AA6KX;EACI;IACI;;EAEJ;IACI;;;AAGR;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI,OArMC;;EAuML;IACI,OA7MA;;;AAgNR;EACI;IACI,OAlNA;;EAoNJ;IACI,OAhNC;;;AAoNT;EACI,kBA/NC;EAgOD;;;AAEJ;EACI;EACA;EACA;EACA;EACA,OA1NK;;;AA4NT;EACI;EACA;;;AAEJ;EAgBI;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAxBA;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAEJ;EACI,OAlPF;;;AAgQN;EACI,OAjQE;EAkQF,kBAzQO;EA0QP;EACH;EACA;;;AAED;EAaI,OAnRK;EAoRL,kBA5RO;EA6RP;EACA;EACH;EACG;;AAjBA;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;;AAWR;EACI;EACA;EACH;EACG,kBAxSO;EAySP;EACH;EACA;;;AAGD;EAEC;EACG;EACH;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACG;EACH;EACG;EACH,kBA1TQ","file":"style.css"} \ No newline at end of file diff --git a/css/style.scss b/css/style.scss index 7974af0..ef7c293 100644 --- a/css/style.scss +++ b/css/style.scss @@ -155,6 +155,17 @@ $textsize: 16px; font-size: $textsize; } +.battery-util-progress { + color: $pink; + background-color: $inactive; + font-size: $textsize; +} +.battery-data-text { + color: $pink; + margin-right: 6px; + font-size: $textsize; +} + .ws-dead { color: $inactive; font-size: $textsize; diff --git a/data/config b/data/config index 2413007..bb670d9 100644 --- a/data/config +++ b/data/config @@ -2,3 +2,4 @@ CPUThermalZone: /sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp1_input SuspendCommand: ~/.config/scripts/sys.sh suspend LockCommand: ~/.config/scripts/sys.sh lock ExitCommand: killall Hyprland +BatteryFolder: /sys/class/power_supply/BAT1 diff --git a/src/Bar.cpp b/src/Bar.cpp index 669d8e7..b00e166 100644 --- a/src/Bar.cpp +++ b/src/Bar.cpp @@ -29,6 +29,16 @@ namespace Bar return TimerResult::Ok; } + static Text* batteryText; + static TimerResult UpdateBattery(CairoSensor& sensor) + { + double percentage = System::GetBatteryPercentage(); + + batteryText->SetText("Battery: " + Utils::ToStringPrecision(percentage * 100, "%0.1f") + "%"); + sensor.SetValue(percentage); + return TimerResult::Ok; + } + static Text* ramText; static TimerResult UpdateRAM(CairoSensor& sensor) { @@ -281,6 +291,10 @@ namespace Bar #endif Sensor(parent, DynCtx::UpdateRAM, "ram-util-progress", "ram-data-text", DynCtx::ramText); Sensor(parent, DynCtx::UpdateCPU, "cpu-util-progress", "cpu-data-text", DynCtx::cpuText); + // Only show battery percentage if battery folder is set and exists + if (System::GetBatteryPercentage() >= 0) { + Sensor(parent, DynCtx::UpdateBattery, "battery-util-progress", "battery-data-text", DynCtx::batteryText); + } } void WidgetPower(Widget& parent) diff --git a/src/System.cpp b/src/System.cpp index 158601e..99aa009 100644 --- a/src/System.cpp +++ b/src/System.cpp @@ -27,6 +27,7 @@ namespace System std::string suspendCommand = "systemctl suspend"; std::string lockCommand = ""; // idk, no standard way of doing this. std::string exitCommand = ""; // idk, no standard way of doing this. + std::string batteryFolder = ""; // this can be BAT0, BAT1, etc. Usually in /sys/class/power_supply }; static Config config; @@ -69,6 +70,10 @@ namespace System { prop = &config.exitCommand; } + else if (line.find("BatteryFolder: ") != std::string::npos) + { + prop = &config.batteryFolder; + } if (prop == nullptr) { LOG("Warning: unknown config var: " << line); @@ -141,6 +146,23 @@ namespace System return temp; } + double GetBatteryPercentage() + { + std::ifstream fullChargeFile(config.batteryFolder + "/charge_full"); + std::ifstream currentChargeFile(config.batteryFolder + "/charge_now"); + if (!fullChargeFile.is_open() || !currentChargeFile.is_open()) + { + return -1.f; + } + std::string fullChargeStr; + std::string currentChargeStr; + std::getline(fullChargeFile, fullChargeStr); + std::getline(currentChargeFile, currentChargeStr); + uint32_t intFullCharge = atoi(fullChargeStr.c_str()); + uint32_t intCurrentCharge = atoi(currentChargeStr.c_str()); + return ((double)intCurrentCharge / (double)intFullCharge); + } + RAMInfo GetRAMInfo() { RAMInfo out{}; diff --git a/src/System.h b/src/System.h index eee98b6..7826e79 100644 --- a/src/System.h +++ b/src/System.h @@ -10,6 +10,8 @@ namespace System // Tctl double GetCPUTemp(); + double GetBatteryPercentage(); + struct RAMInfo { double totalGiB;