A system information fetch tool (or neofetch like program), which its focus point is the perfomance and customizability
- GUI mode (GTK3): Run customfetch even as a GUI application
- Really easy 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:
gtk3
gtkmm3
optional dependencies that will make customfetch faster. The name can vary depending on the package manager or distro
dconf
: Alternative to the slowgsettings
commandlibxfce4util
: 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-bin
Download 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
cufetch
Read 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> $<user.wm_version>",
"${auto}DE: $<user.de_name> $<user.de_version>",
"${auto}Disk(/): $<disk(/).disk>",
"${auto}CPU: $<cpu.cpu>",
"${auto}GPU: $<gpu.vendor> $<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-modules
argument -
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 world
will 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;31m
or\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
- tell me
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 ;)