diff --git a/build.zig b/build.zig index f0e9074..601cd6e 100644 --- a/build.zig +++ b/build.zig @@ -3,7 +3,7 @@ const builtin = @import("builtin"); const PatchMap = std.StringHashMap([]const u8); -const min_zig_string = "0.12.0"; +const min_zig_string = "0.14.0"; const current_zig = builtin.zig_version; // Implementing zig version detection through compile time @@ -22,8 +22,6 @@ var prefix_directory: []const u8 = undefined; var executable_name: []const u8 = undefined; var default_tty_str: []const u8 = undefined; -const ProgressNode = if (current_zig.minor == 12) *std.Progress.Node else std.Progress.Node; - pub fn build(b: *std.Build) !void { dest_directory = b.option([]const u8, "dest_directory", "Specify a destination directory for installation") orelse ""; config_directory = b.option([]const u8, "config_directory", "Specify a default config directory (default is /etc). This path gets embedded into the binary") orelse "/etc"; @@ -31,7 +29,6 @@ pub fn build(b: *std.Build) !void { executable_name = b.option([]const u8, "name", "Specify installed executable file name (default is ly)") orelse "ly"; const bin_directory = try b.allocator.dupe(u8, config_directory); - config_directory = try std.fs.path.join(b.allocator, &[_][]const u8{ dest_directory, config_directory }); const build_options = b.addOptions(); const version_str = try getVersionStr(b, "ly", ly_version); @@ -123,7 +120,7 @@ pub fn build(b: *std.Build) !void { pub fn ExeInstaller(install_conf: bool) type { return struct { - pub fn make(step: *std.Build.Step, _: ProgressNode) !void { + pub fn make(step: *std.Build.Step, _: std.Build.Step.MakeOptions) !void { try install_ly(step.owner.allocator, install_conf); } }; @@ -139,7 +136,7 @@ const InitSystem = enum { pub fn ServiceInstaller(comptime init_system: InitSystem) type { return struct { - pub fn make(step: *std.Build.Step, _: ProgressNode) !void { + pub fn make(step: *std.Build.Step, _: std.Build.Step.MakeOptions) !void { const allocator = step.owner.allocator; var patch_map = PatchMap.init(allocator); @@ -222,22 +219,22 @@ pub fn ServiceInstaller(comptime init_system: InitSystem) type { } fn install_ly(allocator: std.mem.Allocator, install_config: bool) !void { - const ly_config_directory = try std.fs.path.join(allocator, &[_][]const u8{ config_directory, "/ly" }); + const ly_config_directory = try std.fs.path.join(allocator, &[_][]const u8{ dest_directory, config_directory, "/ly" }); std.fs.cwd().makePath(ly_config_directory) catch { std.debug.print("warn: {s} already exists as a directory.\n", .{ly_config_directory}); }; - const ly_lang_path = try std.fs.path.join(allocator, &[_][]const u8{ config_directory, "/ly/lang" }); + const ly_lang_path = try std.fs.path.join(allocator, &[_][]const u8{ dest_directory, config_directory, "/ly/lang" }); std.fs.cwd().makePath(ly_lang_path) catch { - std.debug.print("warn: {s} already exists as a directory.\n", .{config_directory}); + std.debug.print("warn: {s} already exists as a directory.\n", .{ ly_lang_path }); }; { const exe_path = try std.fs.path.join(allocator, &[_][]const u8{ dest_directory, prefix_directory, "/bin" }); if (!std.mem.eql(u8, dest_directory, "")) { std.fs.cwd().makePath(exe_path) catch { - std.debug.print("warn: {s} already exists as a directory.\n", .{exe_path}); + std.debug.print("warn: {s} already exists as a directory.\n", .{ exe_path }); }; } @@ -311,7 +308,7 @@ fn install_ly(allocator: std.mem.Allocator, install_config: bool) !void { } } -pub fn uninstallall(step: *std.Build.Step, _: ProgressNode) !void { +pub fn uninstallall(step: *std.Build.Step, _: std.Build.Step.MakeOptions) !void { const allocator = step.owner.allocator; try deleteTree(allocator, config_directory, "/ly", "ly config directory not found"); diff --git a/build.zig.zon b/build.zig.zon index c4c9cbd..3bfddce 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,15 +1,16 @@ .{ - .name = "ly", - .version = "1.0.0", - .minimum_zig_version = "0.12.0", + .name = .ly, + .version = "1.1.0", + .fingerprint = 0xa148ffcc5dc2cb59, + .minimum_zig_version = "0.14.0", .dependencies = .{ .clap = .{ - .url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.9.1.tar.gz", - .hash = "122062d301a203d003547b414237229b09a7980095061697349f8bef41be9c30266b", + .url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.10.0.tar.gz", + .hash = "clap-0.10.0-oBajB434AQBDh-Ei3YtoKIRxZacVPF1iSwp3IX_ZB8f0", }, .zigini = .{ - .url = "https://github.com/Kawaii-Ash/zigini/archive/0bba97a12582928e097f4074cc746c43351ba4c8.tar.gz", - .hash = "12209b971367b4066d40ecad4728e6fdffc4cc4f19356d424c2de57f5b69ac7a619a", + .url = "https://github.com/AnErrupTion/zigini/archive/e61d31b2b7db3365993a20cc90e491d0cb0b7282.tar.gz", + .hash = "zigini-0.3.1-BSkB7XJGAAB2E-sKyzhTaQCBlYBL8yqzE4E_jmSY99sC", }, }, .paths = .{""}, diff --git a/readme.md b/readme.md index d0d137b..f9d8cb5 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,14 @@ - # Ly - a TUI display manager + +## Development is now continuing on [Codeberg](https://codeberg.org/AnErrupTion/ly), with the [GitHub](https://github.com/fairyglade/ly) repository becoming a mirror. Issues & pull requests on GitHub will be ignored from now on. + ![Ly screenshot](.github/screenshot.png "Ly screenshot") Ly is a lightweight TUI (ncurses-like) display manager for Linux and BSD. ## Dependencies - Compile-time: - - zig >=0.12.0 + - zig 0.14.0 - libc - pam - xcb (optional, required by default; needed for X11 support) @@ -252,4 +254,3 @@ disable the main box borders with `hide_borders = true`. ## Additional Information The name "Ly" is a tribute to the fairy from the game Rayman. Ly was tested by oxodao, who is some seriously awesome dude. - diff --git a/res/lang/cat.ini b/res/lang/cat.ini index 88ca735..541898b 100644 --- a/res/lang/cat.ini +++ b/res/lang/cat.ini @@ -6,6 +6,7 @@ err_alloc = assignació de memòria fallida err_bounds = índex fora de límits err_brightness_change = error en canviar la brillantor err_chdir = error en obrir la carpeta home + err_console_dev = error en accedir a la consola err_dgn_oob = missatge de registre err_domain = domini invàlid @@ -35,6 +36,7 @@ err_perm_dir = error en canviar el directori actual err_perm_group = error en degradar els permisos de grup err_perm_user = error en degradar els permisos de l'usuari err_pwnam = error en obtenir la informació de l'usuari + err_unknown = ha ocorregut un error desconegut err_user_gid = error en establir el GID de l'usuari err_user_init = error en inicialitzar usuari @@ -46,10 +48,10 @@ err_xsessions_open = error en obrir la carpeta de sessions insert = inserir login = iniciar sessió logout = sessió tancada -no_x11_support = x11 support disabled at compile-time no_x11_support = el suport per x11 ha estat desactivat en la compilació normal = normal numlock = Bloq Num + password = Clau restart = reiniciar shell = shell diff --git a/res/lang/cs.ini b/res/lang/cs.ini index b6a217f..5beac01 100644 --- a/res/lang/cs.ini +++ b/res/lang/cs.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = alokace paměti selhala err_bounds = index je mimo hranice pole + err_chdir = nelze otevřít domovský adresář + err_console_dev = chyba při přístupu do konzole err_dgn_oob = zpráva protokolu err_domain = neplatná doména + err_hostname = nelze získat název hostitele err_mlock = uzamčení paměti hesel selhalo err_null = nulový ukazatel + err_pam = pam transakce selhala err_pam_abort = pam transakce přerušena err_pam_acct_expired = platnost účtu vypršela @@ -29,17 +36,27 @@ err_perm_dir = nepodařilo se změnit adresář err_perm_group = nepodařilo se snížit skupinová oprávnění err_perm_user = nepodařilo se snížit uživatelská oprávnění err_pwnam = nelze získat informace o uživateli + + err_user_gid = nastavení GID uživatele selhalo err_user_init = inicializace uživatele selhala err_user_uid = nastavení UID uživateli selhalo + + err_xsessions_dir = nepodařilo se najít složku relací err_xsessions_open = nepodařilo se otevřít složku relací + login = uživatel logout = odhlášen + + numlock = numlock + password = heslo restart = restartovat shell = příkazový řádek shutdown = vypnout + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/de.ini b/res/lang/de.ini index e18b9ba..30a8f44 100644 --- a/res/lang/de.ini +++ b/res/lang/de.ini @@ -1,13 +1,20 @@ + + + capslock = Feststelltaste err_alloc = Speicherzuweisung fehlgeschlagen err_bounds = Listenindex ist außerhalb des Bereichs + err_chdir = Fehler beim oeffnen des home-ordners + err_console_dev = Zugriff auf die Konsole fehlgeschlagen err_dgn_oob = Protokoll Nachricht err_domain = Unzulaessige domain + err_hostname = Holen des Hostnames fehlgeschlagen err_mlock = Abschließen des Passwortspeichers fehlgeschlagen err_null = Null Zeiger + err_pam = pam Transaktion fehlgeschlagen err_pam_abort = pam Transaktion abgebrochen err_pam_acct_expired = Benutzerkonto abgelaufen @@ -29,17 +36,27 @@ err_perm_dir = Fehler beim wechseln des Ordners err_perm_group = Fehler beim heruntersetzen der Gruppen Berechtigungen err_perm_user = Fehler beim heruntersetzen der Nutzer Berechtigungen err_pwnam = Holen der Benutzerinformationen fehlgeschlagen + + err_user_gid = Fehler beim setzen der Gruppen Id des Nutzers err_user_init = Initialisierung des Nutzers fehlgeschlagen err_user_uid = Setzen der Benutzer Id fehlgeschlagen + + err_xsessions_dir = Fehler beim finden des Sitzungsordners err_xsessions_open = Fehler beim öffnen des Sitzungsordners + login = Anmelden logout = Abgemeldet + + numlock = Numtaste + password = Passwort restart = Neustarten shell = shell shutdown = Herunterfahren + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/en.ini b/res/lang/en.ini index d6a42fe..f08cca1 100644 --- a/res/lang/en.ini +++ b/res/lang/en.ini @@ -6,6 +6,7 @@ err_alloc = failed memory allocation err_bounds = out-of-bounds index err_brightness_change = failed to change brightness err_chdir = failed to open home folder + err_console_dev = failed to access console err_dgn_oob = log message err_domain = invalid domain @@ -47,14 +48,15 @@ err_xsessions_open = failed to open sessions folder insert = insert login = login logout = logged out -normal = normal no_x11_support = x11 support disabled at compile-time +normal = normal numlock = numlock + password = password restart = reboot shell = shell shutdown = shutdown sleep = sleep wayland = wayland -xinitrc = xinitrc x11 = x11 +xinitrc = xinitrc diff --git a/res/lang/es.ini b/res/lang/es.ini index 73a9acd..23ec27c 100644 --- a/res/lang/es.ini +++ b/res/lang/es.ini @@ -4,13 +4,17 @@ brightness_up = subir brillo capslock = Bloq Mayús err_alloc = asignación de memoria fallida err_bounds = índice fuera de límites + err_chdir = error al abrir la carpeta home + err_console_dev = error al acceder a la consola err_dgn_oob = mensaje de registro err_domain = dominio inválido + err_hostname = error al obtener el nombre de host err_mlock = error al bloquear la contraseña de memoria err_null = puntero nulo + err_pam = error en la transacción pam err_pam_abort = transacción pam abortada err_pam_acct_expired = cuenta expirada @@ -32,9 +36,13 @@ err_perm_dir = error al cambiar el directorio actual err_perm_group = error al degradar los permisos del grupo err_perm_user = error al degradar los permisos del usuario err_pwnam = error al obtener la información del usuario + + err_user_gid = error al establecer el GID del usuario err_user_init = error al inicializar usuario err_user_uid = error al establecer el UID del usuario + + err_xsessions_dir = error al buscar la carpeta de sesiones err_xsessions_open = error al abrir la carpeta de sesiones insert = insertar @@ -50,4 +58,5 @@ shell = shell shutdown = apagar sleep = suspender wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/fr.ini b/res/lang/fr.ini index 5685c95..a2f4566 100644 --- a/res/lang/fr.ini +++ b/res/lang/fr.ini @@ -1,4 +1,4 @@ -authenticating = authentification... + brightness_down = diminuer la luminosité brightness_up = augmenter la luminosité capslock = verr.maj @@ -6,6 +6,7 @@ err_alloc = échec d'allocation mémoire err_bounds = indice hors-limite err_brightness_change = échec du changement de luminosité err_chdir = échec de l'ouverture du répertoire home + err_console_dev = échec d'accès à la console err_dgn_oob = message err_domain = domaine invalide @@ -35,6 +36,7 @@ err_perm_dir = échec de changement de répertoire err_perm_group = échec du déclassement des permissions de groupe err_perm_user = échec du déclassement des permissions utilisateur err_pwnam = échec de lecture des infos utilisateur + err_unknown = une erreur inconnue est survenue err_user_gid = échec de modification du GID err_user_init = échec d'initialisation de l'utilisateur @@ -46,14 +48,15 @@ err_xsessions_open = échec de l'ouverture du dossier de sessions insert = insertion login = identifiant logout = déconnecté -normal = normal no_x11_support = support pour x11 désactivé lors de la compilation +normal = normal numlock = verr.num + password = mot de passe restart = redémarrer shell = shell shutdown = éteindre sleep = veille wayland = wayland -xinitrc = xinitrc x11 = x11 +xinitrc = xinitrc diff --git a/res/lang/it.ini b/res/lang/it.ini index 13eb147..e9ba7c0 100644 --- a/res/lang/it.ini +++ b/res/lang/it.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = impossibile allocare memoria err_bounds = indice fuori limite + err_chdir = impossibile aprire home directory + err_console_dev = impossibile aprire console err_dgn_oob = messaggio log err_domain = dominio non valido + err_hostname = impossibile ottenere hostname err_mlock = impossibile ottenere lock per la password in memoria err_null = puntatore nullo + err_pam = transazione PAM fallita err_pam_abort = transazione PAM interrotta err_pam_acct_expired = account scaduto @@ -29,17 +36,27 @@ err_perm_dir = impossibile cambiare directory corrente err_perm_group = impossibile ridurre permessi gruppo err_perm_user = impossibile ridurre permessi utente err_pwnam = impossibile ottenere dati utente + + err_user_gid = impossibile impostare GID utente err_user_init = impossibile inizializzare utente err_user_uid = impossible impostare UID utente + + err_xsessions_dir = impossibile localizzare cartella sessioni err_xsessions_open = impossibile aprire cartella sessioni + login = username logout = scollegato + + numlock = numlock + password = password restart = riavvio shell = shell shutdown = arresto + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/normalize_lang_files.py b/res/lang/normalize_lang_files.py new file mode 100644 index 0000000..3904737 --- /dev/null +++ b/res/lang/normalize_lang_files.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +from pathlib import Path +from sys import stderr + + +def process_lang_file(path: Path, lang_keys: list[str]) -> None: + # read key-value-pairs from lang file into dict + existing_entries = {} + with open(path, "r", encoding="UTF-8") as fh: + while line := fh.readline(): + try: + key, value = line.split("=", 1) + existing_entries[key.strip()] = value.strip() + except ValueError: # line does not contain '=' + continue + + # re-write current lang file with entries in order of occurence in `lang_keys` + # and with empty lines for missing translations + with open(path, "w", encoding="UTF-8") as fh: + for item in lang_keys: + try: + fh.write(f"{item} = {existing_entries[item]}\n") + except KeyError: # no translation for `item` yet + fh.write("\n") + + +def main() -> None: + zig_lang_file = Path(__file__).parent.joinpath("../../src/config/Lang.zig").resolve() + if not zig_lang_file.exists(): + print(f"ERROR: File '{zig_lang_file.as_posix()}' does not exist. Exiting.", file=stderr) + exit(1) + + # read "language keys" from `zig_lang_file` into list + lang_keys = [] + with open(zig_lang_file, "r", encoding="UTF-8") as fh: + while line := fh.readline(): + # only process lines that are not empty or no comments + if not (line.strip() == "" or line.startswith("//")): + lang_keys.append(line.split(":")[0].strip()) + + lang_files = [f for f in Path.iterdir(Path(__file__).parent) if f.name.endswith(".ini") and f.is_file()] + + for file in lang_files: + process_lang_file(file, lang_keys) + + +if __name__ == "__main__": + main() diff --git a/res/lang/pl.ini b/res/lang/pl.ini index f37c4a8..37d4ff2 100644 --- a/res/lang/pl.ini +++ b/res/lang/pl.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = nieudana alokacja pamięci err_bounds = indeks poza granicami + err_chdir = nie udało się otworzyć folderu domowego + err_console_dev = nie udało się uzyskać dostępu do konsoli err_dgn_oob = wiadomość loga err_domain = niepoprawna domena + err_hostname = nie udało się uzyskać nazwy hosta err_mlock = nie udało się zablokować pamięci haseł err_null = wskaźnik zerowy + err_pam = transakcja pam nieudana err_pam_abort = transakcja pam przerwana err_pam_acct_expired = konto wygasło @@ -29,17 +36,27 @@ err_perm_dir = nie udało się zmienić obecnego katalogu err_perm_group = nie udało się obniżyć uprawnień grupy err_perm_user = nie udało się obniżyć uprawnień użytkownika err_pwnam = nie udało się uzyskać informacji o użytkowniku + + err_user_gid = nie udało się ustawić GID użytkownika err_user_init = nie udało się zainicjalizować użytkownika err_user_uid = nie udało się ustawić UID użytkownika + + err_xsessions_dir = nie udało się znaleźć folderu sesji err_xsessions_open = nie udało się otworzyć folderu sesji + login = login logout = wylogowano + + numlock = numlock + password = hasło restart = uruchom ponownie shell = powłoka shutdown = wyłącz + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/pt.ini b/res/lang/pt.ini index ad2c397..5d117d7 100644 --- a/res/lang/pt.ini +++ b/res/lang/pt.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = erro na atribuição de memória err_bounds = índice fora de limites + err_chdir = erro ao abrir a pasta home + err_console_dev = erro ao aceder à consola err_dgn_oob = mensagem de registo err_domain = domínio inválido + err_hostname = erro ao obter o nome do host err_mlock = erro de bloqueio de memória err_null = ponteiro nulo + err_pam = erro na transação pam err_pam_abort = transação pam abortada err_pam_acct_expired = conta expirada @@ -29,17 +36,27 @@ err_perm_dir = erro ao alterar o diretório atual err_perm_group = erro ao reduzir as permissões do grupo err_perm_user = erro ao reduzir as permissões do utilizador err_pwnam = erro ao obter informação do utilizador + + err_user_gid = erro ao definir o GID do utilizador err_user_init = erro ao iniciar o utilizador err_user_uid = erro ao definir o UID do utilizador + + err_xsessions_dir = erro ao localizar a pasta das sessões err_xsessions_open = erro ao abrir a pasta das sessões + login = iniciar sessão logout = terminar sessão + + numlock = numlock + password = palavra-passe restart = reiniciar shell = shell shutdown = encerrar + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/pt_BR.ini b/res/lang/pt_BR.ini index 017129a..f47fc00 100644 --- a/res/lang/pt_BR.ini +++ b/res/lang/pt_BR.ini @@ -1,13 +1,20 @@ + + + capslock = caixa alta err_alloc = alocação de memória malsucedida err_bounds = índice fora de limites + err_chdir = não foi possível abrir o diretório home + err_console_dev = não foi possível acessar o console err_dgn_oob = mensagem de log err_domain = domínio inválido + err_hostname = não foi possível obter o nome do host err_mlock = bloqueio da memória de senha malsucedido err_null = ponteiro nulo + err_pam = transação pam malsucedida err_pam_abort = transação pam abortada err_pam_acct_expired = conta expirada @@ -29,17 +36,27 @@ err_perm_dir = não foi possível alterar o diretório atual err_perm_group = não foi possível reduzir as permissões de grupo err_perm_user = não foi possível reduzir as permissões de usuário 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_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_xsessions_dir = não foi possível encontrar a pasta das sessões err_xsessions_open = não foi possível abrir a pasta das sessões + login = conectar logout = desconectado + + numlock = numlock + password = senha restart = reiniciar shell = shell shutdown = desligar + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/ro.ini b/res/lang/ro.ini index 884e9da..89e92be 100644 --- a/res/lang/ro.ini +++ b/res/lang/ro.ini @@ -1,7 +1,12 @@ + + + capslock = capslock + + err_console_dev = nu s-a putut accesa consola @@ -9,6 +14,8 @@ err_console_dev = nu s-a putut accesa consola + + err_pam_abort = tranzacţie pam anulată err_pam_acct_expired = cont expirat err_pam_auth = eroare de autentificare @@ -34,12 +41,22 @@ err_perm_user = nu s-a putut face downgrade permisiunilor de utilizator + + + + + login = utilizator logout = opreşte sesiunea + + numlock = numlock + password = parolă restart = resetează shell = shell shutdown = opreşte sistemul + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/ru.ini b/res/lang/ru.ini index 356ce5f..a67568a 100644 --- a/res/lang/ru.ini +++ b/res/lang/ru.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = не удалось выделить память err_bounds = за пределами индекса + err_chdir = не удалось открыть домашнюю папку + err_console_dev = не удалось получить доступ к консоли err_dgn_oob = отладочное сообщение (log) err_domain = неверный домен + err_hostname = не удалось получить имя хоста err_mlock = сбой блокировки памяти err_null = нулевой указатель + err_pam = pam транзакция не удалась err_pam_abort = pam транзакция прервана err_pam_acct_expired = срок действия аккаунта истёк @@ -29,17 +36,27 @@ err_perm_dir = не удалось изменить текущий катало err_perm_group = не удалось понизить права доступа группы err_perm_user = не удалось понизить права доступа пользователя err_pwnam = не удалось получить информацию о пользователе + + err_user_gid = не удалось установить GID пользователя err_user_init = не удалось инициализировать пользователя err_user_uid = не удалось установить UID пользователя + + err_xsessions_dir = не удалось найти сессионную папку err_xsessions_open = не удалось открыть сессионную папку + login = логин logout = logged out + + numlock = numlock + password = пароль restart = перезагрузить shell = shell shutdown = выключить + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/sr.ini b/res/lang/sr.ini index 2f685e3..96b73d8 100644 --- a/res/lang/sr.ini +++ b/res/lang/sr.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = neuspijesna alokacija memorije err_bounds = izvan granica indeksa + err_chdir = neuspijesno otvaranje home foldera + err_console_dev = neuspijesno pristupanje konzoli err_dgn_oob = log poruka err_domain = nevazeci domen + err_hostname = neuspijesno trazenje hostname-a err_mlock = neuspijesno zakljucavanje memorije lozinke err_null = null pokazivac + err_pam = pam transakcija neuspijesna err_pam_abort = pam transakcija prekinuta err_pam_acct_expired = nalog istekao @@ -25,21 +32,31 @@ err_pam_session = greska sesije err_pam_sys = greska sistema err_pam_user_unknown = nepoznat korisnik err_path = neuspjelo postavljanje path-a -err_perm_dir = neuspjelo mijenjanje foldera +err_perm_dir = neuspjelo mijenjanje foldera err_perm_group = neuspjesno snizavanje dozvola grupe err_perm_user = neuspijesno snizavanje dozvola korisnika err_pwnam = neuspijesno skupljanje informacija o korisniku + + err_user_gid = neuspijesno postavljanje korisničkog GID-a err_user_init = neuspijensa inicijalizacija korisnika err_user_uid = neuspijesno postavljanje UID-a korisnika + + err_xsessions_dir = neuspijesno pronalazenje foldera sesija -err_xsessions_open = neuspijesno otvaranje foldera sesija +err_xsessions_open = neuspijesno otvaranje foldera sesija + login = korisnik logout = izlogovan + + numlock = numlock + password = lozinka restart = ponovo pokreni shell = shell shutdown = ugasi + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/sv.ini b/res/lang/sv.ini index 46af681..7ace439 100644 --- a/res/lang/sv.ini +++ b/res/lang/sv.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = misslyckad minnesallokering err_bounds = utanför banan index + err_chdir = misslyckades att öppna hemkatalog + err_console_dev = misslyckades att komma åt konsol err_dgn_oob = loggmeddelande err_domain = okänd domän + err_hostname = misslyckades att hämta värdnamn err_mlock = misslyckades att låsa lösenordsminne err_null = nullpekare + err_pam = pam-transaktion misslyckades err_pam_abort = pam-transaktion avbröts err_pam_acct_expired = konto upphört @@ -29,17 +36,27 @@ err_perm_dir = misslyckades att ändra aktuell katalog err_perm_group = misslyckades att nergradera gruppbehörigheter err_perm_user = misslyckades att nergradera användarbehörigheter err_pwnam = misslyckades att hämta användarinfo + + err_user_gid = misslyckades att ställa in användar-GID err_user_init = misslyckades att initialisera användaren err_user_uid = misslyckades att ställa in användar-UID + + err_xsessions_dir = misslyckades att hitta sessionskatalog err_xsessions_open = misslyckades att öppna sessionskatalog + login = inloggning logout = utloggad + + numlock = numlock + password = lösenord restart = starta om shell = skal shutdown = stäng av + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/tr.ini b/res/lang/tr.ini index 9bef617..32dae6e 100644 --- a/res/lang/tr.ini +++ b/res/lang/tr.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = basarisiz bellek ayirma err_bounds = sinirlarin disinda dizin + err_chdir = ev klasoru acilamadi + err_console_dev = konsola erisilemedi err_dgn_oob = log mesaji err_domain = gecersiz etki alani + err_hostname = ana bilgisayar adi alinamadi err_mlock = parola bellegi kilitlenemedi err_null = bos isaretci hatasi + err_pam = pam islemi basarisiz oldu err_pam_abort = pam islemi durduruldu err_pam_acct_expired = hesabin suresi dolmus @@ -29,17 +36,27 @@ err_perm_dir = gecerli dizin degistirilemedi err_perm_group = grup izinleri dusurulemedi err_perm_user = kullanici izinleri dusurulemedi err_pwnam = kullanici bilgileri alinamadi + + err_user_gid = kullanici icin GID ayarlanamadi err_user_init = kullanici oturumu baslatilamadi err_user_uid = kullanici icin UID ayarlanamadi + + err_xsessions_dir = oturumlar klasoru bulunamadi err_xsessions_open = oturumlar klasoru acilamadi + login = kullanici logout = oturumdan cikis yapildi + + numlock = numlock + password = sifre restart = yeniden baslat shell = shell shutdown = makineyi kapat + wayland = wayland + xinitrc = xinitrc diff --git a/res/lang/uk.ini b/res/lang/uk.ini index 5f5b113..76d48b5 100644 --- a/res/lang/uk.ini +++ b/res/lang/uk.ini @@ -1,13 +1,20 @@ + + + capslock = capslock err_alloc = невдале виділення пам'яті err_bounds = поза межами індексу + err_chdir = не вдалося відкрити домашній каталог + err_console_dev = невдалий доступ до консолі err_dgn_oob = повідомлення журналу (log) err_domain = недійсний домен + err_hostname = не вдалося отримати ім'я хосту err_mlock = збій блокування пам'яті err_null = нульовий вказівник + err_pam = невдала pam транзакція err_pam_abort = pam транзакція перервана err_pam_acct_expired = термін дії акаунту вичерпано @@ -29,17 +36,27 @@ err_perm_dir = не вдалося змінити поточний катало err_perm_group = не вдалося понизити права доступу групи err_perm_user = не вдалося понизити права доступу користувача err_pwnam = не вдалося отримати дані користувача + + err_user_gid = не вдалося змінити GID користувача err_user_init = не вдалося ініціалізувати користувача err_user_uid = не вдалося змінити UID користувача + + err_xsessions_dir = не вдалося знайти каталог сесій err_xsessions_open = не вдалося відкрити каталог сесій + login = логін logout = вийти + + numlock = numlock + password = пароль restart = перезавантажити shell = оболонка shutdown = вимкнути + wayland = wayland + xinitrc = xinitrc diff --git a/src/SharedError.zig b/src/SharedError.zig index dcf1f79..9e5de3b 100644 --- a/src/SharedError.zig +++ b/src/SharedError.zig @@ -9,7 +9,7 @@ const ErrorHandler = packed struct { const SharedError = @This(); -data: []align(std.mem.page_size) u8, +data: []align(std.heap.page_size_min) u8, pub fn init() !SharedError { const data = try std.posix.mmap(null, @sizeOf(ErrorHandler), std.posix.PROT.READ | std.posix.PROT.WRITE, .{ .TYPE = .SHARED, .ANONYMOUS = true }, -1, 0); diff --git a/src/animations/Matrix.zig b/src/animations/Matrix.zig index ba7e6e1..42bf89b 100644 --- a/src/animations/Matrix.zig +++ b/src/animations/Matrix.zig @@ -1,6 +1,6 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const Random = std.rand.Random; +const Random = std.Random; const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); const interop = @import("../interop.zig"); diff --git a/src/auth.zig b/src/auth.zig index 077fd35..a9d4772 100644 --- a/src/auth.zig +++ b/src/auth.zig @@ -108,7 +108,7 @@ pub fn authenticate(config: Config, current_environment: Session.Environment, lo .mask = std.posix.empty_sigset, .flags = 0, }; - try std.posix.sigaction(std.posix.SIG.TERM, &act, null); + std.posix.sigaction(std.posix.SIG.TERM, &act, null); try addUtmpEntry(&entry, pwd.pw_name.?, child_pid); } @@ -439,7 +439,7 @@ fn executeX11Cmd(shell: [*:0]const u8, pw_dir: [*:0]const u8, config: Config, de .mask = std.posix.empty_sigset, .flags = 0, }; - try std.posix.sigaction(std.posix.SIG.TERM, &act, null); + std.posix.sigaction(std.posix.SIG.TERM, &act, null); _ = std.posix.waitpid(xorg_pid, 0); interop.xcb.xcb_disconnect(xcb); diff --git a/src/config/Lang.zig b/src/config/Lang.zig index abe3ed0..a8ff9fc 100644 --- a/src/config/Lang.zig +++ b/src/config/Lang.zig @@ -1,3 +1,8 @@ +// +// NOTE: After editing this file, please run `/res/lang/normalize_lang_files.py` +// to update all the language files accordingly. +// + authenticating: []const u8 = "authenticating...", brightness_down: []const u8 = "decrease brightness", brightness_up: []const u8 = "increase brightness", @@ -48,8 +53,8 @@ err_xsessions_open: []const u8 = "failed to open sessions folder", insert: []const u8 = "insert", login: []const u8 = "login:", logout: []const u8 = "logged out", -normal: []const u8 = "normal", no_x11_support: []const u8 = "x11 support disabled at compile-time", +normal: []const u8 = "normal", numlock: []const u8 = "numlock", other: []const u8 = "other", password: []const u8 = "password:", @@ -58,5 +63,5 @@ shell: [:0]const u8 = "shell", shutdown: []const u8 = "shutdown", sleep: []const u8 = "sleep", wayland: []const u8 = "wayland", -xinitrc: [:0]const u8 = "xinitrc", x11: []const u8 = "x11", +xinitrc: [:0]const u8 = "xinitrc", diff --git a/src/main.zig b/src/main.zig index e58fafe..582db77 100644 --- a/src/main.zig +++ b/src/main.zig @@ -128,7 +128,10 @@ pub fn main() !void { const config_path = try std.fmt.allocPrint(allocator, "{s}{s}config.ini", .{ s, trailing_slash }); defer allocator.free(config_path); - config = config_ini.readFileToStruct(config_path, comment_characters, migrator.configFieldHandler) catch _config: { + config = config_ini.readFileToStruct(config_path, .{ + .fieldHandler = migrator.configFieldHandler, + .comment_characters = comment_characters, + }) catch _config: { config_load_failed = true; break :_config Config{}; }; @@ -136,21 +139,30 @@ pub fn main() !void { const lang_path = try std.fmt.allocPrint(allocator, "{s}{s}lang/{s}.ini", .{ s, trailing_slash, config.lang }); defer allocator.free(lang_path); - lang = lang_ini.readFileToStruct(lang_path, comment_characters, null) catch Lang{}; + lang = lang_ini.readFileToStruct(lang_path, .{ + .fieldHandler = null, + .comment_characters = comment_characters, + }) catch Lang{}; if (config.load) { save_path = try std.fmt.allocPrint(allocator, "{s}{s}save.ini", .{ s, trailing_slash }); save_path_alloc = true; var user_buf: [32]u8 = undefined; - save = save_ini.readFileToStruct(save_path, comment_characters, null) catch migrator.tryMigrateSaveFile(&user_buf); + save = save_ini.readFileToStruct(save_path, .{ + .fieldHandler = null, + .comment_characters = comment_characters, + }) catch migrator.tryMigrateSaveFile(&user_buf); } migrator.lateConfigFieldHandler(&config.animation); } else { const config_path = build_options.config_directory ++ "/ly/config.ini"; - config = config_ini.readFileToStruct(config_path, comment_characters, migrator.configFieldHandler) catch _config: { + config = config_ini.readFileToStruct(config_path, .{ + .fieldHandler = migrator.configFieldHandler, + .comment_characters = comment_characters, + }) catch _config: { config_load_failed = true; break :_config Config{}; }; @@ -158,11 +170,17 @@ pub fn main() !void { const lang_path = try std.fmt.allocPrint(allocator, "{s}/ly/lang/{s}.ini", .{ build_options.config_directory, config.lang }); defer allocator.free(lang_path); - lang = lang_ini.readFileToStruct(lang_path, comment_characters, null) catch Lang{}; + lang = lang_ini.readFileToStruct(lang_path, .{ + .fieldHandler = null, + .comment_characters = comment_characters, + }) catch Lang{}; if (config.load) { var user_buf: [32]u8 = undefined; - save = save_ini.readFileToStruct(save_path, comment_characters, null) catch migrator.tryMigrateSaveFile(&user_buf); + save = save_ini.readFileToStruct(save_path, .{ + .fieldHandler = null, + .comment_characters = comment_characters, + }) catch migrator.tryMigrateSaveFile(&user_buf); } migrator.lateConfigFieldHandler(&config.animation); @@ -192,7 +210,7 @@ pub fn main() !void { .mask = std.posix.empty_sigset, .flags = 0, }; - try std.posix.sigaction(std.posix.SIG.TERM, &act, null); + std.posix.sigaction(std.posix.SIG.TERM, &act, null); _ = termbox.tb_set_output_mode(termbox.TB_OUTPUT_NORMAL); _ = termbox.tb_clear(); @@ -677,7 +695,7 @@ pub fn main() !void { .user = login.text.items, .session_index = session.label.current, }; - ini.writeFromStruct(save_data, file.writer(), null, true, .{}) catch break :save_last_settings; + ini.writeFromStruct(save_data, file.writer(), null, .{}) catch break :save_last_settings; // Delete previous save file if it exists if (migrator.maybe_save_file) |path| std.fs.cwd().deleteFile(path) catch {}; diff --git a/src/tui/components/Session.zig b/src/tui/components/Session.zig index 2cc081a..d513949 100644 --- a/src/tui/components/Session.zig +++ b/src/tui/components/Session.zig @@ -110,7 +110,10 @@ pub fn crawl(self: *Session, path: []const u8, display_server: DisplayServer) !v const entry_path = try std.fmt.allocPrint(self.label.allocator, "{s}/{s}", .{ path, item.name }); defer self.label.allocator.free(entry_path); var entry_ini = Ini(Entry).init(self.label.allocator); - _ = try entry_ini.readFileToStruct(entry_path, "#", null); + _ = try entry_ini.readFileToStruct(entry_path, .{ + .fieldHandler = null, + .comment_characters = "#", + }); errdefer entry_ini.deinit(); var xdg_session_desktop: []const u8 = undefined;