Skip to content
Projects

gabrielzschmitz/Tomato.C has 448 GitHub stars and 24 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-09 12:19 UTC. Last push 2026-11-05.

How these counts are measured

A pomodoro TUI written in pure C.

Measured star growth

in 24h
0
in 7 days
Update delayed
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

Tomato.C

Tomato.C Logo

License Buy Me A Coffee Give me a Star

Tomato.C is a modular, extensible, terminal-based Pomodoro timer written in pure C. Its features dynamic UI, ASCII sprite animations, desktop notifications, built-in notes system with Vim-like motions and comprehensive session history logging.


Installation

Choose the installation method that best fits your needs. Homebrew is recommended for macOS, the install script is the quickest option for Linux and macOS, and building from source is ideal if you want to customize or contribute to the project.

Quick install script
curl -sSL https://raw.githubusercontent.com/gabrielzschmitz/Tomato.C/main/install.sh | bash
Build from source
git clone https://github.com/gabrielzschmitz/Tomato.C.git
cd Tomato.C
./build.sh
# And/or
./install.sh

By default the build uses gcc. To use tcc (Tiny C Compiler) or zig as an alternative, pass it on the command line:

CC=tcc ./build.sh
# And/or
CC=tcc ./install.sh
CC="zig cc" ./build.sh
# And/or
CC="zig cc" ./install.sh

Alternatively for a more permanent change, edit CC = gcc in build/config.mk.

Uninstall

From local repo:

sudo ./install.sh --uninstall

Via curl:

curl -sSL https://raw.githubusercontent.com/gabrielzschmitz/Tomato.C/main/install.sh | bash -s -- --uninstall

Usage

Pomodoro controls and navigation are handled via keyboard shortcuts and mouse input. To get help with the keybinds press ?/F1 at anytime!

Tomato.C demonstration

Tomato.C combines modern productivity features with a clean, retro-inspired terminal interface.


Configuration

Tomato.C uses a toml configuration file. When installed via install.sh, a fully commented sample config is automatically created at ~/.config/tomato/config.toml.

All available options are documented directly in the file, including timer durations, status bar modules, notifications, animations, keybindings, and other general settings.


Documentation

Complete API and developer documentation is generated with Doxygen.

Tomato.C documentation

Doxygen-generated API documentation for Tomato.C.

Generate the documentation locally:

cd docs
./generate.sh
$BROWSER output/html/index.html

Contribute

Feel free to contribute to the project, the requirements are to follow Conventional Commits, follow DOXYGEN style of documenting code and use .clang-format to format the files.

Development

A Nix package, flake, and development shell are included for reproducible builds and tooling.

Build and run the packaged binary:

nix build .#    # builds into result/bin/tomato
nix run   .#    # runs the binary
nix flake check # builds and smoke-tests the package

Enter a development shell (flake or classic nix-shell):

nix develop # flake-based shell
nix-shell   # classic (non-flake) shell

The shell provides gcc, make, pkg-config, ncurses, libnotify, plus clang-format, bear, doxygen, tcc, zig, and valgrind. From inside it, build and test as usual:

./build.sh
./run_tests.sh

License

This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.

Explore related projects