From 497a800ecb9a019f63141dc62c9a0ae6c45868da Mon Sep 17 00:00:00 2001 From: murat Date: Mon, 1 Jun 2026 22:19:50 +0300 Subject: [PATCH] updated README --- README.md | 123 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 93 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 6a53d41..121d60a 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,28 @@ # fetchit -fetchit is a terminal-based system information viewer written in C++. It works like neofetch/fastfetch and consists of a single file (`main.cpp`). +`fetchit` is a Linux terminal system information viewer written in C++. It's a single-file program (`main.cpp`) that prints a colored distro logo (when available) alongside system and hardware info, similar to neofetch/fastfetch. ## Features -- Displays distro, kernel, uptime, shell, CPU, GPU, RAM, and OS date information. -- Detects distro name via `/etc/os-release`. -- Shows ASCII logos for supported distros. -- Reads `/usr/share/hwdata/pci.ids` for GPU names; prints hex IDs if missing. -- Accounts for Unicode character width (for icon alignment). +- Shows: distro, kernel, uptime, shell, CPU, GPU, RAM, and "OS Date". +- Distro detection via `/etc/os-release` (`PRETTY_NAME` for display, `ID` for logo matching). +- Colored ASCII distro logos for supported distros. +- GPU detection by scanning PCI devices (`/sys/bus/pci/devices/`) for class `0x03*`. +- GPU name resolution via `/usr/share/hwdata/pci.ids` (falls back to hex IDs if missing). +- Accounts for Unicode character width for better alignment in terminals. ## Supported Distro Logos +Logos are matched against `/etc/os-release` `ID`: + `arch`, `cachyos`, `debian`, `ubuntu`, `fedora`, `manjaro`, `opensuse`, `pop`, `linuxmint`, `endeavouros`, `void`, `alpine` ## Requirements - Linux -- A C++17-capable compiler (e.g., g++) -- A UTF-8 terminal with ANSI color support (for icons and colors) -- The following files/paths are read: +- A C++17-capable compiler (default: `g++`) +- UTF-8 locale + ANSI color support (recommended for icons/colors) +- Reads the following files/paths: - `/etc/os-release` - `/etc/hostname` - `/proc/uptime` @@ -31,34 +34,94 @@ fetchit is a terminal-based system information viewer written in C++. It works l ## Build -```bash -g++ -std=c++17 -O2 -o fetchit main.cpp -``` - -## Run +### Using the Makefile (recommended) ```bash -./fetchit +make ``` -## Sample Output +Binary output: `build/fetchit` -```text - --- murat@baklava --- +Run: - /\  distro: Arch Linux - / \  kernel: 7.0.10-arch1-1 - / \  uptime: 1 minutes - / \  shell: /usr/bin/bash - / ,, \ 󰍛 CPU: 12th Gen Intel(R) Core(TM) i5-12500H (16) @ 4.5 GHz - / | | \ 󰾲 GPU: AD107M [GeForce RTX 4060 Max-Q / Mobile] / Alder Lake-P GT2 [Iris Xe Graphics] - /_-'' ''-_\  RAM: 15.2529 GB -  OS Date: 6 months 17 days 3 hours 40 minutes +```bash +make run +``` + +### Manual build + +```bash +g++ -O2 -Wall -Wextra -std=c++17 -pipe -o fetchit main.cpp +``` + +## Install / Uninstall + +Install: + +```bash +sudo make install +``` + +Defaults: + +- `PREFIX=/usr/local` +- `BINDIR=$(PREFIX)/bin` +- Installs to: `/usr/local/bin/fetchit` + +Uninstall: + +```bash +sudo make uninstall +``` + +Packaging-friendly variables: + +- `DESTDIR` (staging root) +- `PREFIX`, `BINDIR` + +Example: + +```bash +make install PREFIX=/usr BINDIR=/usr/bin DESTDIR=/tmp/pkgroot +``` + +## Distribution Archive + +Create a tar.gz containing the built binary: + +```bash +make dist +``` + +Output: `dist/fetchit--linux-x86_64-gnu.tar.gz` + +`` is derived from: +`git describe --tags --dirty --always` (when available) + +Full release pipeline: + +```bash +make release ``` ## Notes -- `OS Date` is based on the creation time of `/etc/hostname`. -- If no ASCII logo is found, only the info list is printed. -- The distro logo is displayed in color via ANSI escape codes. -- This tool targets Linux systems and is not expected to work on non-Linux OSes. +- `shell` is taken from `$SHELL` and printed as the basename (e.g. `bash`, not `/usr/bin/bash`). +- `OS Date` is computed from `/etc/hostname` file metadata (`ctime`) as an elapsed duration; it may not equal the OS install date. +- If `pci.ids` is unavailable, GPU(s) are printed as hex IDs like `0xVVVV:0xDDDD`. +- If no distro logo matches, the logo section will be empty and only info lines are shown. + +## Sample Output + +```text + --- user@host --- + + /\  distro: Arch Linux + / \  kernel: 7.0.10-arch1-1 + / \  uptime: 12 minutes + / \  shell: bash + / ,, \ 󰍛 CPU: ... (N) @ X.XX GHz + / | | \ 󰾲 GPU: ... +/_-'' ''-_\  RAM: 15.25 GB +  OS Date: 6 months 17 days 3 hours 40 minutes +```