Adding the battery status for the top bar alongside brightness controls (closes #821) (#826)

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/826
Reviewed-by: AnErrupTion <anerruption@disroot.org>
Co-authored-by: ebits <tspamiitesh@gmail.com>
Co-committed-by: ebits <tspamiitesh@gmail.com>
This commit is contained in:
ebits 2025-10-09 18:48:46 +02:00 committed by AnErrupTion
parent 44faa263b1
commit 339e39d496
23 changed files with 57 additions and 0 deletions

View File

@ -189,6 +189,10 @@ hide_version_string = false
# Remove power management command hints # Remove power management command hints
hide_key_hints = false hide_key_hints = false
# Set to null to disable battery status display
# Default is BAT0, the typical identifier for the primary battery
battery_id = null
# Initial text to show on the info line # Initial text to show on the info line
# If set to null, the info line defaults to the hostname # If set to null, the info line defaults to the hostname
initial_info_text = null initial_info_text = null

View File

@ -43,6 +43,7 @@ err_perm_user = فشل في تخفيض صلاحيات المستخدم (User per
err_pwnam = فشل في جلب معلومات المستخدم err_pwnam = فشل في جلب معلومات المستخدم
err_sleep = فشل في تنفيذ أمر sleep err_sleep = فشل في تنفيذ أمر sleep
err_tty_ctrl = فشل في نقل تحكم الطرفية (TTY) err_tty_ctrl = فشل في نقل تحكم الطرفية (TTY)
err_user_gid = فشل في تعيين معرّف المجموعة (GID) للمستخدم err_user_gid = فشل في تعيين معرّف المجموعة (GID) للمستخدم

View File

@ -45,6 +45,7 @@ err_pwnam = error en obtenir la informació de l'usuari
err_user_gid = error en establir el GID de l'usuari err_user_gid = error en establir el GID de l'usuari
err_user_init = error en inicialitzar usuari err_user_init = error en inicialitzar usuari
err_user_uid = error en establir l'UID de l'usuari err_user_uid = error en establir l'UID de l'usuari

View File

@ -45,6 +45,7 @@ err_pwnam = nelze získat informace o uživateli
err_user_gid = nastavení GID uživatele selhalo err_user_gid = nastavení GID uživatele selhalo
err_user_init = inicializace uživatele selhala err_user_init = inicializace uživatele selhala
err_user_uid = nastavení UID uživateli selhalo err_user_uid = nastavení UID uživateli selhalo

View File

@ -43,6 +43,7 @@ err_perm_user = Fehler beim Heruntersetzen der Nutzerberechtigungen
err_pwnam = Abrufen der Benutzerinformationen fehlgeschlagen err_pwnam = Abrufen der Benutzerinformationen fehlgeschlagen
err_sleep = Sleep-Befehl fehlgeschlagen err_sleep = Sleep-Befehl fehlgeschlagen
err_tty_ctrl = Fehler bei der TTY-Uebergabe err_tty_ctrl = Fehler bei der TTY-Uebergabe
err_user_gid = Fehler beim Setzen der Gruppen-ID err_user_gid = Fehler beim Setzen der Gruppen-ID

View File

@ -42,6 +42,7 @@ err_perm_group = failed to downgrade group permissions
err_perm_user = failed to downgrade user permissions err_perm_user = failed to downgrade user permissions
err_pwnam = failed to get user info err_pwnam = failed to get user info
err_sleep = failed to execute sleep command err_sleep = failed to execute sleep command
err_battery = failed to load battery status
err_switch_tty = failed to switch tty err_switch_tty = failed to switch tty
err_tty_ctrl = tty control transfer failed err_tty_ctrl = tty control transfer failed
err_no_users = no users found err_no_users = no users found

View File

@ -45,6 +45,7 @@ err_pwnam = error al obtener la información del usuario
err_user_gid = error al establecer el GID del usuario err_user_gid = error al establecer el GID del usuario
err_user_init = error al inicializar usuario err_user_init = error al inicializar usuario
err_user_uid = error al establecer el UID del usuario err_user_uid = error al establecer el UID del usuario

View File

@ -42,6 +42,7 @@ err_perm_group = échec du déclassement des permissions de groupe
err_perm_user = échec du déclassement des permissions utilisateur err_perm_user = échec du déclassement des permissions utilisateur
err_pwnam = échec de lecture des infos utilisateur err_pwnam = échec de lecture des infos utilisateur
err_sleep = échec de l'exécution de la commande de veille err_sleep = échec de l'exécution de la commande de veille
err_switch_tty = échec du changement de terminal err_switch_tty = échec du changement de terminal
err_tty_ctrl = échec du transfert de contrôle du terminal err_tty_ctrl = échec du transfert de contrôle du terminal
err_no_users = aucun utilisateur trouvé err_no_users = aucun utilisateur trouvé

View File

@ -45,6 +45,7 @@ err_pwnam = impossibile ottenere dati utente
err_user_gid = impossibile impostare GID utente err_user_gid = impossibile impostare GID utente
err_user_init = impossibile inizializzare utente err_user_init = impossibile inizializzare utente
err_user_uid = impossible impostare UID utente err_user_uid = impossible impostare UID utente

View File

@ -43,6 +43,7 @@ err_perm_user = ユーザー権限のダウングレードに失敗しました
err_pwnam = ユーザー情報の取得に失敗しました err_pwnam = ユーザー情報の取得に失敗しました
err_sleep = スリープコマンドの実行に失敗しました err_sleep = スリープコマンドの実行に失敗しました
err_tty_ctrl = TTY制御の転送に失敗しました err_tty_ctrl = TTY制御の転送に失敗しました
err_user_gid = ユーザーGIDの設定に失敗しました err_user_gid = ユーザーGIDの設定に失敗しました

View File

@ -43,6 +43,7 @@ err_perm_user = nie udało się obniżyć uprawnień użytkownika
err_pwnam = nie udało się uzyskać informacji o użytkowniku err_pwnam = nie udało się uzyskać informacji o użytkowniku
err_sleep = nie udało się wykonać polecenia sleep err_sleep = nie udało się wykonać polecenia sleep
err_tty_ctrl = nie udało się przekazać kontroli tty err_tty_ctrl = nie udało się przekazać kontroli tty
err_user_gid = nie udało się ustawić GID użytkownika err_user_gid = nie udało się ustawić GID użytkownika

View File

@ -45,6 +45,7 @@ err_pwnam = erro ao obter informação do utilizador
err_user_gid = erro ao definir o GID do utilizador err_user_gid = erro ao definir o GID do utilizador
err_user_init = erro ao iniciar o utilizador err_user_init = erro ao iniciar o utilizador
err_user_uid = erro ao definir o UID do utilizador err_user_uid = erro ao definir o UID do utilizador

View File

@ -45,6 +45,7 @@ err_pwnam = não foi possível obter informações do usuário
err_user_gid = não foi possível definir o GID do usuário err_user_gid = não foi possível definir o GID do usuário
err_user_init = não foi possível iniciar o usuário err_user_init = não foi possível iniciar o usuário
err_user_uid = não foi possível definir o UID do usuário err_user_uid = não foi possível definir o UID do usuário

View File

@ -53,6 +53,7 @@ err_perm_user = nu s-a putut face downgrade permisiunilor de utilizator
login = utilizator login = utilizator
logout = opreşte sesiunea logout = opreşte sesiunea

View File

@ -42,6 +42,7 @@ err_perm_group = не удалось понизить права доступа
err_perm_user = не удалось понизить права доступа пользователя err_perm_user = не удалось понизить права доступа пользователя
err_pwnam = не удалось получить информацию о пользователе err_pwnam = не удалось получить информацию о пользователе
err_sleep = не удалось выполнить команду sleep err_sleep = не удалось выполнить команду sleep
err_switch_tty = не удалось переключить tty err_switch_tty = не удалось переключить tty
err_tty_ctrl = передача управления tty не удалась err_tty_ctrl = передача управления tty не удалась
err_no_users = пользователи не найдены err_no_users = пользователи не найдены

View File

@ -45,6 +45,7 @@ err_pwnam = neuspijesno skupljanje informacija o korisniku
err_user_gid = neuspijesno postavljanje korisničkog GID-a err_user_gid = neuspijesno postavljanje korisničkog GID-a
err_user_init = neuspijensa inicijalizacija korisnika err_user_init = neuspijensa inicijalizacija korisnika
err_user_uid = neuspijesno postavljanje UID-a korisnika err_user_uid = neuspijesno postavljanje UID-a korisnika

View File

@ -45,6 +45,7 @@ err_pwnam = misslyckades att hämta användarinfo
err_user_gid = misslyckades att ställa in användar-GID err_user_gid = misslyckades att ställa in användar-GID
err_user_init = misslyckades att initialisera användaren err_user_init = misslyckades att initialisera användaren
err_user_uid = misslyckades att ställa in användar-UID err_user_uid = misslyckades att ställa in användar-UID

View File

@ -45,6 +45,7 @@ err_pwnam = kullanici bilgileri alinamadi
err_user_gid = kullanici icin GID ayarlanamadi err_user_gid = kullanici icin GID ayarlanamadi
err_user_init = kullanici oturumu baslatilamadi err_user_init = kullanici oturumu baslatilamadi
err_user_uid = kullanici icin UID ayarlanamadi err_user_uid = kullanici icin UID ayarlanamadi

View File

@ -45,6 +45,7 @@ err_pwnam = не вдалося отримати дані користувача
err_user_gid = не вдалося змінити GID користувача err_user_gid = не вдалося змінити GID користувача
err_user_init = не вдалося ініціалізувати користувача err_user_init = не вдалося ініціалізувати користувача
err_user_uid = не вдалося змінити UID користувача err_user_uid = не вдалося змінити UID користувача

View File

@ -45,6 +45,7 @@ err_pwnam = 获取用户信息失败
err_user_gid = 设置用户GID失败 err_user_gid = 设置用户GID失败
err_user_init = 初始化用户失败 err_user_init = 初始化用户失败
err_user_uid = 设置用户UID失败 err_user_uid = 设置用户UID失败

View File

@ -49,6 +49,7 @@ gameoflife_initial_density: f32 = 0.4,
hide_borders: bool = false, hide_borders: bool = false,
hide_version_string: bool = false, hide_version_string: bool = false,
hide_key_hints: bool = false, hide_key_hints: bool = false,
battery_id: ?[]const u8 = "BAT0",
initial_info_text: ?[]const u8 = null, initial_info_text: ?[]const u8 = null,
input_len: u8 = 34, input_len: u8 = 34,
lang: []const u8 = "en", lang: []const u8 = "en",

View File

@ -47,6 +47,7 @@ err_perm_group: []const u8 = "failed to downgrade group permissions",
err_perm_user: []const u8 = "failed to downgrade user permissions", err_perm_user: []const u8 = "failed to downgrade user permissions",
err_pwnam: []const u8 = "failed to get user info", err_pwnam: []const u8 = "failed to get user info",
err_sleep: []const u8 = "failed to execute sleep command", err_sleep: []const u8 = "failed to execute sleep command",
err_battery: []const u8 = "failed to load battery status",
err_switch_tty: []const u8 = "failed to switch tty", err_switch_tty: []const u8 = "failed to switch tty",
err_tty_ctrl: []const u8 = "tty control transfer failed", err_tty_ctrl: []const u8 = "tty control transfer failed",
err_no_users: []const u8 = "no users found", err_no_users: []const u8 = "no users found",

View File

@ -572,6 +572,22 @@ pub fn main() !void {
length += ly_top_str.len + 1; length += ly_top_str.len + 1;
} }
var battery_bar_shown = false;
if (config.battery_id) |id| draw_battery: {
const battery_percentage = getBatteryPercentage(id) catch |err| {
try log_writer.print("failed to get battery percentage: {s}\n", .{@errorName(err)});
try info_line.addMessage(lang.err_battery, config.error_bg, config.error_fg);
break :draw_battery;
};
var battery_buf: [16:0]u8 = undefined;
const battery_str = std.fmt.bufPrintZ(&battery_buf, "BAT: {d}%", .{battery_percentage}) catch break :draw_battery;
const battery_y: usize = 1;
buffer.drawLabel(battery_str, 0, battery_y);
battery_bar_shown = true;
}
if (config.bigclock != .none and buffer.box_height + (bigclock.HEIGHT + 2) * 2 < buffer.height) { if (config.bigclock != .none and buffer.box_height + (bigclock.HEIGHT + 2) * 2 < buffer.height) {
var format_buf: [16:0]u8 = undefined; var format_buf: [16:0]u8 = undefined;
var clock_buf: [32:0]u8 = undefined; var clock_buf: [32:0]u8 = undefined;
@ -1162,6 +1178,22 @@ fn adjustBrightness(allocator: std.mem.Allocator, cmd: []const u8) !void {
} }
} }
fn getBatteryPercentage(battery_id: []const u8) !u8 {
const path = try std.fmt.allocPrint(temporary_allocator, "/sys/class/power_supply/{s}/capacity", .{battery_id});
defer temporary_allocator.free(path);
const battery_file = try std.fs.cwd().openFile(path, .{});
defer battery_file.close();
var buffer: [8]u8 = undefined;
const bytes_read = try battery_file.read(&buffer);
const capacity_str = buffer[0..bytes_read];
const trimmed = std.mem.trimRight(u8, capacity_str, "\n\r");
return try std.fmt.parseInt(u8, trimmed, 10);
}
fn getAuthErrorMsg(err: anyerror, lang: Lang) []const u8 { fn getAuthErrorMsg(err: anyerror, lang: Lang) []const u8 {
return switch (err) { return switch (err) {
error.GetPasswordNameFailed => lang.err_pwnam, error.GetPasswordNameFailed => lang.err_pwnam,