A rewrite of the pfetch system information tool by dylanaraps in Rust
If you are familiar with the pfetch system information tool by dylanaraps, this does the exact same thing, but with an about 10x faster runtime. pfetch is simple by design with some (but not many) configuration options and a minimalistic look.
Supported Platforms: Linux, Android, macOS, Windows, FreeBSD, NetBSD
Included Logos: Alma Linux (new), Alpine Linux, Android, AmogOS (new), Arch Linux, ArcoLinux, Artix Linux, Bedrock Linux, Buildroot, CelOS, CentOS, Crystal Linux, dahliaOS, Debian, Devuan, DietPi (new), DragonflyBSD, Elementary OS, EndeavourOS, Fedora, Fiwix (new), FreeBSD, Garuda Linux, Gentoo Linux, Gnu, Guix, Haiku, HydroOS, Hyperbola, instantOS, IRIX, KDE neon, Linux Lite, Linux, Mint, macOS, Mageia, Manjaro, Minix, MorphOS (new), MX Linux, NetBSD, NixOS, Nobara Project (new), OpenBSD, openSUSE Tumbleweed, openSUSE Leap, OpenWrt, Oracle Linux (new), Parabola, Pop!_OS (updated), PureOS, Raspbian, Rocky Linux (new), SerenityOS, Slackware, Solus, SteamOS (new), Solaris, Ubuntu, Vanilla OS (new), Void Linux, Windows (new), Xeonix Linux
For all other distributions, a penguin will be displayed.
Credit to the original pfetch and its contributors.
If you want a logo to be added, feel free to open an issue or a PR.
Note: On openSUSE, install the rpm-devel
package for faster package count.
Download a binary from the latest release.
sh
cargo install pfetch
sh
brew install pfetch-rs
Install the pfetch-rs Nix package.
Install the pfetch-rs or pfetch-rs-bin AUR package.
Benchmarks performed on an AMD Ryzen 5 3600. Execution time is measured using
hyperfine with -w 4 -m 500 -N
flags.
| Implementation | Mean [ms] | Min [ms] | Max [ms] |
| :---------------: | :--------: | :------: | :------: |
| POSIX sh
(bash) | 23.7 ± 0.9 | 22.3 | 29.3 |
| POSIX sh
(dash) | 15.9 ± 0.3 | 15.1 | 18.2 |
| Rust (v2.3.0) | 2.2 ± 0.2 | 1.8 | 3.9 |
Note: This is with pacman
and flatpak
being the only installed package
managers. For more info, see Improving Performance.
The by far slowest part of the pfetch
execution time is counting the installed
packages. For most package managers this is still very fast, but there are some
(currently nix
(and zypper
, if rpm-devel
is not installed)) that take
~500ms to report installed packages, which takes away all performance benefits
of the Rust version. If you have one or more of these installed, you can skip
counting them by setting the PF_FAST_PKG_COUNT
environment variable to any
value.
Like the original pfetch
, pfetch-rs
is configured through environment
variables. Your existing config will probably still work, the main difference is
how padding is configured.
If you want to display a custom logo, use the PF_CUSTOM_LOGOS
option, an
example for a custom logos file can be found below.
```sh
#
PF_INFO="ascii title os host kernel uptime pkgs memory"
PF_INFO="ascii"
PF_INFO="title os host kernel uptime pkgs memory"
PF_SOURCE=""
PFCUSTOMLOGOS="~/.config/pfetch_logos"
PF_SEP=":"
PF_COLOR=1
PF_COL1=4
PF_COL2=9
PF_COL3=1
PFPAD1="" PFPAD2="" PF_PAD3=""
PF_ASCII="openbsd"
USER=""
HOSTNAME=""
PFFASTPKG_COUNT=1 ```
A file containing custom pfetch logos could look like this (also found under
custom_logos_example
). This will turn the Arch Linux logo red, the Debian Logo
blue and the Fedora logo yellow:
[Aa]rch*)
read_ascii 1 <<- EOF
${c1} /\\
${c1} / \\
${c1} /\\ \\
${c1} / \\
${c1} / ,, \\
${c1} / | | -\\
${c1} /_-'' ''-_\\
EOF
;;
[Dd]ebian*)
read_ascii 4 <<- EOF
${c4} _____
${c4} / __ \\
${c4}| / |
${c4}| \\___-
${c4}-_
${c4} --_
EOF
;;
[Ff]edora*)
read_ascii 3 <<- EOF
${c3},'''''.
${c3}| ,. |
${c3}| | '_'
${c3} ,....| |..
${c3}.' ,_;| ..'
${c3}| | | |
${c3}| ',_,' |
${c3} '. ,'
${c3}'''''
EOF
Note: Make sure to use tabs for indentation and separate logos with ;;
, as
seen above. You only need to add the logos you want to overwrite/add, the
default logos will stay available. The included logos can be found at
./pfetch-extractor/logos.sh
.