zf
zf
A neofetch-inspired system information CLI tool written in Zig.
Displays OS, CPU, GPU, memory, packages, DE, WM, and system info alongside a distro-specific ASCII logo.
Features
- Distro-specific ASCII art logos (Debian, Ubuntu, Arch, Fedora, macOS, and more) with ANSI colors
- Automatic light/dark terminal theme detection — adjusts label and value colors for readability
- Falls back to a default zf logo for unrecognized distros
- L1/L2/L3 cache info from sysfs (Linux) or sysctl (macOS)
- GPU detection via nvidia-smi, lspci, or system_profiler
- Package counts from dpkg, rpm, pacman, apk, snap, flatpak (Linux) or brew, port (macOS)
- Desktop Environment detection with version (GNOME, KDE Plasma, XFCE, Cinnamon, MATE, LXQt)
- Window Manager detection with version
- Shell detection with version (bash, zsh, fish, etc.)
- Side-by-side logo + info layout (like neofetch)
--allmode shows all info without logo- Category filters:
--cpu,--mem,--os - Zero external dependencies
Requirements
- Zig 0.15.1
Build
zig build
Usage
# Default: neofetch-style summary with logo
zf
# Category filters
zf --cpu # Detailed CPU info + GPU
zf --mem # Memory info only
zf --os # OS, uptime, packages, shell, DE, WM info
# All info, no logo
zf --all
# General
zf --help
zf --version
Options
| Option | Short | Description |
|---|---|---|
--help |
-h |
Display help message and exit |
--version |
-v |
Display version information and exit |
--info |
-i |
Show all information (default) |
--cpu |
-c |
Show only CPU information |
--mem |
-m |
Show only memory information |
--os |
-o |
Show only OS information |
--all |
-a |
Show all information without logo |
Display Sections
Default (with logo)
OS, Kernel, Hostname, Uptime, Packages, Shell (with version), DE (with version), WM (with version), Terminal, User, CPU, CPU Cores, CPU Speed, L1/L2/L3 Cache, GPU, Memory (used/total)
--os
OS, Kernel, Hostname, Uptime, Packages, Shell (with version), DE (with version), WM (with version), Terminal, User
--cpu
CPU, CPU Arch, CPU Vendor, CPU Family, CPU Model, CPU Cores, CPU Speed, Microcode, L1/L2/L3 Cache, GPU
--mem
Total Memory, Free Memory
--all
All fields, no logo
Examples
Default (zf)
_,met$$$$$gg. OS: Debian GNU/Linux 13 (trixie)
,g$$$$$$$$$$$$$$$P. Kernel: 7.0.3-zabbly+
,g$$P" """Y$$.. Hostname: ryzen
,$$P' `$$$. Uptime: 3h 36m
',$$P ,ggs. `$$b: Packages: 2712 (dpkg), 39 (flatpak)
`d$$' ,$$P . $$$ Shell: bash 5.2.37
$$P d$$' , $$P DE: GNOME 46
$$: $$$. - ,d$$' WM: mutter 46.0
$$; Y$b._ _,d$P' Terminal: xterm-256color
Y$$. `."Y$$$$P" User: ng
`$$b "-.__ CPU: AMD Ryzen 5 2600 Six-Core Processor
`Y$$ CPU Cores: 6
`Y$$. CPU Speed: 3659 MHz
`$$b. L1 Cache: 32K
`Y$$b. L2 Cache: 512K
"Y$b._ L3 Cache: 8192K
""" GPU: NVIDIA GeForce RTX 4060 Ti
Memory: 8.2 GiB / 15.5 GiB
CPU only (zf --cpu)
_,met$$$$$gg. CPU: AMD Ryzen 5 2600 Six-Core Processor
,g$$$$$$$$$$$$$$$P. CPU Arch: x86_64
,g$$P" """Y$$.. CPU Vendor: AuthenticAMD
,$$P' `$$$. CPU Family: 23
',$$P ,ggs. `$$b: CPU Model: AMD Ryzen 5 2600 Six-Core Processor
`d$$' ,$$P . $$$ CPU Cores: 6
$$P d$$' , $$P CPU Speed: 2461 MHz
$$: $$$. - ,d$$' Microcode: 0x800820e
$$; Y$b._ _,d$P' L1 Cache: 32K
Y$$. `."Y$$$$P" L2 Cache: 512K
`$$b "-.__ L3 Cache: 8192K
`Y$$ GPU: NVIDIA GeForce RTX 4060 Ti
`Y$$.
`$$b.
`Y$$b.
"Y$b._
"""
All info (zf --all)
OS: Debian GNU/Linux 13 (trixie)
Kernel: 7.0.3-zabbly+
Hostname: ryzen
Uptime: 3h 37m
Packages: 2712 (dpkg), 39 (flatpak)
Shell: bash 5.2.37
DE: GNOME 46
WM: mutter 46.0
Terminal: xterm-256color
User: ng
CPU: AMD Ryzen 5 2600 Six-Core Processor
CPU Arch: x86_64
CPU Vendor: AuthenticAMD
CPU Family: 23
CPU Model: AMD Ryzen 5 2600 Six-Core Processor
CPU Cores: 6
CPU Speed: 3592 MHz
Microcode: 0x800820e
L1 Cache: 32K
L2 Cache: 512K
L3 Cache: 8192K
GPU: NVIDIA GeForce RTX 4060 Ti
Total Memory: 15.5 GiB
Free Memory: 7.3 GiB
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Invalid argument |
Distro Logos
| Distribution | Logo | Label Color |
|---|---|---|
| Debian | Tux | Red |
| Ubuntu | Circle | Red |
| Arch Linux | Arch | Cyan |
| Fedora | Hat | Blue |
| macOS | Apple | Green |
| Linux Mint | Circle | Green |
| Pop!_OS | Circle | Cyan |
| openSUSE | Circle | Green |
| Manjaro | Arch | Green |
| Gentoo | Circle | Magenta |
| NixOS | Circle | Blue |
| Other (default) | zf | Cyan |
Detection uses the ID= field from /etc/os-release or DISTRIB_ID= from /etc/lsb-release.
Theme Detection
zf automatically detects whether your terminal is using a light or dark theme:
- Checks
$COLORSCHEMEenvironment variable (set by many terminals) - Checks
$TERM_THEMEenvironment variable - Checks
$BAT_THEMEfor “light” keyword - On macOS: runs
defaults read -g AppleInterfaceStyle— if “Dark” is returned, dark theme; otherwise light theme - Defaults to dark theme if no detection succeeds
On light themes, labels use bold dark colors and values use black for maximum readability.
Data Sources
Linux
| Field | Source |
|---|---|
| OS name, version, distro_id | /etc/os-release |
| Kernel | /proc/version, fallback uname -r |
| Hostname | /etc/hostname, fallback uname -n |
| CPU info | /proc/cpuinfo |
| L1/L2/L3 cache | /sys/devices/system/cpu/cpu0/cache/indexN/{level,size,type} |
| Memory | /proc/meminfo |
| Uptime | /proc/uptime |
| GPU | nvidia-smi, lspci, /proc/driver/nvidia/gpus/ |
| Packages | dpkg-query, rpm -qa, pacman -Q, apk info, snap list, flatpak list |
| DE | $XDG_CURRENT_DESKTOP, $DESKTOP_SESSION; version via gnome-shell --version, plasmashell --version, etc. |
| WM | /proc/*/comm scan + --version |
| Shell | $SHELL + $SHELL --version |
| User, Terminal | Environment variables |
macOS
| Field | Source |
|---|---|
| OS name, version | SystemVersion.plist |
| Kernel, Hostname | uname() |
| CPU info | sysctl (machdep.cpu.*, hw.ncpu) |
| L1/L2/L3 cache | sysctl (hw.l1dcachesize, hw.l2cachesize, hw.l3cachesize) |
| Memory | sysctl hw.memsize |
| GPU | system_profiler SPDisplaysDataType |
| Packages | brew list, port installed |
| DE | “Aqua” + sw_vers -productVersion |
| WM | “Quartz Compositor” + sw_vers -productVersion |
| Uptime | sysctl kern.boottime |
| Shell | $SHELL + $SHELL --version |
Project Structure
src/
├── main.zig # CLI entry point, platform dispatch, shell version
├── info.zig # SystemInfo struct, extractVersion(), runVersionCmd()
├── cli.zig # Arg parsing, printHelp, printVersion
├── output.zig # Side-by-side formatting, DisplayFlags
├── logos.zig # ASCII logos, getLogo(), visibleLen()
├── linux.zig # Linux module index
├── linux/cpu.zig # /proc/cpuinfo + sysfs cache parser
├── linux/memory.zig # /proc/meminfo parser
├── linux/os.zig # /etc/os-release, /etc/lsb-release parser
├── linux/utils.zig # /proc/uptime parser
├── linux/gpu.zig # nvidia-smi, lspci, nvidia proc GPU detection
├── linux/packages.zig # dpkg, rpm, pacman, apk, snap, flatpak counting
├── linux/desktop.zig # DE from env vars + version, WM from /proc scan + version
├── macos.zig # macOS module index
├── macos/cpu.zig # sysctl CPU + cache info
├── macos/memory.zig # sysctl hw.memsize
├── macos/os.zig # SystemVersion.plist parser, uname
├── macos/utils.zig # env vars, getcwd, uptime via sysctl
├── macos/gpu.zig # system_profiler SPDisplaysDataType
├── macos/packages.zig # brew, port counting
├── macos/desktop.zig # Aqua + version, Quartz Compositor + version
├── root.zig # Library root, re-exports
└── tests/test_suite.zig
Testing
zig build test
Attribution
This entire project coded through GLM 5.1
License
MIT