Polydoro
Pomodoro widget for polybar and friends
Polydoro is a pomodoro timer made for polybar, lemonbar and probably other status bars. There is a single daemon and there can be multiple listeners, so all your bars can show the same widget. It can be controlled through the polydoro command, which can even be added to your statusbar (clicked, etc) or can be controlled through your window manager's keybindings.
Installation
Using cargo install:
cargo install polydoro
Build from source:
git clone https://git.vidhukant.com/polydoro/
cd polydoro
cargo build -r
# optionally move this binary to $PATH
./target/release/polydoro
Usage
Starting the daemon
Use polydoro -d
to start a daemon. (I'd recommend adding this to your .xprofile
, etc)
If you attempt to start multiple daemons, it'll
return an error. If you're sure all other instances have been killed, you need to delete
/tmp/polydorod.sock
and /tmp/polydorocmd.sock
before starting the daemon again.
Hooking it up with polybar
Use this module:
[module/polydoro]
type = custom/script
exec = polydoro -l
tail = true
# optional
click-left = polydoro toggle
click-middle = polydoro skip
click-right = polydoro reset
Controlling polydoro:
The polydoro
command can be used to send commands to the daemon.
You can do a polydoro -h
for details.
Available commands:
polydoro run
This is used to start the timer, or resume the timer if it's paused. Otherwise, this command is ignored.
polydoro pause
Pause a running timer. If the timer is idle (not started yet) or already paused, this command is ignored.
polydoro toggle
This will conditionally perform a run or a pause operation, whichever is applicable. This command is useful for polybar's click response, as we don't have much room for multiple commands.
polydoro skip
This skips the currently running timer and moves on to the next timer. If the timer is idle (not started yet) or paused, this command is ignored.
polydoro soft-reset
Jump to the beginning of the current timer, i.e reset the current timer.
polydoro hard-reset
Jump to the beginning of the first timer, i.e go back to the initial state.
polydoro reset
Conditionally perform a soft or a hard reset. If soft-reset is applicable, do that. Otherwise, do a hard reset (running this command twice in a row would always do a hard reset). This command is useful for polybar's click response, as we don't have much room for multiple commands.
polydoro notify
Toggle desktop notifications.
Configuration
Config is passed as environment variables.
Daemon config
In the polydoro daemon we have the following options:
Note: All duration values are in seconds.
Variable | Description | Default Value |
---|---|---|
WORK_DURATION |
Duration of the work timer | 1500 (25 minutes) |
BREAK_DURATION |
Duration of the short break timer | 300 (5 minutes) |
LONG_BREAK_DURATION |
Duration of the long break timer | 1200 (20 minutes) |
LONG_BREAK_INTERVAL |
Number of work cycles till long break | 4 |
NOTIFY |
If set to true to start up with the notifications turned on |
false |
Example:
WORK_DURATION=1200 NOTIFY=true polydoro -d
Listener config
It is possible to format the output given by each listener individually. Through some polybar formatting magic it's also possible to have different foreground colors, background colors, and even nerd fonts.
We have two (optional) variables that can be used in formatting.
{time}
shows the remaining time in mm:ss format{counter}
shows the sequence number of the cycle (starting from 1)
Variable | Default Value |
---|---|
FORMAT_WORK |
WORK {counter} - {time} |
FORMAT_WORK_IDLE |
(WORK) {counter} |
FORMAT_WORK_PAUSED |
[WORK] {counter} - {time} |
FORMAT_BREAK |
BREAK {counter} - {time} |
FORMAT_BREAK_IDLE |
(BREAK) {counter} |
FORMAT_BREAK_PAUSED |
[BREAK] {counter} - {time} |
FORMAT_LONG_BREAK |
LONG BREAK {counter} - {time} |
FORMAT_LONG_BREAK_IDLE |
(LONG BREAK) {counter} |
FORMAT_LONG_BREAK_PAUSED |
[LONG BREAK] {counter} - {time} |
Example:
FORMAT_WORK="working - {time}" FORMAT_BREAK="taking a break - {time}" polydoro -l
Licence
Licenced under GNU General Public Licence V3
GNU GPL License V3: LICENSE
Copyright (c) 2025 Vidhu Kant Sharma