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.
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)
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 = ./.;
build-system = [ python3Packages.setuptools ];
dependencies = with python3Packages; [ psutil ruamel-yaml ];
}
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.
Gallery
01 · Neon Matrix |
02 · Moonlight Observatory |
03 · Ops Console |
04 · Citrus Pop |
05 · Arcade White |
06 · Ink and Amber |
07 · Arcade Cabinet |
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
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.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dripfetch-0.4.0.tar.gz | 154.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dripfetch-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 397.5 kB
Release files / dripfetch-0.4.0.tar.gz
| Download URL | dripfetch-0.4.0.tar.gz |
|---|---|
| Size | 154.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ebc73ef614f71e8cbb1f6af30c063833b01781c0cd4f88b7617a3d08977f43a6
|
|
BLAKE2b-256 checksum How to use checksums |
9677e8482c7a2152805a4b51fd18d8584459dcdc1842bd2b37f1a057eb0fbc80
|
| 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 4, 2026.
Transparency logRelease files / dripfetch-0.4.0-py3-none-any.whl
| Download URL | dripfetch-0.4.0-py3-none-any.whl |
|---|---|
| Size | 242.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8dc3eb6cb611f234c0b4119bc2c7ef0a172c4884e7841f949c49888509b423c5
|
|
BLAKE2b-256 checksum How to use checksums |
ee834e37e1b719450f6c63be5a8ed58fddd2c7ed7ad197ffa6beb8ff6bdc8d31
|
| 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 4, 2026.
Transparency log