Skip to content
fetchcordPublic

About

FetchCord grabs your OS info and displays it as Discord Rich Presence

Topics

Resources

Stars

326 stars

Watchers

12 watching

Forks

Repository files navigation

FetchCord

Display your system information as Discord Rich Presence.

Linux, macOS, and Windows Python 3.12+ Discord MIT License

FetchCord showing Ubuntu as Discord Rich Presence

FetchCord 3 reads system info (primarily through fastfetch), then cycles it through Discord Rich Presence: OS and kernel, CPU/GPU/memory, terminal and shell, then host and display.

Discord's desktop client must be running. FetchCord talks to it over local RPC; there is no bot to invite.

Table of contents

What's new in 3.0.0

FetchCord was rewritten around fastfetch and a smaller Python package.

Breaking

  • Python 3.12+ is required.
  • fastfetch replaces neofetch on Linux and macOS.
  • The old computer/ package and the Qt GUI are gone.

Also new

  • Modular layout: config, fetch providers, presence cycles, and a JSON icon database.
  • pyproject.toml packaging, type hints, and a pytest suite (plus a real fastfetch CI smoke job).
  • Windows can run without fastfetch; PowerShell/native fallbacks fill the gaps.

Features

  • OS / distro detection on Linux, macOS, and Windows
  • Kernel and package count
  • CPU, GPU, and memory, rotated with the other cycles
  • Terminal, shell, and font
  • Motherboard / host and display resolution
  • Laptop vs desktop icon
  • User systemd unit on Linux
  • --update refreshes the distro/CPU/GPU/motherboard icon maps from this repo
  • Uptime as Discord's elapsed timer (time since boot)

If an OS, CPU, GPU, terminal, or board has no matching icon, FetchCord still runs and falls back to a generic image. Open a hardware / distro request to add one.

Requirements

Linux macOS Windows
Python 3.12+ 3.12+ 3.12+
fastfetch required required optional
Discord desktop required required required

On Debian/Ubuntu 24.04+, distro pip is externally managed. Use pipx or a virtualenv, not sudo pip.

Installing

Do not pip install fetchcord from PyPI for 3.0. PyPI still publishes 2.7.7 (neofetch, Python 3.6+). 3.0.0 is not on PyPI yet. Install from this GitHub repository until a v3.0.0 tag is published there.

The same applies to most distro packages: they still track 2.x unless noted otherwise.

Linux

Install Python 3.12+ and fastfetch, then:

pipx install "git+https://github.com/fetchcord/FetchCord.git"
# or, in a virtualenv:
pip install "git+https://github.com/fetchcord/FetchCord.git"

That tracks master (FetchCord 3). For the development branch:

pipx install "git+https://github.com/fetchcord/FetchCord.git@testing"

Uninstall with pipx uninstall fetchcord or pip uninstall fetchcord.

AUR (fetchcord, fetchcord-testing) still packages FetchCord 2.x / neofetch. Prefer pipx from this repo until those packages are updated for 3.0.

Snap is not a 3.0 install path. The store listing is gone, and the in-tree snapcraft.yaml is unmaintained.

From a clone

git clone https://github.com/fetchcord/FetchCord.git
cd FetchCord
pipx install .

macOS

Requirements: Python 3.12+ and fastfetch.

Homebrew is the easiest way to get fastfetch. The live tap may still bottle 2.7.7; until a v3.0.0 tag fills url/sha256 on the formula, install HEAD:

brew tap fetchcord/fetchcord
brew install --HEAD fetchcord

That pulls fastfetch and Python 3.12. To build the formula from this repo:

brew install --HEAD --build-from-source ./Formula/fetchcord.rb

Via pipx (same as Linux; 3.0 is not on PyPI yet):

pipx install "git+https://github.com/fetchcord/FetchCord.git"

Uninstall with brew uninstall fetchcord, or pipx uninstall fetchcord / pip uninstall fetchcord if you installed with pip.

Windows

Requirements: Python 3.12+. fastfetch is optional.

py -3.12 -m pip install "git+https://github.com/fetchcord/FetchCord.git"

Standalone FetchCord.exe builds are attached to GitHub Releases when a v3.x tag is published. There is no v3.0.0 release asset yet.

Running

Start Discord, then:

fetchcord

If the command is not found, add ~/.local/bin (Linux/macOS) or your Python Scripts directory (Windows) to PATH, or run:

python3 -m fetch_cord

FetchCord keeps running until you stop it (Ctrl+C). It is safe to launch at login with any autostart method you already use.

systemd user unit (Linux)

fetchcord --install

That installs fetchcord.service into ~/.local/share/systemd/user/ and enables it. Equivalent by hand:

mkdir -p ~/.local/share/systemd/user
cp systemd/fetchcord.service ~/.local/share/systemd/user/
systemctl --user enable --now fetchcord

Extra flags belong in a drop-in, not in the unit from git:

systemctl --user edit fetchcord
[Service]
ExecStart=
ExecStart=-/usr/bin/env fetchcord --nohost --time 15

--enable, --disable, --start, --stop, --status, and --uninstall wrap the matching systemctl --user operations. They are Linux-only.

Configuration

Presence cycles ship in fetch_cord/resources/fetchcord_conf.yml. There is no separate user config file yet; edit that YAML if you installed from a clone, or override cycles from the CLI.

Default cycles:

Cycle Hidden by Large image Lines
os --nodistro distro / OS kernel, packages
hardware --nohardware CPU memory, GPU
shell --noshell terminal font, shell
host --nohost motherboard motherboard, resolution

Each cycle has a duration (time, default 30 seconds). --time / -t overrides every cycle; the minimum is 15 seconds.

Each cycle maps:

  • app_id — which detected value selects the Discord application / large icon (os, cpu, terminal, motherboard)
  • top_line / bottom_line — Rich Presence details/state fields
  • small_icon — small image (gpu, shell, system_type, …)

Available fields include os, kernel, packages, cpu, gpu, mem (alias of memory), shell, terminal, font, motherboard, host, resolution, and system_type.

Arguments

Flag Description
--nodistro Skip the OS cycle
--nohardware Skip the hardware cycle
--noshell Skip the terminal/shell cycle
--nohost Skip the host cycle
-t, --time TIME Cycle length in seconds (minimum 15)
--install Install and enable the systemd user service (Linux)
--uninstall Remove the systemd user service (Linux)
--enable / --disable Enable or disable the user service (Linux)
--start / --stop Start or stop the user service (Linux)
--status Print user service status (Linux)
--update Download the latest icon JSON files from GitHub
--testing With --update or --install, fetch files from the testing branch instead of master
-d, --debug Print detection and RPC details
-v, --version Print the FetchCord version
-h, --help Show help

--update, --version, and the systemd flags exit after they finish; they do not start Rich Presence.

Updating the icon database

fetchcord --update

This overwrites the packaged JSON maps (cpus.json, gpus.json, os.json, terminal.json, shell.json, motherboards.json, system_types.json) with the copies on master. Add --testing to pull from the testing branch instead.

Development

git clone https://github.com/fetchcord/FetchCord.git
cd FetchCord
pip install -e ".[dev]"
ruff check .
mypy fetch_cord tests
python -m pytest tests/ -v

CI runs those checks on Python 3.12, 3.13, and 3.14, plus a smoke job that runs real fastfetch.

On a machine with fastfetch (and optionally Discord):

python scripts/validate.py           # core fields present
python scripts/validate.py --json    # also dump fastfetch JSON
python scripts/validate.py --connect # also set Rich Presence

Examples

Operating systems

macOS Big Sur Windows 10 Ubuntu

Terminals

Konsole GNOME Terminal Apple Terminal

CPUs

Ryzen 9 Intel i7 Intel Pentium

Hosts

HP laptop TUF Gaming laptop Lenovo desktop

Website

https://fetchcord.github.io/ is still a work-in-progress remaster and documents 2.x in places. This README is the source of truth for 3.0.

License

MIT. See LICENSE.

Questions and icon requests: Discord or GitHub Issues.

About

FetchCord grabs your OS info and displays it as Discord Rich Presence

Topics

Resources

Stars

326 stars

Watchers

12 watching

Forks

Releases

Packages

Contributors

Languages