tomodoro
A terminal Pomodoro timer with animated backgrounds.

Install
Requires Rust — install via rustup if you don't have it.
Usage
On launch, a setup screen lets you choose your focus and break durations. Use Tab to move between fields, ←/→ to select hours or minutes, and ↑/↓ to change the value — or just type a number directly. Press Enter to start, Esc to quit.
| Key | Action |
|---|---|
Space |
Start / pause |
n |
Skip to next phase |
r |
Restart current phase |
e |
Edit timer durations |
t |
Set task label |
[ / ] |
Volume down / up |
← / → |
Cycle animation themes |
↑ / ↓ |
Cycle render modes (Half → Quarter → Braille) |
? |
Toggle help overlay |
Esc |
Cancel edit / quit |
q / Ctrl+C |
Quit |
CLI flags
To enable tab completion, pipe the output into your shell's completion setup. Examples:
# bash
# zsh
# fish
Endless mode
tomodoro -E runs the animated background full-screen with no timer, no session indicators, no progress bar, and no sounds — pure ambient display.
| Key | Action |
|---|---|
Space |
Pause / resume animation |
← / → |
Cycle animation themes |
↑ / ↓ |
Cycle render modes |
q / Esc / Ctrl+C |
Quit |
Config
On first launch, ~/.config/tomodoro/config.toml is created with all options commented out. Uncomment and edit to set persistent defaults:
= 2 # starting animation (0–7): waves, rain, leaves, stars, fire, aurora, blossom, sunset
= 4 # animation for focus phase
= 0 # animation for break phases
= "half" # half | quarter | braille
= 25 # minutes
= 5
= 15
= 0.8 # 0.0–1.0
= 4
= false # skip startup screen
= 5 # beep seconds before break ends
= false # notify-send on phase end
= true # notify if a newer version is available on startup
= "half" # lock progress bar style: half | quarter | braille (default: follows render mode)
Features
- Custom durations — set focus, short break, and long break times on startup or mid-session with
e; type values directly or use arrow keys - Volume control — adjust bell and beep volume with
[/], displayed in the header - Session tracker — dots in the top-right show progress toward a long break (every 4 sessions)
- Config file —
~/.config/tomodoro/config.tomlauto-created on first launch; set persistent defaults for themes, durations, volume, and more; invalid or unrecognised values are reset to defaults with an in-app warning; new keys added by updates are merged in automatically without overwriting existing settings - Desktop notifications — optional
notify-sendalerts on phase end; enable withnotifications = truein config - Task labeling — press
tmid-session to name the current task; shown in the header; logged with each completed session - Session history — completed focus sessions saved to
~/.local/share/tomodoro/history.json; runtomodoro historyto see totals and task breakdown - 8 animated themes — waves, rain, falling leaves, starfield, fireplace, aurora borealis, cherry blossom, sunset; all AI-crafted scenes with detailed foreground elements; set different themes for focus and break phases
- 3 render modes — half-block, quarter-block, or braille; increasing pixel density per terminal cell
- Coloured progress bar — matches the current theme; uses braille dots in braille mode
- Ambient audio — looping background track per scene; all 8 themes covered; plays while the timer runs; volume follows
[/] - Bell sounds — single bell when a focus session ends; countdown beeps for the last N seconds of a break (configurable)
- Phase indicators —
F(focus),B(short break),LB(long break) - Endless mode —
tomodoro -Eruns animations full-screen with no timer, sounds, or UI chrome; pure ambient display - Update check — notifies on startup if a newer version is available; dismissible with any key; disable with
update_check = false - Bar style — lock the progress bar to
half,quarter, orbrailleviabar_stylein config, independent of the animation render mode - Shell completions —
tomodoro completions <bash|zsh|fish>prints a completion script; pipe into your shell's completion setup for tab completion - Version management — install and switch between old releases with
tomodoro install,list, and--use
Version management
Install a specific older version alongside the current one:
This pulls that version from crates.io and stores it at ~/.local/share/tomodoro/0.2.2/bin/tomodoro. It does not affect the current binary on your PATH.
List all installed versions:
Run a specific version:
To remove an old version, delete its directory:
Requirements
- A terminal with true colour and Unicode support (Ghostty, Kitty, WezTerm, etc.)
- Linux (Debian/Ubuntu/Mint):
libasound2-devrequired for audio — install withsudo apt install libasound2-dev
Contributing
Contributions welcome — see CONTRIBUTING.md.