From 13d333dd5566bd5e251c477040b93288f28f25f3 Mon Sep 17 00:00:00 2001 From: utox39 Date: Tue, 25 Mar 2025 11:07:44 +0100 Subject: [PATCH] feat(macos): add package manager info (homebrew) --- src/macos/packages.zig | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/macos/packages.zig diff --git a/src/macos/packages.zig b/src/macos/packages.zig new file mode 100644 index 0000000..9ac4226 --- /dev/null +++ b/src/macos/packages.zig @@ -0,0 +1,36 @@ +const std = @import("std"); +const utils = @import("utils.zig"); + +pub fn getPackagesInfo(allocator: std.mem.Allocator) ![]const u8 { + var packages_info = std.ArrayList(u8).init(allocator); + defer packages_info.deinit(); + + const homebrew_packages = try countHomebrewPackages(); + const homebrew_casks = try countHomebrewCasks(); + + var buffer: [10]u8 = undefined; + var fbs = std.io.fixedBufferStream(&buffer); + + if (homebrew_packages > 0) { + try std.fmt.formatInt(homebrew_packages, 10, .lower, .{}, fbs.writer()); + try packages_info.appendSlice("brew: "); + try packages_info.appendSlice(fbs.getWritten()); + } + + if (homebrew_casks > 0) { + fbs.reset(); + try std.fmt.formatInt(homebrew_casks, 10, .lower, .{}, fbs.writer()); + try packages_info.appendSlice(" brew-cask: "); + try packages_info.appendSlice(fbs.getWritten()); + } + + return try allocator.dupe(u8, packages_info.items); +} + +fn countHomebrewPackages() !usize { + return try utils.countEntries("/opt/homebrew/Cellar"); +} + +fn countHomebrewCasks() !usize { + return try utils.countEntries("/opt/homebrew/Caskroom"); +}