Tiny and configurable break timer for Xserver written in C
  • C 98.8%
  • Makefile 1.2%
Find a file
2026-02-19 20:24:25 +03:00
examples Fix: Makefile and shortcuts 2026-02-19 19:20:41 +03:00
sounds Fix: Readme and defaults 2026-01-24 20:55:30 +03:00
LICENSE Other: Updatet LICENSE and STATEMENT 2026-01-29 06:41:06 +03:00
main.c Fix: Focus management and possible crash 2026-02-19 20:24:25 +03:00
main.h Fix: Focus management and possible crash 2026-02-19 20:24:25 +03:00
Makefile Fix: Makefile and shortcuts 2026-02-19 19:20:41 +03:00
README.md Fix: Makefile and shortcuts 2026-02-19 19:20:41 +03:00
STATEMENT Other: Updatet LICENSE and STATEMENT 2026-01-29 06:41:06 +03:00
timer.c Feature: Animations and Controlls 2026-01-20 16:02:51 +03:00
timer.h Feature: Animations and Controlls 2026-01-20 16:02:51 +03:00

xrest

Simple configurable break timer for Xserver that reminds you to rest.

screenshot screenshot

Features

  • Reminds you to rest
  • Full keyboard controls
  • Sound notifications
  • Input and/or Output block
  • Wide range of configuration options
  • Idle detection

Build

Install dependencies.

Example for Ubuntu/Debian:

sudo apt update
sudo apt install libx11-dev libxft-dev libxss-dev

Example for Arch linux:

sudo pacman -S libx11 libxft libxss libao

Example for Alpine Linux:

doas apk add libx11-dev libxft-dev libxscrnsaver-dev

Build application:

make

Install

sudo make install

Configure

Put your config in $XDG_CONFIG_HOME/xrest/config.ini

Example config with defaults:

# Text on the break screen
break_title_text = "Break time!"
break_message_text = "Rest your eyes. Stretch your legs. Breathe. Relax."
break_hint_text = "^S - stop, ^Q - quit"

# Text on the warning screen
warning_message_text = "Please, take a break!"
warning_hint_text = "^Space - start, ^W - snooze, ^S - skip, ^Q - quit"

# Text on the end screen
end_title_text = "Break has ended!"
end_message_text = "Work fruitfully. Concentrate on important. Don't get distracted."
end_hint_text = "press any key to continue..."

# Enable warning before break
warning_enabled = true
# Allow break skip
skip_enabled = true
# Allow break snooze
snooze_enabled = true
# Allow break interruption
stop_enabled = true
# Enable break end screen
end_enabled = true
# Enable hints
hints_enabled = true
# Enable time output
time_enabled = true
# Enable sound
sound_enabled = true
# Block all input on break (excluding break application)
block_input = false

# Time is specified in such maner: XXh YYm ZZs
# Time between breaks
timer_duration = 28m
# Duration of a break
break_duration = 5m
# Duration before break starts
warning_duration = 1m
# Snooze duration
snooze_duration = 3m

# Restart timer on end
repeat = true

# Skip break on idle
detect_idle = true
# Idle time limit to skip break
idle_limit = 5m

# Color specifications in #rrggbb format
font_color = #ffffff
hint_font_color = #aaaaaa
background_font_color = #222222
background_color = #000000
progress_color = #161616
border_color = #333333

# Font name, example: JetBrainsMono Nerd Font
font_name = "monospace"

# Title font specification
title_font_size = 14
title_font_weight = 300
title_font_slant = 0
title_font_style = "regular"

# Message and Warning font specification
message_font_size = 12
message_font_weight = 200
message_font_slant = 0
message_font_style = "regular"

# Hint font specification
hint_font_size = 10
hint_font_weight = 100
hint_font_slant = 100
hint_font_style = "regular"

# Time font specification
time_font_size = 128
time_font_weight = 300
time_font_slant = 0
time_font_style = "regular"

# Warning window width in pt
warning_width = 320
# Warning window height in pt
warning_height = 96
# Warning window border width
border_width = 0
# Unused
progress_weight = 16
# Margin between Title and Message
margin = 12

# Screen update limit
fps = 60

# Only WAV is currently supported
# Break start sound
start_sound_path = "/usr/local/share/xrest/sounds/start.wav"
# Break end sound
end_sound_path = "/usr/local/share/xrest/sounds/end.wav"
# Sound volume from 0.0 to 1.0
volume = 0.8

Legally, this project is licensed under the MIT License. See LICENSE file for details.

Morally, the Author opposes the intentional use of the provided code or software in a harmful way. See the STATEMENT file for details.