This repository has no description
3

Configure Feed

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

meow: styling & formatting

robin (Jul 15, 2026, 6:36 PM +0200) 92d0b254 e3262837

+77 -43
+3
src/ansi.zig
··· 34 34 white, 35 35 default, 36 36 37 + pub fn int(n: u8) Color { 38 + return @enumFromInt(n); 39 + } 37 40 pub fn foreground(self: Color) u8 { 38 41 return @intFromEnum(self) + 30; 39 42 }
+4 -4
src/ascii.txt
··· 1 - へ ♡ ╱|、 2 - ૮ - ՛) (` - 7 3 - / ⁻ ៸| |、⁻〵 4 - 乀(ˍ, ل ل じしˍ,)ノ 1 + 2 + ∩__∩ 3 + („• ֊ •„) 4 + U U
+70 -39
src/main.zig
··· 2 2 3 3 const cdl = @import("cdl"); 4 4 5 + const ansi = @import("ansi.zig"); 6 + 5 7 const ascii_raw = @embedFile("ascii.txt"); 6 8 const ascii = blk: { 7 9 var ar: []const []const u8 = &.{}; ··· 9 11 while (it.next()) |line| if (line.len != 0) { 10 12 ar = ar ++ .{line}; 11 13 }; 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 - } 21 14 break :blk ar; 22 15 }; 23 16 ··· 43 36 const nosname = try cdl.info.osname(); 44 37 45 38 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| 39 + try term.writekeyn(" host ", .green); 40 + try ansi.fg(term.writer, .cyan); 41 + if (nuser) |v| { 42 + try term.writefmtn("{s}", .{v}); 43 + try ansi.fg_bright(term.writer, .black); 44 + try term.writer.writeByte('@'); 45 + try ansi.fg(term.writer, .cyan); 46 + try term.writefmtn("{s}", .{hostname}); 47 + } else try term.writefmtn("{s}", .{hostname}); 48 + try ansi.style(term.writer, .reset); 49 + if (nosname) |v| { 50 + try ansi.fg(term.writer, .white); 55 51 try term.writefmtn( 56 52 \\ ({s}) 57 53 , .{v}); 54 + try ansi.style(term.writer, .reset); 55 + } 58 56 try term.writer.writeByte('\n'); 59 57 try term.writer.flush(); 60 58 59 + try term.writeascii(); 60 + try term.writekeyn(" ├  ", .yellow); 61 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}); 62 + if (cdl.info.terminal()) |v| { 63 + try term.writefmtn("{s}", .{v}); 64 + try ansi.fg_bright(term.writer, .black); 65 + try term.writer.writeAll(" + "); 66 + try ansi.style(term.writer, .reset); 67 + try term.writefmtn("{s}", .{shell}); 68 + } else try term.writefmtn("{s}", .{shell}); 69 + try term.writer.writeByte('\n'); 70 + try term.writer.flush(); 70 71 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}); 72 + try term.writeascii(); 73 + try term.writekeyn(" ├  ", .blue); 74 + if (cdl.info.desktop()) |desktop| { 75 + try term.writefmtn("{s}", .{desktop}); 76 + if (cdl.info.session()) |v| { 77 + try ansi.fg(term.writer, .white); 78 + try term.writefmtn(" ({s})", .{v}); 79 + try ansi.style(term.writer, .reset); 80 + } 81 + } 82 + try term.writer.writeByte('\n'); 83 + try term.writer.flush(); 80 84 85 + try term.writeascii(); 86 + try term.writekeyn(" ├  ", .magenta); 81 87 if (cdl.info.editor()) |v| 82 - try term.writefmt( 83 - \\ ├  {s} 84 - , .{v}); 88 + try term.writefmtn("{s}", .{v}); 89 + try term.writer.writeByte('\n'); 90 + try term.writer.flush(); 85 91 86 - try term.write(" └ " ++ cols); 92 + var cols_buf: [0x100]u8 = undefined; 93 + const cols = blk: { 94 + var w: std.Io.Writer = .fixed(&cols_buf); 95 + for (0..8) |i| { 96 + if (i != 0) try w.writeByte(' '); 97 + try ansi.fg(&w, .int(@intCast(i))); 98 + try w.writeAll("●"); 99 + } 100 + break :blk w.buffered(); 101 + }; 102 + 103 + try term.writeascii(); 104 + try term.writekeyn(" └ ", .cyan); 105 + try term.writefmtn("{s}", .{cols}); 106 + try term.writer.writeByte('\n'); 107 + try term.writer.flush(); 87 108 88 109 try term.writer.flush(); 89 110 } ··· 132 153 defer cdl.gpa.free(buf); 133 154 try writer.writeAll(buf); 134 155 } 156 + pub fn writekeyn(buf: []const u8, c: ansi.Color) !void { 157 + try ansi.fg(term.writer, c); 158 + try ansi.style(term.writer, .bold); 159 + try term.writer.writeAll(buf); 160 + try ansi.style(term.writer, .reset); 161 + } 135 162 136 163 var i: usize = 0; 137 164 pub fn writeascii() !void { 165 + try ansi.fg(writer, .white); 166 + 138 167 defer i += 1; 139 168 140 169 const n = blk: { ··· 146 175 break :blk longest - len; 147 176 }; 148 177 for (0..n + base_padding) |_| try writer.writeByte(' '); 178 + 179 + try ansi.style(writer, .reset); 149 180 } 150 181 };