A system information fetch tool (or neofetch like program), which its focus point is the customizability and perfomance.
customfetch
is designed to provide a really customizable way to display your system informations in the way you like or want.
Currently supports Linux distros only. Android may be coming when stable release
- GUI mode (GTK3)
- Really customizable and fast, check Config (with explanation) section
- Lightweight
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
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.term>",
"${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> ($<theme.cursor_size>px)",
"${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
]
We use the config.toml
file, in there we got an array variable called "layout". That's the variable where you customize how the infos should be displayed.
You have 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]
with no spaces between commas.
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\ -
The color tag (
${}
) is used for which color to use for colorizing the text
e.g${red}hello world
will indeed print "hello world" in red (or the color you set in the variable).
The colors can be: black, red, green, blue, cyan, yellow, magenta, white and they can be configured in the config file.
You can put a custom hex color e.g:${#ff6622}
.
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 plain integer between 1 and 65536 or a percentage value like50%
)
L(value)
- to underline the text with a style (none
,single
,double
,low
,error
)
U(value)
- for choosing the underline color (hexcode without #)
B(value)
- for bg color text (hexcode without #)
S(value)
- for choosing strikethrough color (same value as above)
O(value)
- for choosing overline color (same value as above)
A(value)
- for bg alpha (same value as for fg alpha a(value))
w(value)
- for specify font weight (ultralight
,light
,normal
,bold
,ultrabold
,heavy
, or a numeric weight)
Terminal Only
l
- for blinking text
Alternatively, ANSI escape codes can be used, e.g\\e[1;31m
and\\e[38;2;160;223;11m
.
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 white -
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 \
- Color all ASCII arts (101/262) will take long ahh time
I would like to thanks:
-
my best-friend BurntRanch,
For helping me initialize this project and motivate me for keep going
And also for making my customizability idea come true with the parsing. -
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 ;)