~tpapastylianou/tomato

A pomodoro logger and timer for the terminal

034cfe9 tomato now appends the tomato duration in the logfile after the task name after the tomato is finished or interrupted

2 months ago

bbc3b7a Declaration of commitment now stays visible on screen, with tomato timer appearing below it

2 months ago

#tomato

A pomodoro logger and timer for the terminal

#Introduction

I am a fan of the pomodoro technique. I have used gnome-pomodoro happily so far, but I found it had the following features that I was missing:

  1. I do most of my work (programming) on the terminal. I wanted something bare-bones for the terminal, so that I wouldn't have to deal with minimizing/maximizing windows and pressing start/stop buttons.

  2. More importantly, I feel like my pomodoros are far more effective when I log them. However, this adds an extra layer of complexity with a gui app like gnome-pomodoro, since I need to remember to write something in my log, either before or after each pomodoro timer has completed. It's so easy to forget to do this, or simply not bother. This is very frustrating if you later want to use your pomodoro logs for planning, e.g. "how many pomodoros does this kind of task usually take?", "how many pomodoros can I usually do in a day?", "what kind of tasks take me more pomodoros than others (possibly for psychological reasons)", etc.

tomato addresses both problems. It is a bare-bones pomodoro logger/timer, which forces you to launch each pomodoro interval separately in the terminal, and allows providing a description as an optional argument, thereby encouraging logging with minimal effort and thought.

#Installation instructions

  1. Edit the tomatoconfig file as appropriate

  2. Make the files tomato, tomatoconfig, tomatoes, and untomato executable

  3. Copy them to /usr/local/bin (or simply add the directory containing these files to your PATH)

tomato has the following dependencies:

  • The sox package (provides the 'play' function for playing audio files)

  • The xtrlock package (a simple screen lock facility)

  • Optionally, the gnome pomodoro package, if you intend to use the default sound files I used, which were shamelessly stolen from the gnome pomodoro project. This is typically present in ubuntu repositories, but you can also download it manually from https://gnomepomodoro.org/.

On apt based systems you can install all the above dependencies via

sudo apt install sox xtrlock gnome-shell-pomodoro

#Usage

Type, e.g. tomato Solving Math Problems to log a tomato with the description "Solving Math Problems"

Type, tomato by itself to log a tomato that repeats the previous description used (i.e. continuing with that task). If the log does not yet exist, this will simply exit with an error.

Pass variable assignments TOMATO or BREAK in the format 'Minutes:Seconds' to specify explicit tomato and break durations; e.g. TOMATO=50:0 BREAK=10:0 tomato Long Study Session

Type untomato to remove the last entry from the log. If no more entries remain, the logfile itself will be deleted

Type tomatoes to inspect the current state of your tomato log

#Notes

  • You can press Ctrl-C while a tomato is running to terminate that tomato; note that this does not remove the entry already logged (therefore this is also an easy way of adding a tomato to the log without having to complete the timer interval required)

  • It is not currently possible to 'pause' the timer. In theory, this is a feature, not a bug. I consider "pausing" a pomodoro interval to deal with interruptions, to defeat the whole point of the pomodoro technique. Either your interruption is of the kind that you can quickly 'jot down' while the tomato is running, so that you can deal with it after the tomato has finished, or it is a significant interruption that has destroyed your current tomato as a unit of uninterrupted focus. If this happens, you should cancel your tomato, and untomato the invalid log.

    • Having said that, life happens, and different people like to use tools differently. Therefore if you do need to 'pause' the tomato, in principle what you should do is cancel it altogether using Ctrl+C (also 'untomato' it from the log if you wish) and then start a new one, assigning to the TOMATO variable the previously shown time left at the time of the interruption, so that you end up with a tomato interval with a specific duration. E.g. if you cancelled the previous tomato with 10mins 35s left on the timer, start a new tomato like so: TOMATO=10:35 tomato.
  • The way I, personally, use this, is to save my tomato logs inside a dropbox folder, which I keep synced on my phone. This allows me to inspect my logs from my phone if needed. I've left my personal default folder reflecting this in the tomatoconfig, but obviously you should change it to whatever works for you.

  • For the name of the logfile itself, the default saves it to today's date in yyyy-mm-dd format. This means that running tomato will add a log to a file with today's date. Tomorrow it will start a new file, and so forth. This means that you do not need to specify each time at the terminal 'where' you want to log your tomatoes. However, if this is not the behaviour you want, you can edit tomatoconfig to use a different system (e.g. a fixed file).

  • After a tomato has completed, but before the break timer starts, the xtrlock command is called to lock the screen (unlock it using your user password). This adds an extra 'nudge' to help you honour the break. Comment out the respective line in the tomato executable if you don't want this.

  • 'tomato' now displays a "declaration of commitment" prior to starting the tomato countdown. I had read somewhere that mentally (or better yet, out loud) saying this declaration before each tomato helps one commit, and stick to it better. I tried this, and found it to be completely true. I used to do this informally, but at some point I finally decided to make this a proper part of the program.