README.md

August 26, 2026 · View on GitHub

animfetch 🧊

An animated system fetch you can work inside. The art stays pinned at the top of the screen while your prompt and command output scroll below it. Linux and macOS.

version stars license platform issues

animfetch running with a pinned fetch above a working shell

Animations

cat-runcat-tailfox-rundolphin-swimblackhole
butterflyicosahedronrabbit-runmewyin-yang
treeboxingchicken-rundeer-runhorse-run
squirrel-runearthsaturn

Pick one with -a <name>, or set the default with --set <name>.

Install

Arch Linux:

paru -S animfetch-bin      # or animfetch-git to build from source

Nix / NixOS:

Run without installing:

nix run github:Andrew-Velox/animfetch

Or add animfetch to your own flake.nix:

{
  inputs.animfetch.url = "github:Andrew-Velox/animfetch";
}

Then add it to your NixOS packages:

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

or with Home Manager:

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

Any Linux or macOS, prebuilt binary, no Rust needed:

curl -fsSL https://raw.githubusercontent.com/Andrew-Velox/animfetch/main/install.sh | sh

Goes to ~/.local/bin, or /usr/local/bin as root; ANIMFETCH_BINDIR overrides. Tarballs are on the releases page. macOS support is new; if something looks off there, please open an issue.

From source, with Rust 1.88 or newer:

cargo install --locked --git https://github.com/Andrew-Velox/animfetch

Usage

animfetch --pin      # pin above your own shell, keep animating in background
animfetch --play     # animate in place for a few seconds, then exit
animfetch --once     # print one static frame and exit
animfetch            # interactive: animfetch owns the prompt

--pin is the one you want. It sets a scroll region so the top rows never scroll, then detaches and paints them while your own shell runs underneath with its history, completion and aliases intact. Undo with animfetch --unpin.

animfetch -a cat-tail        # different animation, this run only
animfetch --style quad       # half (default), quad, ramp, or raw
animfetch --width 40         # cap the art width (0 fills the screen)
animfetch --height 12        # both caps apply, aspect ratio is kept
animfetch --fps 20
animfetch --play -s 1.5      # shorter intro
animfetch --no-color

Piping the output, or NO_COLOR=1, drops to the static path automatically.

--style picks how the art is drawn. half and quad render it as solid blocks and rescale to any terminal. ramp maps coverage onto the characters in ramp. raw prints the art's own characters untouched, which suits hand-drawn and pre-coloured ASCII like earth; frames may carry their own truecolor escapes, and --art-color own|theme picks between those and the theme gradient.

In your shell startup

~/.bashrc or ~/.zshrc:

[[ $- == *i* ]] && command -v animfetch >/dev/null && animfetch --pin

~/.config/fish/config.fish:

status is-interactive; and type -q animfetch; and animfetch --pin

The guards keep it out of scripts and scp, which break on unexpected output. Never use bare animfetch here, since it waits for input.

Interactive mode keys

KeyAction
<text> EnterRun the command, output appears below the fetch
Ctrl-CInterrupt a running command; at an idle prompt, quit
EscQuit
Ctrl-DQuit, when the line is empty
Ctrl-UClear the line
Ctrl-WDelete the last word

cd and exit are handled internally, everything else runs under $SHELL -c. No aliases, no history, no completion: a launcher with a prompt, not a shell.

Configuration

Optional. Copy config.example.toml to ~/.config/animfetch/config.toml. Every key is optional, and a malformed file falls back to defaults.

Set color_source = "palette" and the fetch follows your desktop theme, reading a matugen, pywal or wallust palette. Under --pin it re-reads on change, so retheming recolours the running animation. Try it with animfetch --once --palette.

Stargazers ⭐

Stargazers

Credits

Some animations are redrawn as ASCII from RunCat by kyome22, used under the Apache License 2.0.