const std = @import("std"); const Allocator = std.mem.Allocator; const Dir = std.fs.Dir; pub fn getDataHome(allocator: Allocator, app_name: []const u8) ![]u8 { if (std.os.getenv("XDG_DATA_HOME")) |data_home| { return std.fs.path.join(allocator, &.{ data_home, app_name }); } if (std.os.getenv("HOME")) |home| { return std.fs.path.join(allocator, &.{ home, ".local", "share", app_name }); } return error.HomeNotFound; } pub fn getBinHome(allocator: Allocator) ![]u8 { if (std.os.getenv("HOME")) |home| { return std.fs.path.join(allocator, &.{ home, ".local", "bin" }); } return error.HomeNotFound; } pub fn openDataHome(allocator: Allocator, app_name: []const u8) !Dir { var data_home = try getDataHome(allocator, app_name); defer allocator.free(data_home); return try std.fs.cwd().makeOpenPath(data_home, .{}); } pub fn openBinHome(allocator: Allocator) !Dir { var bin_home = try getBinHome(allocator); defer allocator.free(bin_home); return try std.fs.cwd().makeOpenPath(bin_home, .{}); }