Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/toni500github/customfetch
Highly customizable and fast system information fetch program
https://github.com/toni500github/customfetch
customfetch customizable customization fastfetch fetcher gtk3 gtkmm3 gui gui-application neofetch sysfetch
Last synced: about 2 months ago
JSON representation
Highly customizable and fast system information fetch program
- Host: GitHub
- URL: https://github.com/toni500github/customfetch
- Owner: Toni500github
- License: bsd-3-clause
- Created: 2024-05-06T19:27:34.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-10-29T11:24:40.000Z (about 2 months ago)
- Last Synced: 2024-10-29T12:12:56.559Z (about 2 months ago)
- Topics: customfetch, customizable, customization, fastfetch, fetcher, gtk3, gtkmm3, gui, gui-application, neofetch, sysfetch
- Language: C++
- Homepage:
- Size: 3.28 MB
- Stars: 7
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Customfetch
A system information fetch tool (or neofetch like program), which its focus point is the perfomance and customizability
## Key Features
* **GUI mode (GTK3)**
* Really customizable and fast, check [Config (with explanation)](#config-with-explanation) section
* Super lightweight, 3.1MB max## Depends
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
* `dconf`: Alternative to the slow `gsettings` command
* `xfce4util`: Query XFCE4 version faster
* `wayland-client`: Library for getting the Wayland compositor faster## Installation
>[!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"### Debian/Ubuntu and based
Download the latest `.deb` package in [releases](https://github.com/Toni500github/customfetch/releases/latest)### Arch and based (AUR)
```bash
# btw checkout our other project https://github.com/BurntRanch/TabAUR ;)
# either
taur -S customfetch-bin# or wiht GUI mode
taur -S customfetch-gui-bin
```### General Distros (Manual installation)
Download the latest `.tar.gz` tarball file in [releases](https://github.com/Toni500github/customfetch/releases/latest) \
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`### Arch and based (AUR) (source)
```bash
# either
taur -S customfetch# or wiht GUI mode
taur -S customfetch-gui
```### Arch and based (unstable) (AUR) (source)
```bash
# either
taur -S customfetch-git# or wiht GUI mode
taur -S customfetch-gui-git
```### Compile from (source) (unstable)
```bash
# 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
```## Config (with explanation)
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
![image](screenshot.png)
```toml
[config]# The array for displaying the system infos
layout = [
"$",
"$",
"${auto}OS: $ $",
"${auto}Host: $",
"${auto}Kernel: $",
"${auto}Uptime: $",
"${auto}Terminal: $",
"${auto}Shell: $",
"${auto}Packages: $",
"${auto}Theme: $",
"${auto}Icons: $",
"${auto}Font: $",
"${auto}Cursor: $",
"${auto}WM: $",
"${auto}DE: $",
"${auto}Disk(/): $",
"${auto}CPU: $",
"${auto}GPU: $",
"${auto}RAM: $",
"",
"$", # normal colors palette
"$" # 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:
* `$` - 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 colorsThey 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 `$` will print the username, `$` 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 `$[$,$(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 like `50%` 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 like `50%` 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 `$`) and `&`\
e.g `the number 50 is \< than 100 \& 98`
Won't affect the printing in terminal# TODOs
* ~~Color all ASCII arts (157/262) will take long ahh time~~ DONE
* Release 0.10.0# Thanks
I would like to thanks:
* my best-friend [BurntRanch](https://github.com/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](https://discord.gg/uSzTjkXtAM), \
For helping me improving the codebase and helping me with any issues I got,\
And also for being patient with me XD* [fastfetch](https://github.com/fastfetch-cli/fastfetch/) and [neofetch](https://github.com/dylanaraps/neofetch),\
For inspiring this project* [{fmt}](https://github.com/fmtlib/fmt) and [toml++](https://github.com/marzer/tomlplusplus) libraries\
Our favorite libraries that me and BurntRanch uses* this string switch-case [library](https://github.com/xroche/stringswitch), \
Really amazing, thanks for making thisI hope you'll like customfetch, and also checkout [TabAUR](https://github.com/BurntRanch/TabAUR/tree/dev), our other project that was made before customfetch.\
Don't forgot [sdl_engine](https://github.com/BurntRanch/sdl_engine) too ;)![meme.png](assets/screenshots/meme.png)