A system information fetch tool (or neofetch like program), which its focus point is the perfomance and customizability
- GUI mode (GTK3)
- Really customizable and fast, check Config (with explanation) section
- Super lightweight, 3.1MB max
currently requires C++20, but it's possible to compile with C++17 too (not officially supported)
libdl(should come already installed in almost every distro)
If you want to install with GUI mode install from your package manager:
gtk3gtkmm3
optional dependencies that will make customfetch faster
dconf: Alternative to the slowgsettingscommandxfce4util: Query XFCE4 version fasterwayland-client: Library for getting the Wayland compositor faster
Note
installing with GUI mode may slow down customfetch a bit because it needs to load the GUI libraries at runtime.
To check if it's enabled or not, run "cufetch --version"
Download the latest .deb package in releases
# btw checkout our other project https://github.com/BurntRanch/TabAUR ;)
# either
taur -S customfetch-bin
# or wiht GUI mode
taur -S customfetch-gui-binDownload the latest .tar.gz tarball file in releases
It contains the binary cufetch and the manual cufetch.1 with the LICENSE.
Togheter with the directory assets/ascii with the distro ascii art logos.
If installing the GUI mode version, there's cufetch.desktop
# either
taur -S customfetch
# or wiht GUI mode
taur -S customfetch-gui# either
taur -S customfetch-git
# or wiht GUI mode
taur -S customfetch-gui-git# clone the git dir
git clone https://github.com/Toni500github/customfetch
cd customfetch
# DEBUG=0 for release build
# GUI_MODE=0 for disabling GUI mode, or =1 for enable it (will slow down a bit if run in terminal)
make install DEBUG=0 GUI_MODE=0
# automatically generates a config and prints the infos
cufetchRead the manual cufetch.1 or the comments in the default generated config for knowing more about the configuration in customfetch.
This is only a brief explaination and preview.
Here's an example using my config
[config]
# The array for displaying the system infos
layout = [
"$<builtin.title>",
"$<builtin.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>",
"${auto}DE: $<user.de_name>",
"${auto}Disk(/): $<disk(/).disk>",
"${auto}CPU: $<cpu.cpu>",
"${auto}GPU: $<gpu.name>",
"${auto}RAM: $<ram.ram>",
"",
"$<builtin.colors>", # normal colors palette
"$<builtin.colors_light>" # light colors palette
]
In the config we got an array variable called "layout". That's the variable where you customize how the infos should be displayed.
There are 5 tags:
$<module.member>- Used for printing the value of a member of a module.${color}- Used for displaying text in a specific color.$(bash command)- Used to execute bash commands and print the output.$[something,equalToSomethingElse,iftrue,ifalse]- Conditional tag to display different outputs based on the comparison.$%n1,n2%- Used to print the percentage and print with colors
They can be used in the ascii art text file and layout, but how to use them?
-
The info tag (
$<>) will print a value of a member of a module
e.g$<user.name>will print the username,$<os.kernel_version>will print the kernel version and so on.
All the modules and their members are listed in the--list-modulesargument -
The bash command tag (
$()) let's you execute bash commands and print the output
e.g$(echo \"hello world\")will indeed echo out Hello world.
you can even use pipes
e.g$(echo \"hello world\" | cut -d' ' -f2)will only print world -
The conditional tag (
$[]) is used for displaying different outputs based on the comparison.
Syntax MUST be$[something,equalToSomethingElse,iftrue,ifalse](note: putting spaces between commas can change the expected result).
Each part can have a tag or anything else.
e.g$[$<user.name>,$(echo $USER),the name is correct,the name is NOT correct]
This is useful when on some terminal or WM the detection can be different than others,
Or maybe even on holidays for printing special texts\ -
The color tag (
${}) is used for printing the text in a certain color.
e.g${red}hello worldwill indeed print "hello world" in red (or the color you set in the variable/tag).
The colors can be: black, red, green, blue, cyan, yellow, magenta, white and they can be configured in the config file.
ANSI escape colors can be used, e.g\e[1;31mor\e[38;2;160;223;11m.
Alternatively, You can put a custom hex color e.g:#ff6622.
You can also use them inside the tag, like${!#343345}or${\e[1;31m}.
It's possible to enable multiple options, put these symbols before#:
Terminal and GUI
b- for making the color in the background
u- to underline the text
!- for making the text bold
i- for making the text italic
s- for strikethrough text
GUI Only
o- for overline
a(value)- for fg alpha (either a percentage value like50%or a plain integer between 1 and 65536)
L(value)- for choosing an underline style (none,single,double,low,error)
U(value)- for choosing the underline color (hexcode without #)
B(value)- for choosing the bg color text (hexcode without #)
S(value)- for choosing the strikethrough color (hexcode without #)
O(value)- for choosing the overline color (hexcode without #)
A(value)- for choosing the bg text alpha (either a percentage value like50%or a plain integer between 1 and 65536)
w(value)- for choosing the font weight (ultralight,light,normal,bold,ultrabold,heavy, or a numeric weight)
Terminal Only
l- for blinking text
To reset colors, use${0}for a normal reset or${1}for a bold reset.
For auto coloring, depending on the ascii logo colors, use${auto}.
They can be used for different colors too. So for getting the 2nd color of the ascii logo,
use${auto2}, for the 4th one use${auto4}and so on.
If you're in GUI mode and the source path is an image, all the auto colors will be the same colors as distro ascii art. -
The Percentage tag (
$%%) is used for displaying the percentage between 2 numbers.
It Must contain a comma for separating the 2. They can be either be taken from a tag or it put yourself.
For example: $%10,5% For inverting colors of bad and great (red and green), before the first%a put!
Any $ or brackets can be escaped with a backslash \. You need to escape backslashes too :(
NOTE: For having compatibility with GUI mode, you need to escape < (EXCEPT if you are using in a info tag, like $<os.name>) and &
e.g the number 50 is \< than 100 \& 98
Won't affect the printing in terminal
Color all ASCII arts (157/262) will take long ahh timeDONE- Release 0.10.0
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. -
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 ;)