A CLI tool to edit dinit service files with ease
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

++

iacore e091c4d1

+55
+50
main.zig
··· 1 + const std = @import("std"); 2 + 3 + const a = std.heap.smp_allocator; 4 + 5 + pub fn main() !void { 6 + const uid = std.posix.system.getuid(); 7 + 8 + var service_dirs: std.ArrayListUnmanaged([:0]const u8) = .empty; 9 + if (uid == 0) { 10 + var default_system = [_][:0]const u8{ "/etc/dinit.d", "/run/dinit.d", "/usr/local/lib/dinit.d", "/lib/dinit.d" }; 11 + service_dirs = .fromOwnedSlice(&default_system); 12 + } else { 13 + service_dirs = try .initCapacity(a, 5); 14 + if (std.posix.getenv("XDG_CONFIG_HOME")) |prefix| { 15 + service_dirs.appendAssumeCapacity(try std.fmt.allocPrintZ(a, "{s}/dinit.d", .{prefix})); 16 + } 17 + if (std.posix.getenv("HOME")) |prefix| { 18 + service_dirs.appendAssumeCapacity(try std.fmt.allocPrintZ(a, "{s}/.config/dinit.d", .{prefix})); 19 + } 20 + service_dirs.appendSliceAssumeCapacity(&.{ "/etc/dinit.d/user", "/usr/lib/dinit.d/user", "/usr/local/lib/dinit.d/user" }); 21 + } 22 + 23 + var services: std.StringArrayHashMapUnmanaged([:0]const u8) = .empty; 24 + for (service_dirs.items) |dir_path| { 25 + const dir = std.fs.openDirAbsoluteZ(dir_path, .{ .iterate = true }) catch |e| { 26 + if (e == error.FileNotFound) continue; 27 + return e; 28 + }; 29 + var iter = dir.iterate(); 30 + while (try iter.next()) |entry| { 31 + // std.log.info("{s}/{s}", .{ dir_path, entry.name }); 32 + if (entry.kind == .file and !services.contains(entry.name)) { 33 + try services.put(a, try a.dupe(u8, entry.name), try std.fmt.allocPrintZ(a, "{s}/{s}", .{ dir_path, entry.name })); 34 + } 35 + } 36 + } 37 + 38 + const stdout = std.io.getStdOut(); 39 + var longest: usize = 0; 40 + var iter = services.iterator(); 41 + while (iter.next()) |entry| { 42 + longest = @max(longest, entry.key_ptr.len); 43 + } 44 + const pad_buffer: [36]u8 = @splat(' '); 45 + iter = services.iterator(); 46 + while (iter.next()) |entry| { 47 + const pad = pad_buffer[0 .. longest + 4 - entry.key_ptr.len]; 48 + try stdout.writer().print("{s}{s}{s}\n", .{ entry.key_ptr.*, pad, entry.value_ptr.* }); 49 + } 50 + }
+5
readme.md
··· 1 + list all dinit service files 2 + 3 + ``` 4 + zig build-exe main.zig 5 + ```