This repository has no description
3

Configure Feed

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

meow: more cool info:3

robin (Jul 15, 2026, 5:34 PM +0200) 3353e243 4a5e316d

+109 -36
+31
src/info.zig
··· 49 49 return null; 50 50 } 51 51 52 + pub fn desktop() ?[]const u8 { 53 + if (cdl.environ_map) |envmap| return envmap.get("XDG_CURRENT_DESKTOP"); 54 + return null; 55 + } 56 + 57 + pub fn session() ?[]const u8 { 58 + if (cdl.environ_map) |envmap| return envmap.get("XDG_SESSION_TYPE"); 59 + return null; 60 + } 61 + 62 + pub fn terminal() ?[]const u8 { 63 + if (cdl.environ_map) |envmap| return envmap.get("TERMINAL"); 64 + const nterm: ?[]const u8 = blk: { 65 + const termenv = if (cdl.environ_map) |envmap| envmap.get("TERM") else null; 66 + if (termenv) |term| if (term.len > 0) if (std.mem.findScalar(u8, term, '-')) |i| 67 + break :blk term[0..i] 68 + else 69 + break :blk term; 70 + break :blk null; 71 + }; 72 + if (nterm) |term| if (!std.mem.eql(u8, term, "xterm") and !std.mem.eql(u8, term, "linux")) 73 + return term; 74 + 75 + return null; 76 + } 77 + 78 + pub fn editor() ?[]const u8 { 79 + if (cdl.environ_map) |envmap| return envmap.get("EDITOR"); 80 + return null; 81 + } 82 + 52 83 const PWInfo = struct { 53 84 user: ?[]const u8, 54 85 shell: ?[]const u8,
+78 -36
src/main.zig
··· 2 2 3 3 const cdl = @import("cdl"); 4 4 5 - const ascii = @embedFile("ascii.txt"); 6 - const ascii_lines = blk: { 5 + const ascii_raw = @embedFile("ascii.txt"); 6 + const ascii = blk: { 7 7 var ar: []const []const u8 = &.{}; 8 - var it = std.mem.splitScalar(u8, ascii, '\n'); 8 + var it = std.mem.splitScalar(u8, ascii_raw, '\n'); 9 9 while (it.next()) |line| if (line.len != 0) { 10 10 ar = ar ++ .{line}; 11 11 }; 12 + break :blk ar; 13 + }; 14 + 15 + const cols = blk: { 16 + var ar: []const u8 = &.{}; 17 + for (0..8) |i| { 18 + if (i != 0) ar = ar ++ " "; 19 + ar = ar ++ "●"; 20 + } 12 21 break :blk ar; 13 22 }; 14 23 15 24 const base_padding = 1; 16 25 17 - // へ ♡ ╱|、 SYS 󰧟 bmo 18 - // ૮ - ՛) (` - 7 ├  󰧟 NixOS 26.11 (Zokor) x86_64 19 - // / ⁻ ៸| |、⁻〵 └  󰧟 zsh 20 - // 乀(ˍ, ل ل じしˍ,)ノ WM 󰧟 niri (Wayland) 21 - // ├  󰧟 ghostty 1.3.1 22 - // └  󰧟 nvim 23 - // THEME 󰧟 evergarden 24 - // └  󰧟 Fantasque Sans Mono (14pt) [GTK2/3/4] 25 - // ● ● ● ● ● ● ● ● 26 - 27 26 pub fn main(init: std.process.Init) !void { 28 27 cdl.init(init); 29 28 defer cdl.deinit(); ··· 38 37 const hostname = try cdl.info.hostname(); 39 38 defer cdl.gpa.free(hostname); 40 39 41 - const user = try cdl.info.user(); 42 - const shell = try cdl.info.shell(); 40 + const nuser = try cdl.info.user(); 41 + const nshell = try cdl.info.shell(); 43 42 44 - const osname = try cdl.info.osname(); 43 + const nosname = try cdl.info.osname(); 45 44 46 - try term.writefmt( 47 - \\sys {s} 48 - , .{hostname}); 49 - if (user) |v| 50 - try term.writefmt( 51 - \\ ├ 󰋞 {s} 52 - , .{v}); 53 - if (osname) |v| 54 - try term.writefmt( 55 - \\ ├  {s} 45 + try term.writeascii(); 46 + if (nuser) |v| 47 + try term.writefmtn( 48 + \\ host {s}@{s} 49 + , .{ v, hostname }) 50 + else 51 + try term.writefmtn( 52 + \\ host {s} 53 + , .{hostname}); 54 + if (nosname) |v| 55 + try term.writefmtn( 56 + \\ ({s}) 56 57 , .{v}); 57 - if (shell) |v| 58 + try term.writer.writeByte('\n'); 59 + try term.writer.flush(); 60 + 61 + if (nshell) |shell| 62 + if (cdl.info.terminal()) |v| 63 + try term.writefmt( 64 + \\ ├  {s} + {s} 65 + , .{ v, shell }) 66 + else 67 + try term.writefmt( 68 + \\ ├  {s} 69 + , .{shell}); 70 + 71 + if (cdl.info.desktop()) |desktop| 72 + if (cdl.info.session()) |v| 73 + try term.writefmt( 74 + \\ ├  {s} ({s}) 75 + , .{ desktop, v }) 76 + else 77 + try term.writefmt( 78 + \\ ├  {s} 79 + , .{desktop}); 80 + 81 + if (cdl.info.editor()) |v| 58 82 try term.writefmt( 59 - \\ └  {s} 83 + \\ ├  {s} 60 84 , .{v}); 85 + 86 + try term.write(" └ " ++ cols); 61 87 62 88 try term.writer.flush(); 63 89 } ··· 65 91 const term = struct { 66 92 pub var writer: *std.Io.Writer = undefined; 67 93 68 - var ascii_line_widths: [ascii_lines.len]usize = undefined; 94 + var ascii_line_widths: [ascii.len]usize = undefined; 69 95 var longest: usize = undefined; 70 96 71 97 pub fn init(w: *std.Io.Writer) !void { ··· 73 99 74 100 _ = std.c.setlocale(.ALL, ""); 75 101 76 - for (ascii_lines, 0..) |line, c| { 102 + for (ascii, 0..) |line, c| { 77 103 const len = try cdl.strwidth.width(line); 78 104 ascii_line_widths[c] = len; 79 105 } ··· 87 113 }; 88 114 } 89 115 116 + pub fn write(buf: []const u8) !void { 117 + try writeascii(); 118 + 119 + try writer.writeAll(buf); 120 + try writer.writeByte('\n'); 121 + try writer.flush(); 122 + } 90 123 pub fn writefmt(comptime format: []const u8, args: anytype) !void { 91 124 try writeascii(); 92 125 126 + try writefmtn(format, args); 127 + try writer.writeByte('\n'); 128 + try writer.flush(); 129 + } 130 + pub fn writefmtn(comptime format: []const u8, args: anytype) !void { 93 131 const buf = try std.fmt.allocPrint(cdl.gpa, format, args); 94 132 defer cdl.gpa.free(buf); 95 - 96 133 try writer.writeAll(buf); 97 - try writer.writeByte('\n'); 98 - try writer.flush(); 99 134 } 100 135 101 136 var i: usize = 0; 102 137 pub fn writeascii() !void { 103 138 defer i += 1; 104 - try writer.writeAll(ascii_lines[i]); 105 - const len = ascii_line_widths[i]; 106 - for (0..longest - len + base_padding) |_| try writer.writeByte(' '); 139 + 140 + const n = blk: { 141 + if (i >= ascii.len) 142 + break :blk longest; 143 + 144 + try writer.writeAll(ascii[i]); 145 + const len = ascii_line_widths[i]; 146 + break :blk longest - len; 147 + }; 148 + for (0..n + base_padding) |_| try writer.writeByte(' '); 107 149 } 108 150 };