From c867ea69c69e6077b1c10648615b31ea2cb6f395 Mon Sep 17 00:00:00 2001 From: utox39 Date: Sun, 14 Dec 2025 02:28:52 +0100 Subject: [PATCH] feat(linux-packages): add packages count --- src/formatters.zig | 10 +++------- src/linux/linux.zig | 1 + src/linux/packages.zig | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/formatters.zig b/src/formatters.zig index 0bed40d..c71c235 100644 --- a/src/formatters.zig +++ b/src/formatters.zig @@ -100,13 +100,9 @@ pub fn getDefaultFormattedPackagesInfo(allocator: std.mem.Allocator) !Result { } pub fn getFormattedPackagesInfo(allocator: std.mem.Allocator, key: []const u8, key_color: []const u8) !Result { - if (builtin.os.tag == .macos) { - const packages_info = try detection.packages.getPackagesInfo(allocator); - defer allocator.free(packages_info); - return Result{ .string = try std.fmt.allocPrint(allocator, "{s}{s}:{s}{s}", .{ key_color, key, ascii.Reset, packages_info }) }; - } else if (builtin.os.tag == .linux) { - return Result{ .string = try std.fmt.allocPrint(allocator, "{s}{s}:{s} WIP", .{ key_color, key, ascii.Reset }) }; - } + const packages_info = try detection.packages.getPackagesInfo(allocator); + defer allocator.free(packages_info); + return Result{ .string = try std.fmt.allocPrint(allocator, "{s}{s}:{s}{s}", .{ key_color, key, ascii.Reset, packages_info }) }; } pub fn getDefaultFormattedShellInfo(allocator: std.mem.Allocator) !Result { diff --git a/src/linux/linux.zig b/src/linux/linux.zig index f7ee652..7c89615 100644 --- a/src/linux/linux.zig +++ b/src/linux/linux.zig @@ -2,3 +2,4 @@ pub const hardware = @import("./hardware.zig"); pub const network = @import("./network.zig"); pub const system = @import("./system.zig"); pub const user = @import("./user.zig"); +pub const packages = @import("./packages.zig"); diff --git a/src/linux/packages.zig b/src/linux/packages.zig index 22569d3..ed19ef3 100644 --- a/src/linux/packages.zig +++ b/src/linux/packages.zig @@ -1,4 +1,40 @@ const std = @import("std"); +const utils = @import("../utils.zig"); + +pub fn getPackagesInfo(allocator: std.mem.Allocator) ![]const u8 { + var packages_info = std.array_list.Managed(u8).init(allocator); + defer packages_info.deinit(); + + const flatpak_packages = countFlatpakPackages(allocator) catch 0; + const nix_packages = countNixPackages(allocator) catch 0; + const dpkg_packages = countDpkgPackages(allocator) catch |err| if (err == error.FileNotFound) 0 else return err; + const pacman_packages = countPacmanPackages() catch |err| if (err == error.FileNotFound) 0 else return err; + const xbps_packages = countXbpsPackages(allocator) catch |err| if (err == error.FileNotFound) 0 else return err; + + var buffer: [32]u8 = undefined; + + if (nix_packages > 0) { + try packages_info.appendSlice(try std.fmt.bufPrint(&buffer, " Nix: {d}", .{nix_packages})); + } + + if (flatpak_packages > 0) { + try packages_info.appendSlice(try std.fmt.bufPrint(&buffer, " Flatpak: {d}", .{flatpak_packages})); + } + + if (dpkg_packages > 0) { + try packages_info.appendSlice(try std.fmt.bufPrint(&buffer, " Dpkg: {d}", .{dpkg_packages})); + } + + if (pacman_packages > 0) { + try packages_info.appendSlice(try std.fmt.bufPrint(&buffer, " Pacman: {d}", .{pacman_packages})); + } + + if (xbps_packages > 0) { + try packages_info.appendSlice(try std.fmt.bufPrint(&buffer, " Xbps: {d}", .{xbps_packages})); + } + + return try allocator.dupe(u8, packages_info.items); +} fn countFlatpakPackages(allocator: std.mem.Allocator) !usize { // flatpak list | wc -l