From 64539f43422055a3dfcfd171334ce6606b2c36fb Mon Sep 17 00:00:00 2001 From: AnErrupTion Date: Tue, 17 Mar 2026 21:44:33 +0100 Subject: [PATCH] Split UI code into ly-ui library Signed-off-by: AnErrupTion --- build.zig | 22 +---------- build.zig.zon | 12 +----- {src => ly-core/src}/Environment.zig | 0 {src/config => ly-core/src}/SavedUsers.zig | 0 ly-core/src/enums.zig | 7 ++++ ly-core/src/root.zig | 6 ++- ly-ui/build.zig | 37 +++++++++++++++++++ ly-ui/build.zig.zon | 20 ++++++++++ {src/tui => ly-ui/src}/Cell.zig | 0 {src/tui => ly-ui/src}/Position.zig | 0 {src/tui => ly-ui/src}/TerminalBuffer.zig | 0 {src/tui => ly-ui/src}/Widget.zig | 0 .../tui => ly-ui/src}/components/BigLabel.zig | 0 .../src}/components/CenteredBox.zig | 0 .../tui => ly-ui/src}/components/InfoLine.zig | 0 {src/tui => ly-ui/src}/components/Label.zig | 0 {src/tui => ly-ui/src}/components/Session.zig | 5 ++- {src/tui => ly-ui/src}/components/Text.zig | 0 .../tui => ly-ui/src}/components/UserList.zig | 4 +- .../src}/components/bigLabelLocales/en.zig | 0 .../src}/components/bigLabelLocales/fa.zig | 0 {src/tui => ly-ui/src}/components/generic.zig | 0 {src/tui => ly-ui/src}/keyboard.zig | 0 ly-ui/src/root.zig | 16 ++++++++ src/animations/Cascade.zig | 7 ++-- src/animations/ColorMix.zig | 11 +++--- src/animations/Doom.zig | 11 +++--- src/animations/DurFile.zig | 14 ++++--- src/animations/GameOfLife.zig | 11 +++--- src/animations/Matrix.zig | 11 +++--- src/auth.zig | 5 +-- src/config/migrator.zig | 13 ++++--- src/enums.zig | 8 ---- src/main.zig | 36 +++++++++--------- 34 files changed, 159 insertions(+), 97 deletions(-) rename {src => ly-core/src}/Environment.zig (100%) rename {src/config => ly-core/src}/SavedUsers.zig (100%) create mode 100644 ly-core/src/enums.zig create mode 100644 ly-ui/build.zig create mode 100644 ly-ui/build.zig.zon rename {src/tui => ly-ui/src}/Cell.zig (100%) rename {src/tui => ly-ui/src}/Position.zig (100%) rename {src/tui => ly-ui/src}/TerminalBuffer.zig (100%) rename {src/tui => ly-ui/src}/Widget.zig (100%) rename {src/tui => ly-ui/src}/components/BigLabel.zig (100%) rename {src/tui => ly-ui/src}/components/CenteredBox.zig (100%) rename {src/tui => ly-ui/src}/components/InfoLine.zig (100%) rename {src/tui => ly-ui/src}/components/Label.zig (100%) rename {src/tui => ly-ui/src}/components/Session.zig (95%) rename {src/tui => ly-ui/src}/components/Text.zig (100%) rename {src/tui => ly-ui/src}/components/UserList.zig (97%) rename {src/tui => ly-ui/src}/components/bigLabelLocales/en.zig (100%) rename {src/tui => ly-ui/src}/components/bigLabelLocales/fa.zig (100%) rename {src/tui => ly-ui/src}/components/generic.zig (100%) rename {src/tui => ly-ui/src}/keyboard.zig (100%) create mode 100644 ly-ui/src/root.zig diff --git a/build.zig b/build.zig index dcac1a9..c53b905 100644 --- a/build.zig +++ b/build.zig @@ -72,36 +72,18 @@ pub fn build(b: *std.Build) !void { .use_llvm = true, }); - const ly_core = b.dependency("ly_core", .{ .target = target, .optimize = optimize }); - exe.root_module.addImport("ly-core", ly_core.module("ly-core")); - - const zigini = b.dependency("zigini", .{ .target = target, .optimize = optimize }); - exe.root_module.addImport("zigini", zigini.module("zigini")); + const ly_ui = b.dependency("ly_ui", .{ .target = target, .optimize = optimize }); + exe.root_module.addImport("ly-ui", ly_ui.module("ly-ui")); exe.root_module.addOptions("build_options", build_options); const clap = b.dependency("clap", .{ .target = target, .optimize = optimize }); exe.root_module.addImport("clap", clap.module("clap")); - const termbox_dep = b.dependency("termbox2", .{ - .target = target, - .optimize = optimize, - }); - exe.linkSystemLibrary("pam"); if (enable_x11_support) exe.linkSystemLibrary("xcb"); exe.linkLibC(); - const translate_c = b.addTranslateC(.{ - .root_source_file = termbox_dep.path("termbox2.h"), - .target = target, - .optimize = optimize, - }); - translate_c.defineCMacroRaw("TB_IMPL"); - translate_c.defineCMacro("TB_OPT_ATTR_W", "32"); // Enable 24-bit color support + styling (32-bit) - const termbox2 = translate_c.addModule("termbox2"); - exe.root_module.addImport("termbox2", termbox2); - b.installArtifact(exe); const run_cmd = b.addRunArtifact(exe); diff --git a/build.zig.zon b/build.zig.zon index fc1349d..5471106 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -4,21 +4,13 @@ .fingerprint = 0xa148ffcc5dc2cb59, .minimum_zig_version = "0.15.0", .dependencies = .{ - .ly_core = .{ - .path = "ly-core", + .ly_ui = .{ + .path = "ly-ui", }, .clap = .{ .url = "git+https://github.com/Hejsil/zig-clap#5289e0753cd274d65344bef1c114284c633536ea", .hash = "clap-0.11.0-oBajB-HnAQDPCKYzwF7rO3qDFwRcD39Q0DALlTSz5H7e", }, - .zigini = .{ - .url = "git+https://github.com/AnErrupTion/zigini?ref=zig-0.15.0#9281f47702b57779e831d7618e158abb8eb4d4a2", - .hash = "zigini-0.3.3-36M0FRJJAADZVq5HPm-hYKMpFFTr0OgjbEYcK2ijKZ5n", - }, - .termbox2 = .{ - .url = "git+https://github.com/AnErrupTion/termbox2?ref=master#496730697c662893eec43192f48ff616c2539da6", - .hash = "N-V-__8AAOEWBQDt5tNdIzIFY6n8DdZsCP-6MyLoNS20wgpA", - }, }, .paths = .{""}, } diff --git a/src/Environment.zig b/ly-core/src/Environment.zig similarity index 100% rename from src/Environment.zig rename to ly-core/src/Environment.zig diff --git a/src/config/SavedUsers.zig b/ly-core/src/SavedUsers.zig similarity index 100% rename from src/config/SavedUsers.zig rename to ly-core/src/SavedUsers.zig diff --git a/ly-core/src/enums.zig b/ly-core/src/enums.zig new file mode 100644 index 0000000..6947a2b --- /dev/null +++ b/ly-core/src/enums.zig @@ -0,0 +1,7 @@ +pub const DisplayServer = enum { + wayland, + shell, + xinitrc, + x11, + custom, +}; diff --git a/ly-core/src/root.zig b/ly-core/src/root.zig index a7929f4..3f63a84 100644 --- a/ly-core/src/root.zig +++ b/ly-core/src/root.zig @@ -1,10 +1,14 @@ const std = @import("std"); -const ini = @import("zigini"); + +pub const ini = @import("zigini"); pub const interop = @import("interop.zig"); pub const UidRange = @import("UidRange.zig"); pub const LogFile = @import("LogFile.zig"); pub const SharedError = @import("SharedError.zig"); +pub const SavedUsers = @import("SavedUsers.zig"); +pub const Environment = @import("Environment.zig"); +pub const DisplayServer = @import("enums.zig").DisplayServer; pub fn IniParser(comptime Struct: type) type { return struct { diff --git a/ly-ui/build.zig b/ly-ui/build.zig new file mode 100644 index 0000000..589f7c7 --- /dev/null +++ b/ly-ui/build.zig @@ -0,0 +1,37 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + const mod = b.addModule("ly-ui", .{ + .root_source_file = b.path("src/root.zig"), + .target = target, + .optimize = optimize, + }); + + const ly_core = b.dependency("ly_core", .{ .target = target, .optimize = optimize }); + mod.addImport("ly-core", ly_core.module("ly-core")); + + const termbox_dep = b.dependency("termbox2", .{ + .target = target, + .optimize = optimize, + }); + + const translate_c = b.addTranslateC(.{ + .root_source_file = termbox_dep.path("termbox2.h"), + .target = target, + .optimize = optimize, + }); + translate_c.defineCMacroRaw("TB_IMPL"); + translate_c.defineCMacro("TB_OPT_ATTR_W", "32"); // Enable 24-bit color support + styling (32-bit) + const termbox2 = translate_c.addModule("termbox2"); + mod.addImport("termbox2", termbox2); + + const mod_tests = b.addTest(.{ + .root_module = mod, + }); + const run_mod_tests = b.addRunArtifact(mod_tests); + + const test_step = b.step("test", "Run tests"); + test_step.dependOn(&run_mod_tests.step); +} diff --git a/ly-ui/build.zig.zon b/ly-ui/build.zig.zon new file mode 100644 index 0000000..a16ce9e --- /dev/null +++ b/ly-ui/build.zig.zon @@ -0,0 +1,20 @@ +.{ + .name = .ly_ui, + .version = "1.0.0", + .fingerprint = 0x8d11bf85a74ec803, + .minimum_zig_version = "0.15.0", + .dependencies = .{ + .ly_core = .{ + .path = "../ly-core", + }, + .termbox2 = .{ + .url = "git+https://github.com/AnErrupTion/termbox2?ref=master#496730697c662893eec43192f48ff616c2539da6", + .hash = "N-V-__8AAOEWBQDt5tNdIzIFY6n8DdZsCP-6MyLoNS20wgpA", + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/src/tui/Cell.zig b/ly-ui/src/Cell.zig similarity index 100% rename from src/tui/Cell.zig rename to ly-ui/src/Cell.zig diff --git a/src/tui/Position.zig b/ly-ui/src/Position.zig similarity index 100% rename from src/tui/Position.zig rename to ly-ui/src/Position.zig diff --git a/src/tui/TerminalBuffer.zig b/ly-ui/src/TerminalBuffer.zig similarity index 100% rename from src/tui/TerminalBuffer.zig rename to ly-ui/src/TerminalBuffer.zig diff --git a/src/tui/Widget.zig b/ly-ui/src/Widget.zig similarity index 100% rename from src/tui/Widget.zig rename to ly-ui/src/Widget.zig diff --git a/src/tui/components/BigLabel.zig b/ly-ui/src/components/BigLabel.zig similarity index 100% rename from src/tui/components/BigLabel.zig rename to ly-ui/src/components/BigLabel.zig diff --git a/src/tui/components/CenteredBox.zig b/ly-ui/src/components/CenteredBox.zig similarity index 100% rename from src/tui/components/CenteredBox.zig rename to ly-ui/src/components/CenteredBox.zig diff --git a/src/tui/components/InfoLine.zig b/ly-ui/src/components/InfoLine.zig similarity index 100% rename from src/tui/components/InfoLine.zig rename to ly-ui/src/components/InfoLine.zig diff --git a/src/tui/components/Label.zig b/ly-ui/src/components/Label.zig similarity index 100% rename from src/tui/components/Label.zig rename to ly-ui/src/components/Label.zig diff --git a/src/tui/components/Session.zig b/ly-ui/src/components/Session.zig similarity index 95% rename from src/tui/components/Session.zig rename to ly-ui/src/components/Session.zig index 3f7609e..d7503eb 100644 --- a/src/tui/components/Session.zig +++ b/ly-ui/src/components/Session.zig @@ -1,7 +1,9 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const Environment = @import("../../Environment.zig"); +const ly_core = @import("ly-core"); +const Environment = ly_core.Environment; + const keyboard = @import("../keyboard.zig"); const TerminalBuffer = @import("../TerminalBuffer.zig"); const Widget = @import("../Widget.zig"); @@ -9,6 +11,7 @@ const generic = @import("generic.zig"); const UserList = @import("UserList.zig"); const Env = struct { + // TODO: Remove dependency on Environment environment: Environment, index: usize, }; diff --git a/src/tui/components/Text.zig b/ly-ui/src/components/Text.zig similarity index 100% rename from src/tui/components/Text.zig rename to ly-ui/src/components/Text.zig diff --git a/src/tui/components/UserList.zig b/ly-ui/src/components/UserList.zig similarity index 97% rename from src/tui/components/UserList.zig rename to ly-ui/src/components/UserList.zig index 067cc2f..76bd796 100644 --- a/src/tui/components/UserList.zig +++ b/ly-ui/src/components/UserList.zig @@ -1,7 +1,9 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const SavedUsers = @import("../../config/SavedUsers.zig"); +const ly_core = @import("ly-core"); +const SavedUsers = ly_core.SavedUsers; + const keyboard = @import("../keyboard.zig"); const TerminalBuffer = @import("../TerminalBuffer.zig"); const Widget = @import("../Widget.zig"); diff --git a/src/tui/components/bigLabelLocales/en.zig b/ly-ui/src/components/bigLabelLocales/en.zig similarity index 100% rename from src/tui/components/bigLabelLocales/en.zig rename to ly-ui/src/components/bigLabelLocales/en.zig diff --git a/src/tui/components/bigLabelLocales/fa.zig b/ly-ui/src/components/bigLabelLocales/fa.zig similarity index 100% rename from src/tui/components/bigLabelLocales/fa.zig rename to ly-ui/src/components/bigLabelLocales/fa.zig diff --git a/src/tui/components/generic.zig b/ly-ui/src/components/generic.zig similarity index 100% rename from src/tui/components/generic.zig rename to ly-ui/src/components/generic.zig diff --git a/src/tui/keyboard.zig b/ly-ui/src/keyboard.zig similarity index 100% rename from src/tui/keyboard.zig rename to ly-ui/src/keyboard.zig diff --git a/ly-ui/src/root.zig b/ly-ui/src/root.zig new file mode 100644 index 0000000..d21fffe --- /dev/null +++ b/ly-ui/src/root.zig @@ -0,0 +1,16 @@ +pub const ly_core = @import("ly-core"); + +pub const Cell = @import("Cell.zig"); +pub const keyboard = @import("keyboard.zig"); +pub const Position = @import("Position.zig"); +pub const TerminalBuffer = @import("TerminalBuffer.zig"); +pub const Widget = @import("Widget.zig"); + +pub const BigLabel = @import("components/BigLabel.zig"); +pub const CenteredBox = @import("components/CenteredBox.zig"); +pub const CyclableLabel = @import("components/generic.zig").CyclableLabel; +pub const InfoLine = @import("components/InfoLine.zig"); +pub const Label = @import("components/Label.zig"); +pub const Session = @import("components/Session.zig"); +pub const Text = @import("components/Text.zig"); +pub const UserList = @import("components/UserList.zig"); diff --git a/src/animations/Cascade.zig b/src/animations/Cascade.zig index 32f2f6a..402ccd9 100644 --- a/src/animations/Cascade.zig +++ b/src/animations/Cascade.zig @@ -1,9 +1,10 @@ const std = @import("std"); const math = std.math; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Widget = @import("../tui/Widget.zig"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; const Cascade = @This(); diff --git a/src/animations/ColorMix.zig b/src/animations/ColorMix.zig index 278f646..2366e8d 100644 --- a/src/animations/ColorMix.zig +++ b/src/animations/ColorMix.zig @@ -1,14 +1,15 @@ const std = @import("std"); const math = std.math; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; + +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const TimeOfDay = interop.TimeOfDay; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Widget = @import("../tui/Widget.zig"); - const ColorMix = @This(); const Vec2 = @Vector(2, f32); diff --git a/src/animations/Doom.zig b/src/animations/Doom.zig index e580bd9..a5db265 100644 --- a/src/animations/Doom.zig +++ b/src/animations/Doom.zig @@ -1,14 +1,15 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; + +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const TimeOfDay = interop.TimeOfDay; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Widget = @import("../tui/Widget.zig"); - const Doom = @This(); pub const STEPS = 12; diff --git a/src/animations/DurFile.zig b/src/animations/DurFile.zig index 9b24349..3e80ead 100644 --- a/src/animations/DurFile.zig +++ b/src/animations/DurFile.zig @@ -4,18 +4,20 @@ const Json = std.json; const eql = std.mem.eql; const flate = std.compress.flate; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Color = TerminalBuffer.Color; +const Styling = TerminalBuffer.Styling; +const Widget = ly_ui.Widget; + +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const TimeOfDay = interop.TimeOfDay; const LogFile = ly_core.LogFile; const enums = @import("../enums.zig"); const DurOffsetAlignment = enums.DurOffsetAlignment; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Color = TerminalBuffer.Color; -const Styling = TerminalBuffer.Styling; -const Widget = @import("../tui/Widget.zig"); fn read_decompress_file(allocator: Allocator, file_path: []const u8) ![]u8 { const file_buffer = std.fs.cwd().openFile(file_path, .{}) catch { diff --git a/src/animations/GameOfLife.zig b/src/animations/GameOfLife.zig index 929a7c0..3ad5a38 100644 --- a/src/animations/GameOfLife.zig +++ b/src/animations/GameOfLife.zig @@ -1,14 +1,15 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; + +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const TimeOfDay = interop.TimeOfDay; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Widget = @import("../tui/Widget.zig"); - const GameOfLife = @This(); // Visual styles - using block characters like other animations diff --git a/src/animations/Matrix.zig b/src/animations/Matrix.zig index 2ec2aad..8022e45 100644 --- a/src/animations/Matrix.zig +++ b/src/animations/Matrix.zig @@ -2,14 +2,15 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const Random = std.Random; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Cell = ly_ui.Cell; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; + +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const TimeOfDay = interop.TimeOfDay; -const Cell = @import("../tui/Cell.zig"); -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); -const Widget = @import("../tui/Widget.zig"); - pub const FRAME_DELAY: usize = 8; // Characters change mid-scroll diff --git a/src/auth.zig b/src/auth.zig index 2dd3393..5b2b8fe 100644 --- a/src/auth.zig +++ b/src/auth.zig @@ -3,15 +3,14 @@ const Md5 = std.crypto.hash.Md5; const builtin = @import("builtin"); const build_options = @import("build_options"); -const ly_core = @import("ly-core"); +const ly_core = @import("ly-ui").ly_core; const interop = ly_core.interop; const SharedError = ly_core.SharedError; const LogFile = ly_core.LogFile; +const Environment = ly_core.Environment; const utmp = interop.utmp; const Utmp = utmp.utmpx; -const Environment = @import("Environment.zig"); - pub const AuthOptions = struct { tty: u8, service_name: [:0]const u8, diff --git a/src/config/migrator.zig b/src/config/migrator.zig index 5e6394d..89d250b 100644 --- a/src/config/migrator.zig +++ b/src/config/migrator.zig @@ -5,16 +5,17 @@ const std = @import("std"); var temporary_allocator = std.heap.page_allocator; -const ini = @import("zigini"); -const ly_core = @import("ly-core"); -const IniParser = ly_core.IniParser; - -const TerminalBuffer = @import("../tui/TerminalBuffer.zig"); +const ly_ui = @import("ly-ui"); +const TerminalBuffer = ly_ui.TerminalBuffer; const Color = TerminalBuffer.Color; const Styling = TerminalBuffer.Styling; +const ly_core = ly_ui.ly_core; +const IniParser = ly_core.IniParser; +const SavedUsers = ly_core.SavedUsers; +const ini = ly_core.ini; + const Config = @import("Config.zig"); const OldSave = @import("OldSave.zig"); -const SavedUsers = @import("SavedUsers.zig"); const color_properties = [_][]const u8{ "bg", diff --git a/src/enums.zig b/src/enums.zig index 47771da..cbe8ed8 100644 --- a/src/enums.zig +++ b/src/enums.zig @@ -9,14 +9,6 @@ pub const Animation = enum { dur_file, }; -pub const DisplayServer = enum { - wayland, - shell, - xinitrc, - x11, - custom, -}; - pub const Input = enum { info_line, session, diff --git a/src/main.zig b/src/main.zig index 5523231..2033fa4 100644 --- a/src/main.zig +++ b/src/main.zig @@ -6,14 +6,29 @@ const builtin = @import("builtin"); const build_options = @import("build_options"); const clap = @import("clap"); -const ini = @import("zigini"); -const Ini = ini.Ini; -const ly_core = @import("ly-core"); +const ly_ui = @import("ly-ui"); +const Position = ly_ui.Position; +const BigLabel = ly_ui.BigLabel; +const CenteredBox = ly_ui.CenteredBox; +const InfoLine = ly_ui.InfoLine; +const Label = ly_ui.Label; +const Session = ly_ui.Session; +const Text = ly_ui.Text; +const UserList = ly_ui.UserList; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; +const ly_core = ly_ui.ly_core; const interop = ly_core.interop; const UidRange = ly_core.UidRange; const LogFile = ly_core.LogFile; const SharedError = ly_core.SharedError; const IniParser = ly_core.IniParser; +const SavedUsers = ly_core.SavedUsers; +const DisplayServer = ly_core.DisplayServer; +const Environment = ly_core.Environment; +const Entry = Environment.Entry; +const ini = ly_core.ini; +const Ini = ini.Ini; const Cascade = @import("animations/Cascade.zig"); const ColorMix = @import("animations/ColorMix.zig"); @@ -26,21 +41,6 @@ const Config = @import("config/Config.zig"); const Lang = @import("config/Lang.zig"); const migrator = @import("config/migrator.zig"); const OldSave = @import("config/OldSave.zig"); -const SavedUsers = @import("config/SavedUsers.zig"); -const enums = @import("enums.zig"); -const DisplayServer = enums.DisplayServer; -const Environment = @import("Environment.zig"); -const Entry = Environment.Entry; -const Position = @import("tui/Position.zig"); -const BigLabel = @import("tui/components/BigLabel.zig"); -const CenteredBox = @import("tui/components/CenteredBox.zig"); -const InfoLine = @import("tui/components/InfoLine.zig"); -const Label = @import("tui/components/Label.zig"); -const Session = @import("tui/components/Session.zig"); -const Text = @import("tui/components/Text.zig"); -const UserList = @import("tui/components/UserList.zig"); -const TerminalBuffer = @import("tui/TerminalBuffer.zig"); -const Widget = @import("tui/Widget.zig"); const ly_version_str = "Ly version " ++ build_options.version;