#fetch #neofetch #arch-linux #rust

app rsftch

Lightning fast hardware fetch tool written in rust

41 releases (4 breaking)

new 0.5.6 May 10, 2024
0.5.5 May 9, 2024
0.4.5 Apr 12, 2024
0.3.9 Apr 10, 2024
0.1.8 Mar 24, 2024

#27 in Command line utilities

Download history 351/week @ 2024-03-18 1176/week @ 2024-03-25 578/week @ 2024-04-01 711/week @ 2024-04-08 25/week @ 2024-04-15 7/week @ 2024-04-22 15/week @ 2024-04-29 871/week @ 2024-05-06

951 downloads per month

MIT and maybe GPL-3.0-only

52KB
1K SLoC

Rsftch

Screenshots

image image

Ascii supported distros

  • Arch Linux
  • Debian
  • Fedora
  • Endeavour OS
  • Void Linux
  • Ubuntu
  • *Suse
  • Raspbian
  • Linux Mint
  • MX Linux
  • Gentoo
  • Funtoo
  • Slackware
  • NixOS
  • Kali Linux
  • CachyOS
  • FreeBSD
  • NetBSD
Others won't have a custom title, only "Rsftch"

Supported package managers

  • xbps
  • dnf
  • dpkg
  • rpm
  • apt
  • pacman
  • emerge
  • yum
  • zypper
  • apk
  • pkg

* Some might not work, and if they don't, please file an issue.

Dependencies

  • pciutils
  • xrandr
  • Any nerdfont

Installation

cargo install rsftch

Source

git clone https://github.com/charklie/rsftch.git`
cd rsftch
cargo install --path .

NetBSD

If you're on NetBSD or, any supported pkgsrc platform, a pre-compiled binary is available from the official repositories. To install it, simply run: pkgin install rsftch

Or, if you prefer to build it from source:

cd /usr/pkgsrc/sysutils/rsftch
make install

DEB file

There is an .deb file availible in the releases section, for Arch and Debian / Ubuntu users.

Binary

If you don't have cargo installed you can download the binary and move it directly to your /usr/bin, although this is very unsafe and should never be done.

Configuration

Info:

The info configuration should be located at ~/.config/rsftch/info.json, and it could look something like this;

{
    "info1": [ "os", "kernel", "packs" ],
    "info2": [ "user", "host" ],
    "info3": [ "cpu", "gpu", "mem" ]
}

Each info(number) is the section. This is a very simple example but all the options are as follows:

  • os / distro
  • host / hostname
  • shell
  • kernel
  • packs / packages
  • user / username
  • term / terminal
  • de / dewm / wm
  • cpu / processor
  • gpu / graphics
  • mem / memory
  • uptime
  • res / display / resolution

Colors

The color configuration should be located at ~/.config/rsftch/colors.json, and it could look something like this:

{
  "colors": {
    "color0": "blue",
    "color1": "red",
    "color2": "green",
    "color3": "yellow"
  }
}

Other available colors are as follows:

  • green
  • red
  • purple / magenta
  • yellow
  • blue
  • black
  • white

The number followed by "color" means:

  • color0: Ascii text on top
  • color1: First info section
  • color2: Second info section
  • color3: Last info section

Common issues

Running rsftch in terminal doesn't work (command not found)

Solution: (If you installed with cargo) Add ~/.cargo/bin/ to PATH, how varies from shell to shell, here are some popular ones:

Bash / Zsh: echo "PATH=\$PATH:~/.cargo/bin/" >> (.bashrc / .zshrc path)

Fish: set -U fish_user_paths ~/.cargo/bin/ $fish_user_paths

Nushell: let-env PATH = ($env.PATH | prepend $"($env.HOME)/.cargo/bin")

Elvish: set paths = [~/.cargo/bin/ $@paths]

If none of these work, or you are unsure how to do this in your shell, consider moving the binary to /usr/bin, example command: sudo mv ~/.cargo/bin/rsftch /usr/bin

Other issues

File an issue.

Usage

Usage: rsftch [OPTION...] [OVERRIDE] [MARGIN] [CONFIG FILE(s)]

  -h, --help, --usage         Bring up this menu
  -o, --override              Overrides distribution, affects ASCII and "distro" info.
  -m, --margin                Add margin to the info sections, default 1.
  -c, --color-config          Specify another color config file, to be used instead of the default one.
  -i, --info-config           Specify another info config file, to be used instead of the default one.
      --ignore-color-config   Ignores the custom color config and uses the default one.
      --ignore-info-config    Ignores the custom info config and uses the default one.
      --ignore-config         Ignores both configs and uses the default ones.
      --info                  Only prints the value of the following arguments info, for example
                              "rsftch --info distro" would output: "EndeavourOS"

Info config is located at:  ~/.config/rsftch/info.json
Color config is located at: ~/.config/rsftch/colors.json

Time comparison

  • Rsftch: 22.93 milliseconds
  • Neofetch: 284.03 milliseconds
  • Screenfetch: 832.59 milliseconds
NOTE: Timing varies heavily depending on e.g. what package manager your distro uses, these times are from my system. (arch + pacman)

Compatability

Currently Rsftch only works on GNU/Linux, (most) BSD distributions and (probably) Mac OS.

Note

(If) You're wondering why I didn't use clap for command-line argument parsing, I've personally found it slow, and if I do get it to be somewhat fast, its too easy and first rsftch was meant to be a project for me to learn rust so I tried to complicate (some) things and making them in pure rust instead of using a crate to do it for me.

Contribrutions

All PRs or just an issue recommending an issue is always welcome. Keep in mind that I've only been programming in Rust for circa 2 months, so don't be harsh.

Thanks

Thank you to:

  • @siris for helping me with speeding up everything massively and packaging rsftch for Funtoo Linux.
  • @0323pin for packaging rsftch on pkgsrc and uploading it to beucismis/awesome-fetch.

Todo

  • Configuration via JSON
  • Version command
  • Automatic ASCII generation
  • Add TOML / JSONC support
  • Add support for more info sections (?)

Dependencies

~3–37MB
~514K SLoC