A fast, minimal, and customizable system information tool built in Rust β your alternative to Neofetch, for real power users. Includes JSON output and remote fetching over SSH.
β οΈ LeenFetch is under active development. Expect bugs and improvements regularly!Want to help? Contributions, testing, and feedback are always welcome!
Found a bug? Got a feature idea?
Head over to the issues or join the discussions page!
- π§ LeenFetch - A fast, minimal, and customizable system information tool built in Rust β your alternative to Neofetch, for real power users.
- β‘ Blazing fast startup thanks to Rust
- π¨ Customizable output layout with colorized terminal output
- π§© Modular design β enable or disable components via config
- πΎ Smart defaults but easily extendable
- π¦ Detects installed packages, shell, GPU, DE/WM, and more
- πΌοΈ Custom ASCII art support and override via config
- π¨ Supports theme-based color profiles (
ascii_colors=distro, etc.) - π Single JSONC config:
~/.config/leenfetch/config.jsonc - π§΅ Accepts piped ASCII input β use
fortune | cowsay | leenfetchfor dynamic text logos - π Fetch remote system info over SSH (
--ssh <user>@<host>:<port>...) and reuse pretty output per host - π§Ύ Machine-readable JSON output via
--format jsonfor scripting and dashboards
If you're on Arch Linux or an Arch-based distribution (like Manjaro), you can install LeenFetch from the AUR using an AUR helper like yay:
yay -S leenfetchor
git clone https://aur.archlinux.org/leenfetch.git
cd leenfetch
makepkg -siIf you're on Debian, Ubuntu, or a Debian-based distribution, you can download and install the .deb package from the GitHub Releases:
- AMD64 (x86_64)
wget https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-debian-x86_64.deb
sudo dpkg -i leenfetch-*.deb- AArch64 (ARM64)
wget https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-debian-aarch64.deb
sudo dpkg -i leenfetch-*.debIf you're using Fedora, RHEL, or another RPM-based distro, you can install LeenFetch using the .rpm file from GitHub Releases:
- AMD64 (x86_64)
wget https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-REHL-x86_64.rpm
sudo rpm -i leenfetch-*.rpm- AArch64 (ARM64)
wget https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-REHL-aarch64.rpm
sudo rpm -i leenfetch-*.rpmIf you're on Windows, download the latest .zip from the GitHub Releases:
powershell:
- AMD64 (x86_64)
Invoke-WebRequest -Uri "https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-windows-x86_64.zip" -OutFile "leenfetch-win.zip"
Expand-Archive .\leenfetch-win.zip -DestinationPath .
.\leenfetch-v1.1.0-windows-x86_64.exe- AArch64 (ARM64)
Invoke-WebRequest -Uri "https://github.com/drunkleen/leenfetch/releases/download/v1.1.0/leenfetch-v1.1.0-windows-aarch64.zip" -OutFile "leenfetch-win.zip"
Expand-Archive .\leenfetch-win.zip -DestinationPath .
.\leenfetch-v1.1.0-windows-aarch64.exeMake sure you're in the same directory as
leenfetch.exewhen running the command.
git clone https://github.com/drunkleen/leenfetch.git
cd leenfetch
cargo build --releaseAdd to PATH:
cp target/release/leenfetch ~/.local/bin/Then run:
leenfetchIf you prefer installing from crates.io, make sure you have Rust & Cargo installed:
cargo install leenfetchAfter that, just run:
leenfetchIf you hit issues with PATH, try adding ~/.cargo/bin to your shell:
export PATH="$HOME/.cargo/bin:$PATH"LeenFetch can accept piped input to use as the ASCII logo.
This allows you to create dynamic, fun logos on the fly using other command-line tools.
Examples:
echo "Rustacean" | leenfetchfortune | cowsay | leenfetchLeenFetch will detect piped input via stdin and render the ASCII art above your system information.
If no piped input is provided, it will fall back to your configured or auto-detected ASCII art.
Query other machines directly and render their info locally. LeenFetch runs leenfetch --format json over SSH, parses it, and prints a pretty block for each host.
# Pretty output for one host (leverages your SSH config/agent)
leenfetch --ssh user@server.example.com
leenfetch --ssh user@server.example.com:port
# Multiple hosts
leenfetch --ssh user@server1 --ssh user@server2:port ...
# Script-friendly JSON
leenfetch --ssh user@server --format json
leenfetch --ssh user@server:port --format jsonNotes:
- The remote host needs
leenfetchinstalled and available inPATH. - ASCII logo and colors reflect the remote distro; each host renders separately using the local layout.
- SSH options come from your standard SSH config/agent (no custom flags are parsed) and a short connect timeout is used.
- You can mix
--format jsonwith--sshto script against multiple hosts (one JSON object per host).
On first run, LeenFetch writes a single config.jsonc file to your configuration directory:
# Linux
~/.config/leenfetch/config.jsonc
# Windows
C:\Users\<username>\AppData\Roaming\leenfetch\config.jsoncThe file uses JSON with comments (JSONC), so you can keep inline explanations next to your settings. It combines the previous trio of files into a single document with clear sections:
flagsβ Display and formatting toggles.modules(aliaslayout) β Output order, headings, and custom rows.- (optional)
logoβ Override ASCII art source or padding. Omitted keys fall back to defaults.
The flags object fine-tunes how each block is rendered. Values shown below match the generated defaults; unset keys fall back to the same defaults internally.
| Key | Allowed values | Default | What it controls |
|---|---|---|---|
ascii_distro |
"auto" or distro name |
"auto" |
ASCII art selection. Piped input always overrides this. |
ascii_colors |
"distro" or comma list of color indices |
"distro" |
Palette for ASCII art and color swatches. |
custom_ascii_path |
"" or path |
"" |
Custom ASCII art file. Leave empty for bundled art. |
battery_display |
"off", "bar", "infobar", "barinfo" |
"off" |
Battery meter style (or disable entirely). |
color_blocks |
string glyph | "β" |
Character(s) used for the 16-color preview. |
cpu_brand |
true / false |
true |
Prefix CPU model with the vendor name. |
cpu_cores |
true / false |
true |
Show total core/thread counts. |
cpu_frequency |
true / false |
true |
Include advertised CPU frequency. |
cpu_speed |
true / false |
true |
Include current CPU speed reading. |
cpu_temp |
"C" / "F" |
"C" |
Temperature unit. Any other value skips conversion. |
cpu_show_temp |
true / false |
false |
Toggle CPU temperature output entirely. |
de_version |
true / false |
true |
Append desktop-environment version. |
distro_display |
name, name_version, name_arch, name_model, name_model_version, name_model_arch, name_model_version_arch |
"name" |
Level of OS detail shown in the distro line. |
disk_display |
info, percentage, infobar, barinfo, bar |
"info" |
Disk usage presentation for each mount. |
disk_subtitle |
name, dir, none, mount |
"dir" |
Label used alongside disk usage. |
memory_percent |
true / false |
true |
Add percentage to the memory line. |
memory_unit |
kib, mib, gib |
"mib" |
Preferred memory units. |
package_managers |
off, on, tiny |
"tiny" |
Package counter verbosity. |
refresh_rate |
true / false |
true |
Append monitor refresh rate where available. |
shell_path |
true / false |
false |
Print full shell path instead of name only. |
shell_version |
true / false |
true |
Append shell version. |
uptime_shorthand |
full, tiny, seconds |
"tiny" |
Uptime formatting style. |
os_age_shorthand |
full, tiny, seconds |
"tiny" |
OS install age formatting style. |
βΉοΈ Piped input (for example
fortune | cowsay | leenfetch) replaces the ASCII logo regardless ofascii_distroorcustom_ascii_path.
Here is a compact example that shortens durations and hides temperature and refresh-rate extras:
Use the logo object to point to custom ASCII art or adjust how the bundled ASCII art is padded. When type is "file" the source path behaves just like custom_ascii_path.
{
"logo": {
"type": "file",
"source": "~/.config/leenfetch/branding/about.txt",
"padding": { "top": 2, "right": 6, "left": 0 }
}
}The modules array (also accepted as layout) controls rendering order. Entries can be a literal string ("break" inserts an empty spacer) or an object describing a module. Objects accept a type (collector name such as titles, distro, os_age, uptime, etc.) and optional properties like key for the label or format for custom text.
{
"modules": [
"break",
{ "type": "custom", "format": "== System ==" },
{ "type": "titles", "key": "User" },
{ "type": "distro", "key": "Distro" },
{ "type": "cpu", "key": "CPU" },
{ "type": "memory", "key": "Memory" },
{ "type": "colors", "key": "" }
]
}Rearrange, duplicate, or remove entries to customize your output. Insert "break" wherever you want an empty spacer line.
- Open
config.jsoncin your favorite text editor. - Read the inline comments for a full explanation of every option.
- Change values as you like, save, and re-run
leenfetchto see your changes.
For advanced details, see the comments in config.jsonc or check the wiki (if available).
Need a temporary tweak for screenshots or testing? LeenFetch now mirrors most flags settings on the CLI so you can adjust the output without touching config.jsonc.
- Core controls:
--help,--version,--list-options,--init,--reinit,--config <path>, and--no-config(ignore files, use built-in defaults). - ASCII controls:
--ascii_distro <name>,--ascii_colors <list>,--custom_ascii_path <file>, and--color-blocks <glyph>. - Formatting knobs:
--battery-display,--disk-display,--disk-subtitle,--memory-unit,--packages,--uptime,--os-age,--distro-display,--cpu-temp-unit, and--format <pretty|json>for output style. - Remote + layout:
--ssh <host>[,<host>...]to fetch via SSH,--only cpu,memory,shellto render a subset,--hide gputo drop modules from the current layout. - Boolean toggles come in pairsβuse
--cpu-speed/--no-cpu-speed,--shell-path/--no-shell-path,--memory-percent/--no-memory-percent, etc., for quick on/off control of individual fields.
Run leenfetch --help to see the complete list of overrides.
| Feature | Status |
|---|---|
| Base module system | β Done |
| Config file loader | β Done |
| Custom layout tags | β Done |
| GPU/CPU/Mem/DE/WM detection | β Done |
| Linux support | β Done |
| Windows support | β Done |
| Multi-Threading | β Done |
| CLI override options | π Basic |
| ASCII art & theming | π Basic |
| Plugin/module system | β Maybe |
| Fetch info over SSH | β Done |
- Fork the repo
- Create your branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'feat: add my feature') - Push to the branch (
git push origin feature/my-feature) - Create a Pull Request
We welcome clean PRs and documented modules! β¨
If you have found LeenFetch valuable and would like to contribute to its ongoing development, your support is greatly appreciated. You can show your appreciation by making a donation through PayPal or any of the following cryptocurrency networks:
- Bitcoin (BTC):
bc1qsmvxpn79g6wkel3w67k37r9nvzm5jnggeltxl6 - ETH/BNB/MATIC (ERC20, BEP20):
0x8613aD01910d17Bc922D95cf16Dc233B92cd32d6 - USDT/TRON (TRC20):
TGNru3vuDfPh5zBJ31DKzcVVvFgfMK9J48 - Dogecoin (DOGE):
D8U25FjxdxdQ7pEH37cMSw8HXBdY1qZ7n3
Your generous contribution ensures the continued improvement and maintenance of LeenFetch. β€οΈ
Thank you for supporting the project! π







{ "flags": { "uptime_shorthand": "tiny", "cpu_show_temp": false, "refresh_rate": false, "package_managers": "on" } }