Timers
Each timer lives in a named section such as [timers.focus-block].
Required fields
trigger
Required inline table:
trigger = { tap = "top" }or:
trigger = { swipe = "l-to-r" }pattern
Required for multi-segment timers unless stopwatch = true and you want a true stopwatch with no preset duration. Mutually exclusive with timer-level time.
pattern = [
{ name = "focus", time = "00:25:00" },
{ name = "break", time = "00:05:00", vibrate = "low" },
]time
Required for single-segment timers that omit pattern, unless stopwatch = true and you want a true stopwatch with no preset duration.
time = "00:15:00"Optional fields
name
Overrides the display name derived from the timer key.
name = "Long Break"repeat
Controls repetition:
- omitted or
false: run once true: repeat forever- positive integer: repeat that many times
repeat = 4repeat = true cannot be combined with on-finished.
stopwatch
Defaults to false. When true, Thymer shows elapsed time counting up during the run instead of time remaining counting down.
stopwatch = true
time = "00:10:00"If you omit both time and pattern, stopwatch = true creates a true stopwatch with no preset end:
stopwatch = truevibrate
Optional default vibration for every segment in the timer, and the segment vibration for single-segment timers that use timer-level time.
vibrate = "mid"Any segment with its own vibrate value overrides this default.
hint
Optional default hint for every segment in the timer, and the single segment hint when pattern is omitted.
hint = "deep work"warn-at
Optional default warning point or warning list for every segment in the timer, and the single segment warning when pattern is omitted.
warn-at = "00:01:00"Any segment with its own warn-at value overrides this default.
on-finished
Optional finish vibration. Both of these are valid:
on-finished = { vibrate = "low-low-high" }on-press-up, on-long-press-up, and on-long-press-select
Optional button actions. skip, hide, and stopwatch can still use bare strings:
skiphidestopwatch
on-press-up = "skip"
on-long-press-up = "hide"
on-long-press-select = "hide"You can also use an inline table for any action:
on-press-up = { action = "hide" }on-long-press-select defaults to hide when omitted, so every timer can enter hide mode without extra configuration unless overridden without an alternate.
increment and decrement require an inline table with a time value in the same format as segment time:
incrementdecrement
on-press-up = { action = "decrement", time = "00:01:00" }
on-long-press-up = { action = "increment", time = "00:01:00" }
on-long-press-select = { action = "increment", time = "00:05:00" }These actions only affect an active timer run. They work while the timer is running or paused. increment extends the timer beyond its original configured length, and decrement shortens the remaining time and can finish the timer immediately when pushed past the end.
stopwatch is the exception: it starts the selected timer in stopwatch mode when no run is active, even if that timer is not configured with stopwatch = true.
must-acknowledge
Boolean flag that forces acknowledgement before the timer fully clears.
must-acknowledge = truerepeat-pattern-delay
Delay in milliseconds inserted before the next repetition starts. Defaults to 500.
repeat-pattern-delay = 500acknowledgment-alert-duration
Per-timer override in milliseconds for acknowledgement reminder vibration duration. Defaults to the root [vibration] value, or 12 when that table is omitted.
