Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way. It is written in pure c, with performance and customizability in mind. Currently, Linux, Android, FreeBSD, MacOS and Windows 7+ are supported.
With customization and speed being two competing goals, this project actually builds two executables.
- The main one being
fastfetch
, which can be very greatly configured via flags. These flags can be made persistent in~/.config/fastfetch/config.conf
. To view the available options runfastfetch --help
. - The second executable being built is called
flashfetch
, which is configured at compile time to eliminate any possible overhead. Configuration of it can be very easily done insrc/flashfetch.c
.
At the moment the performance difference is measurable, but too small to be human recognizable. But the leap will get bigger with more and more options coming, and on slow machines this might actually make a difference.
There are some premade config files in presets
, including the ones used for the screenshots above. You can load them using --load-config <filename>
. They may also serve as a good example for format arguments.
Fastfetch dynamically loads needed libraries if they are available. On Linux, its only hard dependencies are libc
(any implementation of the c standard library), libdl
and libpthread
(if built with multithreading support). They are all shipped with glibc
, which is already installed on most linux distributions.
The following libraries are used if present at runtime:
libpci
: GPU output.libvulkan
: Vulkan module & fallback for GPU output.libxcb-randr
,libXrandr
,libxcb
,libX11
: At least one of them sould be present in X11 sessions for better resolution detection and faster WM detection. The*randr
ones provide multi monitor support Thelibxcb*
ones usually have better performance.libwayland-client
: Better resolution performance and output in wayland sessions. Supports different refresh rates per monitor.libGIO
: Needed for values that are only stored GSettings.libDConf
: Needed for values that are only stored in DConf + Fallback for GSettings.libmagickcore
(ImageMagick): Images in terminal using sixel or kitty graphics protocol.libchafa
: Image output as ascii art.libZ
: Faster image output when using kitty graphics protocol.libDBus
: Needed for detecting current media player and song.libEGL
,libGLX
,libOSMesa
: At least one of them is needed by the OpenGL module for gl context creation.libOpenCL
: OpenCL modulelibXFConf
: Needed for XFWM theme and XFCE Terminal font.libsqlite3
: Needed for pkg & rpm package count.librpm
: Slower fallback for rpm package count. Needed on openSUSE.libcJSON
: Needed for Windows Terminal font ( WSL ).
MediaRemote
: Need for Media detection. It's a private framework provided by newer macOS system.MoltenVK
: Vulkan driver for macOS.molten-vk
libmagickcore
(ImageMagick): Images in terminal using sixel graphics protocol.imagemagick
libchafa
: Image output as ascii art.chafa
For the image logo, iTerm with iterm image protocol should work. Apple Terminal is not supported.
wlanapi
: A system dll which isn't supported by Windows Server by default. Used for Wifi info detection.libcJSON
: Used for Windows Terminal font detection.cjson
libvulkan
: Vulkan module. Usually has been provided by GPU drivers.vulkan-loader
vulkan-headers
libOpenCL
: OpenCL module.opencl-icd
Note: In Windows 7, 8 and 8.1, ConEmu is required to run fastfetch due to the lack of ASCII escape code native support. In addition, special build fastfetch-win7
is provided to support these old systems, which
- Build with the ancient MSVCRT C runtime library, instead of the modern UCRT C runtime library
- Disable stdout application buffer, which seems to problematic for ConEmu.
For the image logo, only chafa is supported due to the design flaw of ConPTY. In addition, chafa support is not built by default due to the massive dependencies of imagemagick. You must built it yourself.
freetype
: Used for Termux font detection.freetype
libvulkan
: Vulkan module, also used for GPU detection. Usually has been provided by Android system.vulkan-loader-android
vulkan-headers
All categories not listed here should work without needing a specific implementation.
Title, Separator, OS, Host, Bios, Board, Kernel, Uptime, Processes, Packages, Shell, Resolution, DE, WM, WMTheme, Theme, Icons, Font, Cursor, Terminal, Terminal Font, CPU, CPUUsage, GPU, Memory, Swap, Disk, Battery, Power Adapter, Player, Media, Vulkan, OpenGL, OpenCL, LocalIP, PublicIP, Wifi, DateTime, Date, Time, Locale, Colors, Break, Custom
AlmaLinux, Alpine, Android, Arch, Arco, Artix, Bedrock, CachyOS, CentOS, CRUX, Crystal, Debian, Devuan, Deepin, Endeavour, Enso, Fedora, FreeBSD, Garuda, Gentoo, KDE Neon, KISS, Kubuntu, LangitKetujuh, Linux, MacOS, Manjaro, Mint, MSYS2, NixOS, Nobara, OpenSUSE, OpenSUSE Tumbleweed, OpenSUSE LEAP, Parabola, Pop!_OS, RebornOS, RedstarOS, Rocky, Rosa, Slackware, Solus, Ubuntu, Vanilla, Void, Windows 11, Windows 8, Windows, Zorin
- Most of the logos have a small variant. Access it by appending _small to the logo name.
- Some logos have an old variant. Access it by appending _old to the logo name.
- To disable the logo, use
--logo none
. - Get a list of all available logos with
fastfetch --print-logos
. - Printing images as logo is supported using Sixel / Kitty / iTerm graphics protocol or chafas image to text conversion.
Pacman, dpkg, rpm, emerge, eopkg, xbps, nix, Flatpak, Snap, apk, pkg, brew, MacPorts, scoop, Chocolatey
KWin, Mutter, Muffin, Marco, XFWM, Openbox (LXDE, LXQT & without DE), Quartz Compositor (macOS), DWM (Windows)
KDE Plasma, Gnome, Cinnamon, Mate, XFCE4, LXQt
Konsole, Gnome Terminal, Tilix, XFCE4 Terminal, Alacritty, Kitty, LXTerminal, Deepin Terminal, iTerm2, Apple Terminal, Warp, TTY, Windows Terminal, Termux, mintty, ConEmu
fastfetch uses cmake
for building. pkg-config
is recommended for better library detection. The simplest steps to build the fastfetch and flashfetch binaries are:
mkdir -p build
cd build
cmake ..
cmake --build . --target fastfetch --target flashfetch
If the build process fails to find the headers for a library listed in dependencies, fastfetch will simply build without support for that specific feature. This means, it won't look for it at runtime and just act like it isn't available.
Currently GCC or clang is required (MSVC is not supported). MSYS2 with CLANG64 subsystem (or CLANGARM64 if needed) is suggested (and tested) to build fastfetch. If you need Windows 7 / 8.x support, using MINGW64 is suggested.
- Install MSYS2
- Open
MSYS2 CLANG64
(notMSYS2 / MSYS
, which targets cygwin C runtime) - Install dependencies
pacman -Syu mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-pkgconf mingw-w64-clang-x86_64-clang mingw-w64-clang-x86_64-cjson mingw-w64-clang-x86_64-vulkan-loader mingw-w64-clang-x86_64-opencl-icd
- Follow building instructions of Linux
- DEB / RPM package:
cmake --build . --target package
- Install directly:
cmake --install . --prefix /usr/local
Q: Why do you need a very performant version of neofetch?
I like putting neofetch in my ~/.bashrc to have a system overwiew whenever I use the terminal, but the slow speed annoyed me, so I created this. Also neofetch didn't output everything correctly (e.g Font is displayed as "[Plasma], Noto Sans, 10 [GTK2/3]") and writing my own tool gave me the possibility to fine tune it to run perfectly on at least my configuration.
Q: It does not display [*] correctly for me, what can I do?
This is most likely because your system is not implemented (yet). At the moment I am focusing more on making the core app better, than adding more configurations. Feel free to open a pull request if you want to add support for your configuration