From 3a5a268bbef2a953f0f062faddb0c1f9cd9f66fa Mon Sep 17 00:00:00 2001 From: utox39 Date: Thu, 17 Jul 2025 02:25:26 +0200 Subject: [PATCH 1/5] feat(linux-gpu): parse gpu name --- src/linux/hardware.zig | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/linux/hardware.zig b/src/linux/hardware.zig index dc44579..89d1dfb 100644 --- a/src/linux/hardware.zig +++ b/src/linux/hardware.zig @@ -114,8 +114,12 @@ pub fn getGpuInfo(allocator: std.mem.Allocator) !std.ArrayList(GpuInfo) { devices.*.device_id, ); + const gpu_name = try allocator.dupe(u8, std.mem.span(name)); + + _ = try parseGpuName(allocator, gpu_name); + try gpu_info_list.append(GpuInfo{ - .gpu_name = try allocator.dupe(u8, std.mem.span(name)), + .gpu_name = gpu_name, .gpu_cores = 0, .gpu_freq = 0.0, }); @@ -133,6 +137,36 @@ pub fn getGpuInfo(allocator: std.mem.Allocator) !std.ArrayList(GpuInfo) { return gpu_info_list; } +fn parseGpuName(allocator: std.mem.Allocator, name: []u8) ![]u8 { + if (std.mem.startsWith(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]")) { + const size = std.mem.replacementSize(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]", "AMD"); + const parsed_gpu_name = try allocator.alloc(u8, size); + _ = std.mem.replace(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]", "AMD", parsed_gpu_name); + + std.log.info("gpu amd: {s}\n", .{parsed_gpu_name}); + + return parsed_gpu_name; + } else if (std.mem.startsWith(u8, name, "Intel Corporation")) { + const size = std.mem.replacementSize(u8, name, "Intel Corporation", "Intel"); + const parsed_gpu_name = try allocator.alloc(u8, size); + _ = std.mem.replace(u8, name, "Intel Corporation", "Intel", parsed_gpu_name); + + std.log.info("gpu intel: {s}\n", .{parsed_gpu_name}); + + return parsed_gpu_name; + } else if (std.mem.startsWith(u8, name, "NVIDIA Corporation")) { + const size = std.mem.replacementSize(u8, name, "NVIDIA Corporation", "NVIDIA"); + const parsed_gpu_name = try allocator.alloc(u8, size); + _ = std.mem.replace(u8, name, "NVIDIA Corporation", "NVIDIA", parsed_gpu_name); + + std.log.info("gpu nvidia: {s}\n", .{parsed_gpu_name}); + + return parsed_gpu_name; + } + + return name; +} + pub fn getRamInfo(allocator: std.mem.Allocator) !RamInfo { // Reads /proc/meminfo const meminfo_path = "/proc/meminfo"; From f73b1be02327964fd3d926d882beb24190edc13a Mon Sep 17 00:00:00 2001 From: utox39 Date: Thu, 17 Jul 2025 15:33:43 +0200 Subject: [PATCH 2/5] refactor(linux-gpu): use gpu name parser --- src/linux/hardware.zig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/linux/hardware.zig b/src/linux/hardware.zig index 89d1dfb..3c92089 100644 --- a/src/linux/hardware.zig +++ b/src/linux/hardware.zig @@ -115,11 +115,12 @@ pub fn getGpuInfo(allocator: std.mem.Allocator) !std.ArrayList(GpuInfo) { ); const gpu_name = try allocator.dupe(u8, std.mem.span(name)); + defer allocator.free(gpu_name); - _ = try parseGpuName(allocator, gpu_name); + const parsed_gpu_name = try parseGpuName(allocator, gpu_name); try gpu_info_list.append(GpuInfo{ - .gpu_name = gpu_name, + .gpu_name = parsed_gpu_name, .gpu_cores = 0, .gpu_freq = 0.0, }); From ec0e3ffd18b4bb198db35cecb4ff3f171f12c321 Mon Sep 17 00:00:00 2001 From: utox39 Date: Thu, 17 Jul 2025 15:34:21 +0200 Subject: [PATCH 3/5] refactor(linux-gpu): add note and remove debug logs --- src/linux/hardware.zig | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/linux/hardware.zig b/src/linux/hardware.zig index 3c92089..d94b4ae 100644 --- a/src/linux/hardware.zig +++ b/src/linux/hardware.zig @@ -139,29 +139,25 @@ pub fn getGpuInfo(allocator: std.mem.Allocator) !std.ArrayList(GpuInfo) { } fn parseGpuName(allocator: std.mem.Allocator, name: []u8) ![]u8 { + // NOTE: for references: https://github.com/pciutils/pciutils/blob/master/pci.ids + if (std.mem.startsWith(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]")) { const size = std.mem.replacementSize(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]", "AMD"); const parsed_gpu_name = try allocator.alloc(u8, size); _ = std.mem.replace(u8, name, "Advanced Micro Devices, Inc. [AMD/ATI]", "AMD", parsed_gpu_name); - std.log.info("gpu amd: {s}\n", .{parsed_gpu_name}); - return parsed_gpu_name; } else if (std.mem.startsWith(u8, name, "Intel Corporation")) { const size = std.mem.replacementSize(u8, name, "Intel Corporation", "Intel"); const parsed_gpu_name = try allocator.alloc(u8, size); _ = std.mem.replace(u8, name, "Intel Corporation", "Intel", parsed_gpu_name); - std.log.info("gpu intel: {s}\n", .{parsed_gpu_name}); - return parsed_gpu_name; } else if (std.mem.startsWith(u8, name, "NVIDIA Corporation")) { const size = std.mem.replacementSize(u8, name, "NVIDIA Corporation", "NVIDIA"); const parsed_gpu_name = try allocator.alloc(u8, size); _ = std.mem.replace(u8, name, "NVIDIA Corporation", "NVIDIA", parsed_gpu_name); - std.log.info("gpu nvidia: {s}\n", .{parsed_gpu_name}); - return parsed_gpu_name; } From 0d7f606b7d7aa307897554683827609560d75087 Mon Sep 17 00:00:00 2001 From: utox39 Date: Thu, 17 Jul 2025 15:35:37 +0200 Subject: [PATCH 4/5] build: bump to version 0.7.0 --- build.zig.zon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.zig.zon b/build.zig.zon index 2a78f4d..d82f054 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -10,7 +10,7 @@ // This is a [Semantic Version](https://semver.org/). // In a future version of Zig it will be used for package deduplication. - .version = "0.6.2", + .version = "0.7.0", // Together with name, this represents a globally unique package // identifier. This field is generated by the Zig toolchain when the From 28f94d87eda4d62c5b03ddb4d4caf3547e827bc2 Mon Sep 17 00:00:00 2001 From: utox39 Date: Thu, 17 Jul 2025 15:37:31 +0200 Subject: [PATCH 5/5] fix(terminal): fix typo --- src/linux/user.zig | 4 ++-- src/macos/user.zig | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/linux/user.zig b/src/linux/user.zig index 906ffcb..d6bb3eb 100644 --- a/src/linux/user.zig +++ b/src/linux/user.zig @@ -24,8 +24,8 @@ pub fn getShell(allocator: std.mem.Allocator) ![]u8 { } pub fn getTerminalName(allocator: std.mem.Allocator) ![]u8 { - const term_progrm = std.process.getEnvVarOwned(allocator, "TERM_PROGRAM") catch |err| if (err == error.EnvironmentVariableNotFound) { + const term_program = std.process.getEnvVarOwned(allocator, "TERM_PROGRAM") catch |err| if (err == error.EnvironmentVariableNotFound) { return allocator.dupe(u8, "Unknown"); } else return err; - return term_progrm; + return term_program; } diff --git a/src/macos/user.zig b/src/macos/user.zig index 34abd0f..52da9fb 100644 --- a/src/macos/user.zig +++ b/src/macos/user.zig @@ -27,8 +27,8 @@ pub fn getShell(allocator: std.mem.Allocator) ![]u8 { } pub fn getTerminalName(allocator: std.mem.Allocator) ![]u8 { - const term_progrm = std.process.getEnvVarOwned(allocator, "TERM_PROGRAM") catch |err| if (err == error.EnvironmentVariableNotFound) { + const term_program = std.process.getEnvVarOwned(allocator, "TERM_PROGRAM") catch |err| if (err == error.EnvironmentVariableNotFound) { return allocator.dupe(u8, "Unknown"); } else return err; - return term_progrm; + return term_program; }