A lightweight, transparent HUD overlay for Linux — shows a system clock and stopwatch / countdown timer above fullscreen apps (YouTube, Netflix, etc.).
curl -sSL https://raw.githubusercontent.com/13/timehud/main/install-appimage.sh | sh# 1. Install dependencies (creates .venv automatically)
bash install.sh
# 2. Run
./timehud
# Or with a position override:
./timehud --position bottom-rightpip install . # or: pip install .[hotkeys] for global hotkeys
timehud(The old PYTHONPATH=src invocation still works; keep it as a one-line alternative for running from a checkout without installing: PYTHONPATH=src python -m timehud.main.)
| Button | Action |
|---|---|
| ▶ / ⏸ | Start / pause timer |
| ↺ | Reset timer to zero |
| SW/CD/IV | Toggle Stopwatch ↔ Countdown ↔ Interval mode |
You can also interact directly by clicking on the countdown/stopwatch numbers:
| Action | Result |
|---|---|
| Single Click | Start / pause timer |
| Double Click | Reset timer to zero |
| Scroll Wheel | Toggle Stopwatch ↔ Countdown ↔ Interval mode |
- Settings – full settings dialog
- Presets – one-click countdown, interval (work/rest for a total time, e.g. 45/15 for 10 min) and stopwatch (work/rest cycles counting upward forever) presets; save the current countdown as a preset or manage them in Settings
- Theme – switch between built-in looks
- Click-Through – toggle mouse pass-through
- Opacity – quick opacity change
- Position – snap to screen corner
- Quit
| Key | Action |
|---|---|
| Space | Start / pause timer |
| R | Reset timer |
| Escape | Hide overlay |
| Ctrl+Q | Quit |
| Shortcut | Action |
|---|---|
| Ctrl+Shift+Space | Start / pause timer |
| Ctrl+Shift+R | Reset timer |
| Ctrl+Shift+H | Show / hide overlay |
Right-click → Settings or edit ~/.config/timehud/config.json:
{
"theme": "classic",
"position": "top-right",
"opacity": 0.88,
"font_size": 30,
"font_family": "Monospace",
"timer_mode": "stopwatch",
"countdown_duration": 300,
"interval_work": 40,
"interval_rest": 20,
"interval_rounds": 8,
"progress_style": "line",
"row_spacing": 6,
"show_clock": true,
"show_timer": true,
"sound_enabled": true,
"sound_interval": 60,
"sound_file": "",
"click_through": false,
"alert_last_5_seconds": false,
"auto_restart_countdown": false,
"presets": [
{ "name": "1 min", "duration": 60 },
{ "name": "5 min", "duration": 300 }
],
"active_preset": ""
}top-left · top-right · bottom-left · bottom-right · top-center · bottom-center
You can also drag the overlay anywhere — the position is saved automatically.
Right-click → Theme (or Settings → Display): Classic (default),
Terminal, Glass, Mono. Picking a theme sets the color defaults — you can
still customize individual colors afterwards in Settings.
Set sound_interval (seconds) and sound_enabled: true.
Leave sound_file empty to use the built-in 880 Hz beep, or point it to any .wav/.mp3/.ogg file.
Requires one of these audio players: paplay (PulseAudio/PipeWire), aplay, ffplay, or mpv.
If alert_last_5_seconds is enabled, the timer will play short beeps at 5, 4, 3, 2, and 1 seconds remaining. On 0, it plays a long beep. Additionally, the timer text will flash its warning color on these exact seconds.
Work/rest rounds for training (default 40 s work / 20 s rest × 8 rounds,
configurable in Settings → Timer). The round counter shows WORK 3/8 /
REST 3/8, rest phases tint the timer blue, and a thin progress bar under
the timer depletes through each phase. A long beep marks every phase end
(toggleable per preset), and an optional fast double beep fires at half of
each work phase; the session ends after the last work phase.
By default the app runs under XWayland for reliable always-on-top behaviour above fullscreen apps.
Pass --wayland to use the native Wayland backend (overlay may not appear above fullscreen in that mode).
cd packaging/aur && makepkg -siSee packaging/aur/README.md for publishing to the AUR.
./build.shRun the built image:
chmod +x ./*.AppImage
./*.AppImageThe workflow file is .github/workflows/build-appimage.yml and supports:
- tag push (
v*) -> builds AppImage, uploads artifact, and creates a GitHub Release asset - manual run (
workflow_dispatch) -> builds AppImage and uploads artifact
Trigger a release build from your machine:
git tag v0.1.0
git push origin v0.1.0Trigger a manual build in GitHub:
- Open Actions -> Build AppImage
- Click Run workflow
- Download
TimeHUD-AppImagefrom the run artifacts
