Unique

fetch

A terminal fetch tool that spins your distro's ASCII logo as a 3D relief, donut.c-style

The Gentoo logo, extruded and spun, next to the readout.

ASCII art already has depth in it. @ is heavy, . is light, and if you treat that as height instead of ink you get a surface you can rotate.

The story runs from sl to here. Aarav, who publishes at asdesai.com and is areofyl on GitHub, opens the write-up with the steam locomotive that runs across your terminal when you mistype ls, patched to loop forever so the only way out of a raw tty was killall sl from another one. That habit of editing classic C toys led back to donut.c, Andy Sloane’s spinning torus, and to the obvious question: a donut is a parametric surface, so what about something with no equation behind it? The first answer was gentoo.c, which spun exactly one logo. fetch is what it became when it learned to spin any of them.

The pipeline is short enough to hold in your head. The logo comes from fastfetch if it is installed — any of its 500-plus distro logos, per-character colours preserved — or from a text file in ~/.config/fetch/, or the built-in Gentoo one. Each character gets a weight from 0 to 1 by how full it looks, and the weight becomes a Z height, so the flat art turns into a heightmap, a bump map whose texture is text. The heightmap is sampled into a point cloud, normals come from finite differences, every frame is rotated and perspective-projected with a z-buffer, and Blinn-Phong lighting maps each visible point onto the .,-~:;=!*#$@ ramp, one character per cell. The whole frame goes out in a single write() so it never flickers.

The system information beside it is gathered natively — /etc/os-release, /proc/meminfo, vm_stat and IOKit on the Mac, package counts from nine package managers — with no dependency on fastfetch or neofetch, and uptime, memory and swap tick live while the logo turns. Click and drag rotates it by hand; let go and it flings. Any keypress stops it and passes through to the shell, which makes it a startup fetch rather than a screensaver.

Two honest notes. The default look is deliberately donut.c, snapped to the character grid; opt-in blocks and sextants modes sample coverage at 2×2 or 2×3 per cell so a silhouette lands on a fraction of a cell, but sextants need a terminal that draws the Symbols for Legacy Computing block (kitty, Ghostty, foot, WezTerm). And it is a toy — a lit, spinning, single-file-of-C toy with 814 stars, an ISC licence and packages for Arch, Nix, Homebrew, Fedora, openSUSE, Debian and Gentoo’s GURU, which is a great deal of packaging for something whose only job is to make you grin at the prompt.

github.com ↗

← back