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
- 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
After installing customfetch, simply run:
customfetchOn 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 |
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
Grab the latest .deb file from the releases page.
# 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 versionDownload the .tar.gz from releases.
It includes a /usr folder so you can install it manually or through your package manager.
Moved to its own repo: https://github.com/Toni500github/customfetch-android-app
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=0Here'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
]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 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 extend customfetch beyond system information — fetch weather, GitHub stats, API data, and more.
Use cufetchpm to install plugins from repositories:
cufetchpm install https://github.com/Toni500github/customfetch-plugins-githubAfter installing, run customfetch -l to see newly available modules from the plugin.
cufetchpm list # List installed plugins
cufetchpm enable <plugin> # Enable a plugin
cufetchpm disable <plugin> # Disable a plugin
cufetchpm remove <plugin> # Remove a pluginSee cufetchpm --help for all options.
Plugins are shared libraries (.so files) that register custom modules.
See the plugin development guide to create your own.
- release v2.0.0
- work on the android app (later)
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 ;)






