A pomodoro timer written in pure C.
Dependencies • How to Install • How to Use • Controls • Preferences
The Pomodoro Method • To-do • Contribute • License
The technique basically consists of using a timer to break down work into intervals, follow the steps:
-
Get a to-do list;
-
Start Tomato.C and focus on a single task for 25 minutes straight until notification pops up;
-
Then record what you completed and enjoy a 5 minutes break;
-
After 4 pomodoros (steps 2 and 3), take a longer, 30 minutes break;
-
Restart.
Note: Never! Run the app with admin privileges. Just type it in the terminal:
tomato
Tip: For the best terminal resolution use setsid (the geometry depends on your font size):
setsid -f "$TERMINAL" -g 49x25 -c Tomato.C -e tomato
Use the following keys to control the application:
- ?/CTRL+H: To toggle the help page;
- Mouse: To select, toggle and increase or decrease;
- Mouse Scroll Wheel: To increase or decrease noises volume;
- Arrows or VIM Keys: To move and select;
- ENTER: To select;
- CTRL+X: To return to the main menu wherever you are;
- P or CTRL+P: To toggle pause;
- S or CTRL+S: To Skip a section;
- ESC or Q: To quit;
- N: To toggle notepad;
- A/a: To add note/task;
- SPACE: To toggle task;
- ESC: To cancel adding a note/task;
- D or CTRL+D: To delete note/task;
- (R F W T) or (1 2 3 4): To toggle noise;
- CTRL+(R F W T): To decrease noise volume;
- SHIFT+(R F W T): To increase noise volume.
You can configure the following settings at run time:
- Pomodoros Amount;
- Work Time;
- Short Pause Time;
- Long Pause Time;
- Noises Volume.
And change the default configurations editing the config.h, then sudo make install
to take effect.
You can change those configs:
- WSL: 0/1;
- ICONS: iconsoff - iconson - nerdicons;
- NOTIFY: 0/1;
- SOUND: 0/1;
- NOISE: 0/1;
- NOTEPAD: 0/1;
- AUTOSTARTWORK: 0/1;
- AUTOSTARTPAUSE: 0/1;
- RAINVOLUME: 10-100;
- FIREVOLUME: 10-100;
- WINDVOLUME: 10-100;
- THUNDERVOLUME: 10-100;
- BGTRANSPARENCY: 0/1;
- POMODOROS: 1-8;
- WORKTIME: 5-50;
- SHORTPAUSE: 1-10;
- LONGPAUSE: 5-60;
- WORKLOG: 0/1;
- TIMERLOG: 0/1;
- NOTELOG: 0/1;
Using of the -t flag you can pretty much do anything you want with the output.
For example, if you're using polybar, you can use it to get the time of your current pomodoro cycle to the bar. Just include the module at your polybar config:
modules-right = <other-modules> tomato <other-modules>
[module/tomato]
type = custom/script
exec = tomato -t
interval = 0
tail = true
format = <label>
format-background = ${colors.bg}
format-foreground = ${colors.fg}
format-padding = 1
label = %output%
# Only available with flakes
$ nix run github:gabrielzschmitz/Tomato.C
It only needs gcc to compile, ncurses as the graphic library and pkg-config to proper library's linking.
But optionally you can install libnotify to show notifications, mpv for the notifications sounds and a Nerd Font for the icons:
ARCH LINUX
$ sudo pacman -S base-devel ncurses mpv pkgconf libnotify
UBUNTU
$ sudo apt install build-essential libncurses5-dev libncursesw5-dev libmpv-dev mpv pkg-config libnotify4
FEDORA
$ sudo dnf groupinstall 'Development Tools' && sudo dnf install ncurses-devel mpv-devel pkgconf libnotify
MACOS (MacPorts needed)
$ brew install gcc && sudo port install ncurses && sudo port install mpv +libmpv
Note: if you're using WSL, install wsl-notify-send to get the notifications and then toggle it in the config.h. Sadly mpv don't work at WSL, so there's not custom sounds.
Note: a good practice is to clone the repo at $HOME/.local/src/
Note: first install all the dependencies!
$ git clone https://github.com/gabrielzschmitz/Tomato.C.git
$ cd Tomato.C
$ sudo make install
# flake.nix
{
inputs = {
tomato-c.url = "github:gabrielzschmitz/Tomato.C";
};
outputs = {
tomato-c,
...
}: let
system = "x86_64-linux";
in {
nixosConfigurations."${your_host_name}" = lib.nixosSystem {
specialArgs = {
tomato-c = tomato-c.defaultPackage.${system};
};
modules = [
# Add 'tomato-c' to your environment.systemPackages
./configuration.nix
];
}
};
}
- Make a welcome screen
- Rewrite using ncurses
- Implement input controls
- Implement user options
- Make it auto center
- Add notifications
- Add notifications sound
- Implement mouse support
- Implement save current state
- Current Time to file
- Add white noise functionality
- Implement simple note taking
- Implement a simple work hours history (maybe like git commits)
Feel free to contribute to the project, the only requirement is to follow the commit tittle pattern.
🍅 Adding log file
This software is licensed under the GPL-3 license.