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/ly-core/src/root.zig b/ly-core/src/root.zig index a7929f4..4bcb6a8 100644 --- a/ly-core/src/root.zig +++ b/ly-core/src/root.zig @@ -1,5 +1,6 @@ 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"); 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/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/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/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..0baa857 --- /dev/null +++ b/ly-ui/src/root.zig @@ -0,0 +1,13 @@ +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 Label = @import("components/Label.zig"); +pub const Text = @import("components/Text.zig"); diff --git a/src/Environment.zig b/src/Environment.zig index f99ebb7..b661c14 100644 --- a/src/Environment.zig +++ b/src/Environment.zig @@ -1,4 +1,4 @@ -const ini = @import("zigini"); +const ini = @import("ly-ui").ly_core.ini; const Ini = ini.Ini; const enums = @import("enums.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..a9cad0c 100644 --- a/src/auth.zig +++ b/src/auth.zig @@ -3,7 +3,7 @@ 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; diff --git a/src/tui/components/InfoLine.zig b/src/components/InfoLine.zig similarity index 89% rename from src/tui/components/InfoLine.zig rename to src/components/InfoLine.zig index 95578f5..1afcdcf 100644 --- a/src/tui/components/InfoLine.zig +++ b/src/components/InfoLine.zig @@ -1,12 +1,13 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const keyboard = @import("../keyboard.zig"); -const TerminalBuffer = @import("../TerminalBuffer.zig"); -const Widget = @import("../Widget.zig"); -const generic = @import("generic.zig"); +const ly_ui = @import("ly-ui"); +const keyboard = ly_ui.keyboard; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; +const CyclableLabel = ly_ui.CyclableLabel; -const MessageLabel = generic.CyclableLabel(Message, Message); +const MessageLabel = CyclableLabel(Message, Message); const InfoLine = @This(); diff --git a/src/tui/components/Session.zig b/src/components/Session.zig similarity index 86% rename from src/tui/components/Session.zig rename to src/components/Session.zig index c221ef6..6ec4016 100644 --- a/src/tui/components/Session.zig +++ b/src/components/Session.zig @@ -1,20 +1,20 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const enums = @import("../../enums.zig"); -const DisplayServer = enums.DisplayServer; -const Environment = @import("../../Environment.zig"); -const keyboard = @import("../keyboard.zig"); -const TerminalBuffer = @import("../TerminalBuffer.zig"); -const Widget = @import("../Widget.zig"); -const generic = @import("generic.zig"); +const ly_ui = @import("ly-ui"); +const keyboard = ly_ui.keyboard; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; +const CyclableLabel = ly_ui.CyclableLabel; + const UserList = @import("UserList.zig"); +const Environment = @import("../Environment.zig"); const Env = struct { environment: Environment, index: usize, }; -const EnvironmentLabel = generic.CyclableLabel(Env, *UserList); +const EnvironmentLabel = CyclableLabel(Env, *UserList); const Session = @This(); diff --git a/src/tui/components/UserList.zig b/src/components/UserList.zig similarity index 91% rename from src/tui/components/UserList.zig rename to src/components/UserList.zig index dadf8dc..77b8787 100644 --- a/src/tui/components/UserList.zig +++ b/src/components/UserList.zig @@ -1,12 +1,14 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const SavedUsers = @import("../../config/SavedUsers.zig"); -const keyboard = @import("../keyboard.zig"); -const TerminalBuffer = @import("../TerminalBuffer.zig"); -const Widget = @import("../Widget.zig"); -const generic = @import("generic.zig"); +const ly_ui = @import("ly-ui"); +const keyboard = ly_ui.keyboard; +const TerminalBuffer = ly_ui.TerminalBuffer; +const Widget = ly_ui.Widget; +const CyclableLabel = ly_ui.CyclableLabel; + const Session = @import("Session.zig"); +const SavedUsers = @import("../config/SavedUsers.zig"); const StringList = std.ArrayListUnmanaged([]const u8); pub const User = struct { @@ -15,7 +17,7 @@ pub const User = struct { allocated_index: bool, first_run: bool, }; -const UserLabel = generic.CyclableLabel(User, *Session); +const UserLabel = CyclableLabel(User, *Session); const UserList = @This(); diff --git a/src/config/migrator.zig b/src/config/migrator.zig index b8562fe..48b1354 100644 --- a/src/config/migrator.zig +++ b/src/config/migrator.zig @@ -5,13 +5,14 @@ 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 ini = ly_core.ini; + const Config = @import("Config.zig"); const OldSave = @import("OldSave.zig"); const SavedUsers = @import("SavedUsers.zig"); diff --git a/src/main.zig b/src/main.zig index 4214980..a19732b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -6,14 +6,22 @@ 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 Label = ly_ui.Label; +const Text = ly_ui.Text; +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 ini = ly_core.ini; +const Ini = ini.Ini; const Cascade = @import("animations/Cascade.zig"); const ColorMix = @import("animations/ColorMix.zig"); @@ -22,26 +30,18 @@ const DurFile = @import("animations/DurFile.zig"); const GameOfLife = @import("animations/GameOfLife.zig"); const Matrix = @import("animations/Matrix.zig"); const auth = @import("auth.zig"); +const InfoLine = @import("components/InfoLine.zig"); +const Session = @import("components/Session.zig"); +const UserList = @import("components/UserList.zig"); 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 CustomCommands = @import("config/custom.zig"); -const enums = @import("enums.zig"); -const DisplayServer = enums.DisplayServer; +const DisplayServer = @import("enums.zig").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;