Skip to main content

Dripfetch

A customizable terminal dashboard with animated Matrix-style rain. Place system info, logos, clocks, calendars, weather, text, and network graphs anywhere on screen, and tune everything from one YAML file.

Dripfetch demo

Features

  • Rain with adjustable density, symbols, colors, speed, length, and box collisions
  • Seven box types: logo, sysinfo, clock, calendar, weather, net, text
  • 487 ASCII logos, auto-detected from your OS or chosen explicitly
  • Five border styles, shared palette and padding
  • Click a box and move it with arrows or WASD; the position is saved to YAML
  • Seven presets plus a default (0), validated configs with clear error paths

Install

Requires Python 3.10+ and a POSIX terminal with curses (macOS, Linux).

pipx install dripfetch                       # recommended
python -m pip install dripfetch              # inside a virtual environment
pipx install .                               # from a source checkout

brew tap a-shygun/dripfetch https://github.com/a-shygun/dripfetch.git
brew install a-shygun/dripfetch/dripfetch    # Homebrew

yay -S dripfetch                             # Arch (AUR)

GitHub release downloads

Each GitHub Release includes these files (0.5.0 below is an example; use the version you want):

  • dripfetch_0.5.0_linux_amd64.deb — Debian or Ubuntu on x86_64
  • dripfetch_0.5.0_linux_arm64.deb — Debian or Ubuntu on ARM64
  • dripfetch_0.5.0_macos_x86_64.tar.gz — macOS on Intel
  • dripfetch_0.5.0_macos_arm64.tar.gz — macOS on Apple Silicon
  • dripfetch-0.5.0-py3-none-any.whl and dripfetch-0.5.0.tar.gz — Python wheel and source distribution
  • dripfetch_checksums.txt — SHA-256 hashes for the downloadable package files

On Debian or Ubuntu, download the .deb matching your CPU architecture, then install it from the folder where it was downloaded:

sudo apt install ./dripfetch_0.5.0_linux_amd64.deb

Use the linux_arm64 filename on an ARM64 machine. The command installs the dripfetch program, which you can then run from a terminal.

On macOS, download the archive matching your Mac's processor, then extract and install the command into your personal ~/.local/bin directory:

tar -xzf dripfetch_0.5.0_macos_arm64.tar.gz
mkdir -p "$HOME/.local/bin"
install -m 755 dripfetch "$HOME/.local/bin/dripfetch"

Use the macos_x86_64 filename on an Intel Mac. If ~/.local/bin is not on your PATH, add it in your shell configuration. To install the Python wheel instead, use python -m pip install ./dripfetch-0.5.0-py3-none-any.whl in a virtual environment.

To check a download, calculate its SHA-256 hash with sha256sum <filename> on Linux or shasum -a 256 <filename> on macOS, then compare it with the matching filename in dripfetch_checksums.txt.

bash install.sh sets up a local virtual environment in ~/dripfetch and links dripfetch into ~/.local/bin; bash uninstall.sh removes it and keeps your config.

Uninstall: pipx uninstall dripfetch · python -m pip uninstall dripfetch · brew uninstall dripfetch · yay -R dripfetch

Nix

psutil and ruamel.yaml are runtime dependencies, not native build inputs. Put them in dependencies (or propagatedBuildInputs), not nativeBuildInputs, or the installed command fails with ModuleNotFoundError:

python3Packages.buildPythonApplication {
  pname = "dripfetch";
  version = "0.4.0";
  pyproject = true;
  src = ./.; # when evaluated from the repository root
  build-system = [ python3Packages.setuptools ];
  dependencies = with python3Packages; [ psutil ruamel-yaml ];
}

Temporarily build and run via nix flakes (no install)

nix run github:a-shygun/dripfetch?dir=packaging/nix

Install via nix flakes

  1. Add flake input

flake.nix

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    dripfetch = {
      url = "github:a-shygun/dripfetch?dir=packaging/nix";
    };
  };
}
  1. Install via system config or home-manager

configuration.nix

environment.systemPackages = with pkgs; [
  inputs.dripfetch.packages.${pkgs.stdenv.hostPlatform.system}.default
];

or

home.nix

home.packages = with pkgs; [
  inputs.dripfetch.packages.${pkgs.stdenv.hostPlatform.system}.default
];

Usage

dripfetch
Key Action
q Quit
Space Pause / resume rain
Click Select a box
Arrows / WASD Move the selected box (saved automatically)
Esc Deselect

Commands

Command Action
dripfetch -c, --use-config NUMBER|NAME|PATH Run with a preset or YAML file for this session only
dripfetch --set-config NUMBER|NAME|PATH Save a preset or file as the active config
dripfetch --set-logo NAME Save a logo in the active config
dripfetch --list-configs / --list-logos / --list-boxes List presets, logos, or box types
dripfetch --print-logo NAME Print a logo
dripfetch --config-path Show the config path in use
dripfetch --init-config Create or restore the default config
dripfetch -v, --version / --version-raw Show the version
dripfetch -h, --help Show help
dripfetch --use-config 2                  # try a preset
dripfetch -c ./my-layout.yaml             # try your own file
dripfetch --set-config moonlight_observatory

Presets are 01_neon_matrix, 02_moonlight_observatory, 03_ops_console, 04_citrus_pop, 05_arcade_white, 06_ink_and_amber, 07_arcade_cabinet, and 0 for the default. A selector can be the number, full name, or short name.

Lower CPU usage

The rain is the main cost. Lower rain.intensity to use less CPU; 0 disables rain and leaves the dashboard nearly idle. Around 20–60 suits a laptop on battery. Pausing with Space and shorter lengths also help.

Configuration

The active config is ~/.config/dripfetch/config.yaml. The packaged 0_default.yaml documents every option. Moving a box writes its new position back to the file in use.

background: "#080B12"
keyboard:
  layout: qwerty            # qwerty | azerty | qwertz
rain:
  collision: true
  intensity: 60             # lower = less CPU
  character: ["│", "┃", "╎"]
  colors:  [[0.7, "#21F7A8"], [0.3, "#45B8FF"]]   # [probability, value], must sum to 1
  speeds:  [[0.5, 30], [0.5, 50]]                 # ms per step, lower = faster
  lengths: [[0.8, 6], [0.2, 14]]
  effects: {acceleration: false, splash: false}
boxes:
  border: titled_single     # single | double | titled_single | titled_double | none
  border_color: "#50FFC1"
  text_color: "#D9E5F4"
  accent_color: "#50FFC1"
  padding: {horizontal: 2, vertical: 0}
  items:
    - type: logo
      logo: arch2
      position: {horizontal: -32, vertical: 0}
    - type: clock
      clock_size: small
      show_date: true
      position: {horizontal: 28, vertical: -7}
    - type: text
      title: NOTE
      text: |
        Dripfetch is running.
      alignment: center
      position: {horizontal: 28, vertical: 7}

Colors are #RRGGBB or #RRGGBBAA. Positions are cell offsets from the center (positive = right / down).

Box options

Type Options
logo logo (omit to detect your OS), colors for $1, $2, … markers
sysinfo sections: system, display, hardware, disk, connectivity (true/false)
clock clock_size small/medium/big, clock_style single/double, clock_24h, show_seconds, show_am_pm, blink_colon, show_date
calendar starting_day: monday, sunday, saturday
weather location or latitude/longitude, units celsius/fahrenheit (or metric/imperial), days 1–7. Uses Open-Meteo and needs internet.
net width, height, interval, download_color, upload_color
text text (string, block, or list), alignment left/center/right

Every box also accepts title, border, and position.

Neon Matrix
01 · Neon Matrix
Moonlight Observatory
02 · Moonlight Observatory
Ops Console
03 · Ops Console
Citrus Pop
04 · Citrus Pop
Arcade White
05 · Arcade White
Ink and Amber
06 · Ink and Amber
Arcade Cabinet
07 · Arcade Cabinet
Default layout
0 · Default

Project layout

src/dripfetch/
├── app/      cli.py (arguments), app.py (main loop), config.py (YAML + validation), terminal.py (renderer)
├── box/      base, manager, layout, placement, border, colors, registry, validation
│   └── types/  one module per box type; helper/ holds their support code
├── rain/     manager, spawning, physics, rendering, colors, models, constants
└── assets/   logos/*.txt and configs/*.yaml
Formula/      Homebrew formula        packaging/arch/  AUR PKGBUILD
packaging/nix/  Nix flake and package expression

To add a box type, drop a module with one BaseBox subclass into box/types/. It is discovered automatically and the module name becomes its type. An optional validate_config(cls, item, path) classmethod validates its options.

License

MIT. Report vulnerabilities privately, see SECURITY.md.

Metadata

Release files for dripfetch 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dripfetch 0.5.0
File Size Uploaded
dripfetch-0.5.0.tar.gz 156.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dripfetch 0.5.0
File Interpreter ABI Platform
dripfetch-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 400.3 kB

Release files / dripfetch-0.5.0.tar.gz

Download URL dripfetch-0.5.0.tar.gz
Size 156.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d7dff73754e26b0d3a9b9de73ad2e80ce5a0303d3297e487205d81236b05f312
BLAKE2b-256 checksum
How to use checksums
26324f476c7b5552bf1b682f6e29e7f45a4c545a8c721e7795edba7c7aa8721c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / dripfetch-0.5.0-py3-none-any.whl

Download URL dripfetch-0.5.0-py3-none-any.whl
Size 243.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92e96c8a49c11d531879876cc0c8f09cfaa63a9938c700b01423f6656bb3b6e0
BLAKE2b-256 checksum
How to use checksums
45b30e4f6560f841cc9b677608b41b1b2e9f15610e6c6fa931878d7751f5c557
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page