go get github.com/claudiodangelis/i3-timer
Add these lines to the configuration file, which is usually located at
[i3timer] command=~/go/bin/i3-timer -alarm-command="notify-send 'i3-timer' 'Alarm Elapsed!'; play /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga" interval=10
Note: higher values for
interval lead to poor timer accuracy.
-colors flag enables colored output. The config parameter
markup=pango is required, for example:
[i3timer] command=~/go/bin/i3-timer... markup=pango interval=10
|(default)||Timer is idle|
|Green||Timer is in its first half|
|Yellow||Timer is in its second half|
|Red||Timer is in its last quarter|
Note: if pango markup is not rendered, for example the output is something like
<span color="red">Timer: 5m0s</span>, you will need to set
font pango:Monospace 10 to the
bar section of the i3's configuration file.
||Timer is idle|
||Timer is showing remaining time|
||Timer is showing elapsed time|
||String||Command(s) to be executed when the alarm fires|
||Boolean||Prints colorized timer|
||Boolean||Prints debug information|
||Boolean||Restarts timer after the alarm fires|
||Integer||Sets the default duration, in minutes, of the timer|
||Boolean||Starts the timer as soon as i3 starts|
You can interact with the timer by clicking and/or using the scrollwheel.
|Left Click||Toggles between elapsed/remaining time|
|Middle Click||Starts the timer|
|Right Click||Stops and resets the timer|
|Scroll Up||Adjusts the timer to add one minute|
|Scroll Down||Adjusts the timer to remove one minute|
If passed, the value of
-alarm-command will be executed when the timer runs out. In the example above the value is
notify-send 'i3-timer' 'Alarm Elapsed!'; play /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga, which will pop up a notification on the top right corner of the screen and play a sound.
You can execute whatever program(s) you like.
You can setup key bindings to start and stop the timer by using i3blocks' signaling feature. What you should do is to create 2 additional blocks with no
interval property but set the proper
signal value for the blocks, then set i3 configuration to bind the emission of the given signals to a keyboard shortcut.
The following example will bind the start of timer to Mod1+Shift+Control+k (which will emit, for example, signal
10) and the stop to Mod1+Shift+Control+l (which will emit, for example, signal
11). After emitting signal
11, both key shortcuts will emit signal
12 that will refresh the timer's "gui".
Create the main block to configure the timer in i3blocks configuration file:
[i3timer] command=~/go/bin/i3-timer -alarm-command="notify-send 'i3-timer' 'Alarm Elapsed!'; play /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga" interval=10 signal=12
Create the "start timer" block in i3blocks configuration file
[i3timer] command=~/go/bin/i3-timer -exec-start signal=10
Create the "stop timer" block in i3blocks configuration file
[i3timer] command=~/go/bin/i3-timer -exec-stop signal=11
Create the keyboard shortcut binding in i3 configuration file
# start timer bindsym --release Mod1+Shift+Control+k exec bash -c "pkill -SIGRTMIN+10 i3blocks && pkill -SIGRTMIN+12 i3blocks" # stop timer bindsym --release Mod1+Shift+Control+l exec bash -c "pkill -SIGRTMIN+11 i3blocks && pkill -SIGRTMIN+12 i3blocks"
Restart i3 and enjoy
i3-timer stores timer's data into a hidden JSON file,
.i3-timer.json stored at your home directory.