TODOs
November 25, 2025 · View on GitHub
Warning
Parts of this README refers to the v2.0.0-beta1 release.
Some features such as the plugin system may differ from the upcoming stable release.
A modular information fetching tool (neofetch-like), focused on performance and customizability
Key Features
- Works as a terminal program, GTK3 GUI app, or native Android widget
- Modular design - fetch anything through
$<>tags and plugins - Super lightweight with no required dependencies
- Easy to configure with auto-generated, well-commented config files
- Plugin system for extending beyond system info (weather, GitHub, APIs, etc.)
- Live mode for continuous updates
Quick Start
After installing customfetch, simply run:
customfetch
On first run, customfetch automatically creates a config file ~/.config/customfetch/config.toml (or $XDG_CONFIG_HOME/customfetch/config.toml if set) with helpful comments explaining every option.
Useful commands to get started:
| Command | Description |
|---|---|
customfetch | Run with default/current config |
customfetch -w | Show comprehensive guide on tags, colors, and syntax |
customfetch -l | List all available modules (including from plugins) |
customfetch --gen-config <path> | Regenerate the default config file (if to a path) |
customfetch -h | Show all CLI arguments |
customfetch -C /path/to/config.toml | Use a custom config file |
customfetch -n | Disable logo display |
customfetch -N | Disable all colors |
customfetch -d NAME | Use a specific distro logo |
customfetch -s PATH | Path to custom ASCII art or image (must specify --image-backend -i) |
customfetch -N -m "\$<gpu>" -m "\$<cpu>" | Display only CPU and GPU info, no logo, no colors |
customfetch -m "\${cyan}Kernel: \$<os.kernel>" -m "\${green}Uptime: \$<os.uptime>" | Quick system check with custom formatting in the terminal |
customfetch --loop-ms 1000 | Update display every second |
Dependencies
Customfetch has no required dependencies unless you build the GUI app version. For compiling from source, all you need is a C++20 compiler (C++17 might still work).
GUI app packages:
gtk3gtkmm3
Optional packages (for faster system queries):
dconf- Alternative to the slowgsettingscommandlibxfce4util- Query XFCE4 version fasterwayland-client- Get Wayland compositor info faster
Installation
Debian / Ubuntu
Grab the latest .deb file from the releases page.
Arch (AUR)
# Binary (stable)
yay -S customfetch-bin # Terminal only
yay -S customfetch-gui-bin # GUI version
# Compile from source (stable)
yay -S customfetch # Terminal only
yay -S customfetch-gui # GUI version
# Unstable / git versions
yay -S customfetch-git # Terminal only
yay -S customfetch-gui-git # GUI version
Manual installation (for other distros)
Download the .tar.gz from releases.
It includes a /usr folder so you can install it manually or through your package manager.
Android widget
Moved to its own repo: https://github.com/Toni500github/customfetch-android-app
Build from source
git clone --depth=1 https://github.com/Toni500github/customfetch
cd customfetch
# DEBUG=0 for release build
# GUI_APP=0 or 1 for terminal or GUI app
make install DEBUG=0 GUI_APP=0
Configuration
Example config
Here's an example config and its output:

[config]
# The array for displaying the system/fetched infos
layout = [
"$<title>",
"$<title.sep>",
"${auto}OS: $<os.name> $<system.arch>",
"${auto}Host: $<system.host>",
"${auto}Kernel: $<os.kernel>",
"${auto}Uptime: $<os.uptime>",
"${auto}Terminal: $<user.terminal>",
"${auto}Shell: $<user.shell>",
"${auto}Packages: $<os.pkgs>",
"${auto}Theme: $<theme.gtk.all.name>",
"${auto}Icons: $<theme.gtk.all.icons>",
"${auto}Font: $<theme.gtk.all.font>",
"${auto}Cursor: $<theme.cursor>",
"${auto}WM: $<user.wm.name> $<user.wm.version>",
"${auto}DE: $<user.de.name> $<user.de.version>",
"$<auto.disk>",
"${auto}Swap: $<swap>",
"${auto}CPU: $<cpu>",
"${auto}GPU: $<gpu>",
"${auto}RAM: $<ram>",
"",
"$<colors>", # normal colors palette
"$<colors.light>" # light colors palette
]
Tag Syntax
Customfetch uses a tag system in both the layout and ASCII art. Here's a quick reference:
| Tag | Description | Example |
|---|---|---|
$<module.member> | Print info from a module | $<cpu>, $<ram.used>, $<os.kernel.version> |
${color} | Set text color | ${red}, ${#ff5500} |
$(command) | Run a shell command | $(date +%H:%M), $(!cbonsai) |
$[x,y,eq,neq] | Conditional output | $[$<os.name>,Arch,btw,] |
$%n1,n2% | Colored percentage | $%$<ram.used>,$<ram.total>% |
Note
- Use
$(!command)(with!) in ASCII art to prevent color leaking - Use
!in the begin of the$%%for inverting red and green - Escape
<as\<and&as\&when needed (especially for GUI app) - Run
customfetch -wfor the complete syntax reference with all color modifiers and advanced examples
Colors and formatting
Colors can be specified as:
- Named colors:
${red},${green},${cyan},${auto}(matches logo colors),${auto2},${auto3}... - Hex colors:
${#ff5500},${#f50}(shorthand) - ANSI escapes:
${\e[1;33m}(e.g., bold yellow) - Reset:
${0}(normal reset),${1}(bold reset)
Text modifiers (prefix before hex color):
| Modifier | Effect | Example |
|---|---|---|
! | Bold | ${!#ff0000} |
u | Underline | ${u#00ff00} |
i | Italic | ${i#0000ff} |
s | Strikethrough | ${s#888888} |
l | Blink (terminal only) | ${l#ff00ff} |
b | Background color | ${b#222222} |
Combining modifiers: ${!u#ff0000} (bold + underlined red)
GUI-only modifiers
| Modifier | Effect |
|---|---|
o | Overline |
a(value) | Foreground alpha (0%-100% or 1-65536) |
A(value) | Background alpha |
L(value) | Underline style (none/single/double/low/error) |
U(color) | Underline color (hex) |
B(color) | Background color (hex) |
S(color) | Strikethrough color (hex) |
O(color) | Overline color (hex) |
w(value) | Font weight (light/normal/bold/ultrabold or 100-1000) |
Example: ${oU(#ff0000)L(double)#ffffff}Error — white text with double red underline and overline
Plugins
Plugins extend customfetch beyond system information — fetch weather, GitHub stats, API data, and more.
Installing plugins
Use cufetchpm to install plugins from repositories:
cufetchpm install https://github.com/Toni500github/customfetch-plugins-github
After installing, run customfetch -l to see newly available modules from the plugin.
Managing plugins
cufetchpm list # List installed plugins
cufetchpm enable <plugin> # Enable a plugin
cufetchpm disable <plugin> # Disable a plugin
cufetchpm remove <plugin> # Remove a plugin
See cufetchpm --help for all options.
Writing your own plugins
Plugins are shared libraries (.so files) that register custom modules.
See the plugin development guide to create your own.
Star History
TODOs
- release v2.0.0
- work on the android app (later)
Thanks
I would like to thanks:
-
my best-friend BurntRanch,
For helping me initialize this project and motivate me to keep going
And also for making my customizability idea come true with the first prototype of the parser. -
saberr26,
For making the project logos -
the Better C++ discord server,
For helping me improving the codebase and helping me with any issues I got,
And also for being patient with me XD -
{fmt} and toml++ libraries
Our favorite libraries that me and BurntRanch uses -
this string switch-case library,
Really amazing, thanks for making this
I hope you'll like customfetch, and also checkout TabAUR, our other project that was made before customfetch.
Don't forgot sdl_engine too ;)
