/ fetchx / README.md
Swadhin Biswas docs(readme): add shell alias instructions · 3/4/2026
7ef0718
651 lines · 20.4 KB
Raw Download


⚡ FetchX

A blazing-fast, feature-rich system information tool written in Rust.
The modern neofetch replacement you've been waiting for.

MIT License Version 0.2.0 Rust 2021 45 Tests Passing GitHub Stars

Installation • Features • Configuration • Gallery • Replace Neofetch

FetchX — neofetch alternative in Rust showing system info with ASCII art


Gallery

FetchX ASCII art mode with CachyOS
ASCII Art Mode
Classic distro logo with system info
FetchX with kitty image backend showing anime image
Kitty Image Backend
Auto-fetched image via smart caching
FetchX random image fetching — new image every run
Random Image Every Run
Background download, zero delay
FetchX with different random image from API
Smart Image Caching
Previous image shown instantly
FetchX with custom image set by user
Custom Image
Use your own wallpaper or photo
FetchX Nerd Font icons and progress bars
Nerd Fonts + Progress Bars
Memory & disk usage bars with icons

Table of Contents


Features

Why FetchX over neofetch? Neofetch is no longer maintained. FetchX is a modern, actively developed replacement written in Rust — 10x faster, with image support and smart caching built in.

  • Blazing Fast — Parallel info detection across 8 threads, finishes in ~10-50ms (vs neofetch's ~200-500ms)
  • Tiny Binary — ~1.8 MB stripped, LTO-optimized — no Python, no Bash, no runtime deps
  • TOML Config — Clean ~/.config/fetchx/config.toml with 35+ options (no scripting needed)
  • 5 Image Backends — Kitty graphics protocol, Sixel, Chafa, w3m, iTerm2
  • Smart Image Caching — Auto-downloads random images from API, shows instantly with zero delay, new image every run
  • 60+ Distro Logos — ASCII art with {c1}-{c6} color placeholders
  • Nerd Font Icons — Optional icons for every info label (requires Nerd Font)
  • Progress Bars — Visual bars for memory and disk usage [███████░░░░]
  • Emoji Mode — Fun emoji art alternative to ASCII logos
  • JSON Output — Machine-readable --json flag for scripting & automation
  • Custom ASCII Art — Load your own art from any text file
  • 256-Color Support — Full terminal color palette
  • Terminal-Width Aware — Lines truncate cleanly, never wraps
  • Interactive Image Picker — Browse & select images with fzf
  • Daemon Mode — Background service for Waybar/Polybar/status bar integration
  • Drop-in neofetch replacement — alias neofetch='fetchx' and you're done

Installation

Quick Install (Recommended)

One-liner that clones, builds, installs, and sets up aliases:

curl -fsSL https://raw.githubusercontent.com/swadhinbiswas/fetchx/main/install.sh | bash

Or with wget:

wget -qO- https://raw.githubusercontent.com/swadhinbiswas/fetchx/main/install.sh | bash

Install script options:

./install.sh                  # Install to ~/.local/bin (default)
./install.sh --system         # Install to /usr/local/bin (requires sudo)
./install.sh --prefix=/opt    # Custom prefix
./install.sh --no-alias       # Skip shell alias setup
./install.sh --uninstall      # Remove FetchX completely

From Source (Manual)

Prerequisites: Rust toolchain (rustc + cargo)

# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# Clone and build
git clone https://github.com/swadhinbiswas/fetchx.git
cd fetchx/fetchx

# Build optimized release binary
cargo build --release

# Install to user directory (no sudo needed)
mkdir -p ~/.local/bin
install -m 755 target/release/fetchx ~/.local/bin/fetchx

# Make sure ~/.local/bin is in your PATH (see Shell Setup below)

System-wide install (requires sudo):

sudo install -m 755 target/release/fetchx /usr/local/bin/fetchx

With Make

git clone https://github.com/swadhinbiswas/fetchx.git
cd fetchx/fetchx
make                    # Build
sudo make install       # Install to /usr/local/bin
# or
make PREFIX=~/.local install   # Install to ~/.local/bin

From Cargo

cargo install --git https://github.com/swadhinbiswas/fetchx.git

Arch Linux / CachyOS / Manjaro (AUR)

# If you have an AUR helper like yay or paru:
yay -S fetchx-git
# or
paru -S fetchx-git

Shell Aliases (Replace neofetch)

Set up aliases so fetch or neofetch runs FetchX instead.

Bash (~/.bashrc)

# Add to the end of ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"   # if installed to ~/.local/bin

# FetchX aliases
alias fetch='fetchx'
alias neofetch='fetchx'

Then reload:

source ~/.bashrc

Zsh (~/.zshrc)

# Add to the end of ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"   # if installed to ~/.local/bin

# FetchX aliases
alias fetch='fetchx'
alias neofetch='fetchx'

Then reload:

source ~/.zshrc

Fish (~/.config/fish/config.fish)

# Add to ~/.config/fish/config.fish
fish_add_path ~/.local/bin              # if installed to ~/.local/bin

# FetchX aliases
alias fetch 'fetchx'
alias neofetch 'fetchx'

Then reload:

source ~/.config/fish/config.fish

Nushell (~/.config/nushell/config.nu)

# Add to config.nu
alias fetch = fetchx
alias neofetch = fetchx

PowerShell (WSL) ($PROFILE)

Set-Alias -Name fetch -Value fetchx
Set-Alias -Name neofetch -Value fetchx

Tip: The install script (install.sh) automatically sets up aliases for your current shell.


Configuration

Getting Started

Create the default config file:

fetchx --create-config

This creates ~/.config/fetchx/config.toml with all options documented.

To view the config path:

fetchx --show-config

To print the full default config to stdout (useful for reference):

fetchx --print-config

Config File Location

OS Path
Linux ~/.config/fetchx/config.toml
macOS ~/Library/Application Support/fetchx/config.toml

Full Configuration Reference

The config file is TOML format. Every option has a sensible default — you only need to set what you want to change.

# =============================================================================
# FetchX Configuration — ~/.config/fetchx/config.toml
# =============================================================================

# ─── Display ─────────────────────────────────────────────────────────────────

no_color = false           # Disable all colors (useful for piping)
bold = true                # Enable bold text
separator = ": "           # Separator between label and value (e.g., "OS: Arch")

# ─── Colors ──────────────────────────────────────────────────────────────────
# "distro" = automatically match your distro's colors (default)
# Or use an array of up to 6 color numbers:
#   [title, @-symbol, underline, subtitle, colon, info-text]
#
# Color numbers: 0=black, 1=red, 2=green, 3=yellow, 4=blue,
#                5=magenta, 6=cyan, 7=white, 8-255=256-color palette

colors = "distro"
# colors = [4, 6, 1, 8, 8, 6]   # Custom: blue title, cyan @, red underline

# ─── Image Backend ───────────────────────────────────────────────────────────
# Which rendering method to use for the logo/image area
#
# Values:
#   "ascii"  — Text-based ASCII art (works everywhere)
#   "kitty"  — Kitty graphics protocol (best quality, kitty terminal only)
#   "sixel"  — Sixel graphics (xterm, mlterm, foot — needs img2sixel)
#   "chafa"  — Unicode art via chafa (works in any terminal — needs chafa)
#   "w3m"    — w3m image display (X11 terminals — needs w3mimgdisplay)
#   "iterm2" — iTerm2 inline images (macOS iTerm2 only)
#   "off"    — No logo/image at all

image_backend = "ascii"

# ─── Image Source ────────────────────────────────────────────────────────────
# Where to get the image when using a graphics backend (kitty/sixel/etc)
#
# Values:
#   "auto"      — Smart caching: downloads random images from API,
#                  shows previous image instantly, downloads new one
#                  in background for next run
#   "ascii"     — Force ASCII art even with graphics backend
#   "wallpaper" — Use your current desktop wallpaper
#   "/path/to/image.png" — Use a specific image file

image_source = "auto"

# ─── ASCII Art ───────────────────────────────────────────────────────────────

# Which distro's ASCII logo to show (when image_backend = "ascii")
# "auto" detects from /etc/os-release
# Or specify: "arch", "ubuntu", "debian", "fedora", "cachyos", "nixos",
#             "manjaro", "void", "pop", "endeavouros", "gentoo", "kali",
#             "opensuse", "linuxmint", "alpine", "garuda", "zorin",
#             "elementary", "rocky", "alma", "slackware", "centos",
#             "solus", "deepin", "mx", "raspbian", "freebsd", "openbsd",
#             "macos", "windows", "android", and 30+ more!
ascii_distro = "auto"

# Path to custom ASCII art file (overrides ascii_distro)
# File can use {c1}..{c6} for color placeholders, one line per row
# ascii_file = "/home/user/.config/fetchx/my_logo.txt"

# Colors for ASCII art: "distro" or explicit array [4, 6, 1]
ascii_colors = "distro"

# Bold the ASCII art
ascii_bold = true

# ─── Custom Image ────────────────────────────────────────────────────────────

# Path to a specific image file (overrides image_source)
# custom_image = "/home/user/pictures/wallpaper.png"

# Image sizing
# image_size = "auto"          # "auto", "none", "300px", "50%"
# crop_mode = "normal"         # "normal", "fit", "fill"
# crop_offset = "center"       # "center", "north", "south", "east", "west"

# ─── Info Fields ─────────────────────────────────────────────────────────────
# Toggle which info lines to show (true/false)

show_title = true              # user@hostname
show_underline = true          # ─────────────
show_os = true                 # OS: Arch Linux x86_64
show_host = true               # Host: ThinkPad X1 Carbon
show_kernel = true             # Kernel: 6.x.x-arch1-1
show_uptime = true             # Uptime: 3 days, 5 hours
show_packages = true           # Packages: 1200 (pacman), 15 (flatpak)
show_shell = true              # Shell: zsh 5.9
show_resolution = true         # Resolution: 1920x1080
show_de = true                 # DE: Hyprland
show_wm = true                 # WM: Hyprland
show_wm_theme = true           # WM Theme: Adwaita
show_theme = true              # Theme: adw-gtk3-dark
show_icons = true              # Icons: Adwaita
show_terminal = true           # Terminal: kitty
show_term_font = true          # Terminal Font: JetBrains Mono
show_cpu = true                # CPU: Intel i5-13600K (20) @ 5.10GHz
show_gpu = true                # GPU: NVIDIA RTX 3060 Ti
show_memory = true             # Memory: 8000MiB / 32000MiB
show_disk = false              # Disk: 100G / 500G (20%)
show_battery = false           # Battery: 85% [charging]
show_local_ip = false          # Local IP: 192.168.1.100
show_public_ip = false         # Public IP: 203.0.113.50
show_locale = false            # Locale: en_US.UTF-8
show_song = false              # Song: Artist - Title
show_users = false             # Users: user1, user2
show_colors = true             # Color blocks ████████

# ─── Extra Features ──────────────────────────────────────────────────────────

nerd_font = false              # Use Nerd Font icons for labels (needs Nerd Font)
emoji_mode = false             # Use emoji art instead of ASCII
memory_bar = false             # Show memory progress bar [██████░░░░]
disk_bar = false               # Show disk progress bar [██████░░░░]
bar_width = 15                 # Width of progress bars (characters)

# ─── Layout ──────────────────────────────────────────────────────────────────

gap = 3                        # Space between logo and info (characters)
logo_only = false              # Only show logo, hide all info

# ─── Color Blocks ────────────────────────────────────────────────────────────

block_range = [0, 15]          # Range of colors to display (0-15)
block_width = 3                # Width of each color block
block_height = 1               # Height of color block rows

# ─── Underline ───────────────────────────────────────────────────────────────

underline_char = "-"           # Character used for title underline

# ─── Misc ────────────────────────────────────────────────────────────────────

stdout = false                 # Plain output mode (for piping to other commands)

Example Configs

Minimal — Just the essentials
# ~/.config/fetchx/config.toml
colors = "distro"
image_backend = "ascii"
gap = 2

show_title = true
show_os = true
show_kernel = true
show_uptime = true
show_shell = true
show_cpu = true
show_memory = true
show_colors = true

# Everything else is hidden
show_underline = false
show_host = false
show_packages = false
show_resolution = false
show_de = false
show_wm = false
show_wm_theme = false
show_theme = false
show_icons = false
show_terminal = false
show_term_font = false
show_gpu = false
show_disk = false
show_battery = false
show_local_ip = false
show_public_ip = false
show_locale = false
show_song = false
show_users = false
Kitty Terminal — Image with auto-fetching
# ~/.config/fetchx/config.toml
# Optimized for kitty terminal with random image fetching

colors = "distro"
bold = true
separator = ": "

image_backend = "kitty"
image_source = "auto"
ascii_distro = "auto"

# Show everything
show_title = true
show_underline = true
show_os = true
show_host = true
show_kernel = true
show_uptime = true
show_packages = true
show_shell = true
show_resolution = true
show_de = true
show_wm = true
show_wm_theme = true
show_theme = true
show_icons = true
show_terminal = true
show_term_font = true
show_cpu = true
show_gpu = true
show_memory = true
show_disk = true
show_colors = true

# Extra features
nerd_font = true
memory_bar = true
disk_bar = true
bar_width = 20
gap = 3
Ricing — Maximum eye candy
# ~/.config/fetchx/config.toml
# Full ricing setup — all the bells and whistles

colors = [6, 6, 4, 6, 7, 7]    # Cyan/blue theme
bold = true
separator = " → "

image_backend = "kitty"
custom_image = "/home/user/pictures/anime.png"

show_title = true
show_underline = true
show_os = true
show_host = true
show_kernel = true
show_uptime = true
show_packages = true
show_shell = true
show_resolution = true
show_de = true
show_wm = true
show_wm_theme = true
show_theme = true
show_icons = true
show_terminal = true
show_term_font = true
show_cpu = true
show_gpu = true
show_memory = true
show_disk = true
show_battery = false
show_local_ip = true
show_public_ip = false
show_locale = false
show_song = true
show_users = false
show_colors = true

nerd_font = true
memory_bar = true
disk_bar = true
bar_width = 20
gap = 3
block_width = 3
Scripting — Machine-readable output
# ~/.config/fetchx/config.toml
# Clean output for scripts and piping

no_color = true
bold = false
stdout = true
image_backend = "off"
gap = 0

show_title = false
show_underline = false
show_os = true
show_kernel = true
show_cpu = true
show_memory = true
show_disk = true
show_colors = false
# Usage:
fetchx --json | jq '.memory'
fetchx --stdout | grep "OS:"
Server — Headless, no graphics
# ~/.config/fetchx/config.toml
# Server/SSH — no image, useful info only

colors = "distro"