A floating stopwatch and timer for Linux and Windows that stays on top of everything - even fullscreen apps.
TimeBomb is a minimal, always-visible timer/stopwatch that floats above your screen. I built it because I needed something that:
- Stays visible during fullscreen games/videos
- Doesn't require clicking around
- Works entirely with keyboard shortcuts
- Doesn't get in the way
It's basically a tiny floating window you can drag anywhere, and it just works.
- Stopwatch mode - counts up from 00:00
- Timer mode - counts down from any time you set
- Always on top - even over fullscreen apps
- Keyboard shortcuts - Win+key combos for quick control
- Adjustable timer - hold Win+Up/Down to quickly change timer duration
- Sound feedback - satisfying beeps for start/pause/reset
- Alarm - loud persistent alarm when timer finishes
- Remembers position - window stays where you put it
- Freezing feature - hold Win after a keybind to freeze the timer/stopwatch for precise control and flow
- Cross-platform - works on both Linux and Windows
- Comprehensive logging - automatic error logging and autostart debugging
- Tested on: Fedora, openSUSE Tumbleweed, Debian (Linux Mint), Arch (EndeavourOS)
- Uses GtkLayerShell for proper "always on top" overlay support, even on fullscreen apps and games
- Direct keyboard access via evdev
- Comprehensive logging system with automatic cleanup
- Uses AutoHotkey for system integration
- Built-in suppression - Win+key shortcuts won't trigger Windows shortcuts
- Fewer features than Linux version (simpler implementation)
- Comes as both
.ahk(requires AutoHotkey) and.exe(standalone)
All shortcuts use the Win (Super/Meta) key:
| Shortcut | Action |
|---|---|
Win + ` |
Toggle visibility (show/hide) |
Win + Enter |
Pause/Resume |
Win + Backspace |
Reset |
Win + Esc |
Switch between Timer/Stopwatch |
Win + Up |
Increase timer (Timer mode only) |
Win + Down |
Decrease timer (Timer mode only) |
When you perform any keybind (except Win + Enter), if you keep holding the Win key, the timer/stopwatch will freeze until you release it. This gives you:
- Precise control - adjust or reset without losing track of time
- Flow - smooth, intentional interactions
- Feel - it just feels right when you use it
Try it: Press Win + Grave to show TimeBomb, then keep Win held - notice how the time freezes? Release Win and it resumes. It's surprisingly addictive.
Note (Linux only): These shortcuts might conflict with your system's default keybinds. One workaround is to create a custom shortcut via the system settings, make it execute a command - "true", and assign the conflicting shortcuts to it. This acts as a cheap suppression system. Please do look forward to future updates with built-in suppression.
File structure:
Linux/
├── install.sh # Automated installation script
├── uninstall.sh # Clean uninstallation script
├── assets/
│ ├── font/ # DS-Digital font variants
│ │ ├── DS-DIGI.TTF # Regular
│ │ ├── DS-DIGIB.TTF # Bold
│ │ ├── DS-DIGII.TTF # Italic
│ │ ├── DS-DIGIT.TTF # Thin
│ │ └── DS-DIGITAL-LICENSE.txt
│ ├── sounds/ # Sound effects
│ │ ├── adjust.wav
│ │ ├── alarm.wav
│ │ ├── pause.wav
│ │ ├── play.wav
│ │ ├── reset.wav
│ │ ├── start.wav
│ │ ├── switch_stopwatch.wav
│ │ └── switch_timer.wav
│ ├── state/ # Saved state (auto-generated)
│ │ ├── .gitkeep
│ │ └── state.ini # Window position and mode
│ └── logs/ # Application logs (auto-generated)
│ ├── .gitkeep
│ ├── timebomb_YYYYMMDD.log # Daily logs
│ └── autostart.log # Autostart debug log
└── python/
├── venv/ # Virtual environment (auto-generated)
├── app_manager.py # App state management
├── gui.py # GTK interface
├── hotkey.py # Keyboard listener
├── stopwatch.py # Stopwatch logic
├── timebomb.py # Main entry point
└── timer.py # Timer logic
Dependencies:
- Python 3.8+
- GTK 3
- GtkLayerShell
- Python packages: evdev, PyGObject, pyudev
- PulseAudio (for sounds)
Installation:
# Clone the repo
git clone https://github.com/caffienerd/timebomb.git
cd timebomb/Linux
# Make install script executable
chmod +x install.sh
# Run install script
./install.shThe install script handles:
- Detecting your package manager (apt/dnf/pacman/zypper)
- Installing system dependencies
- Creating Python virtual environment
- Installing Python packages (evdev, PyGObject, pyudev)
- Installing DS-Digital fonts
- Adding your user to the
inputgroup (required for keyboard access) - Creating log and state directories
- Setting up autostart (optional)
Important: You'll need to log out and back in after installation for the input group permissions to take effect.
The install script can set up TimeBomb to start automatically on login using XDG autostart (works on all distros and desktop environments).
Features:
- 12-second startup delay to ensure desktop environment is ready
- Automatic retry logic (waits up to 20 seconds for display)
- Comprehensive logging for debugging startup issues
- Logs saved to
assets/logs/autostart.log
Manual autostart setup:
If you skipped autostart during installation:
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/timebomb.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=TimeBomb
Comment=Floating Timer/Stopwatch
Exec=bash -c "sleep 12 && env GDK_BACKEND=x11 /path/to/timebomb/Linux/python/venv/bin/python3 /path/to/timebomb/Linux/python/timebomb.py >> /path/to/timebomb/Linux/assets/logs/autostart.log 2>&1"
Terminal=false
StartupNotify=false
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=12
Categories=Utility;
Keywords=timer;stopwatch;clock;
EOF
chmod 644 ~/.config/autostart/timebomb.desktopImportant: Replace /path/to/timebomb/ with your actual TimeBomb installation directory.
To disable autostart:
rm ~/.config/autostart/timebomb.desktopTimeBomb includes comprehensive logging to help debug issues:
-
Daily logs:
assets/logs/timebomb_YYYYMMDD.log- One log file per day
- Automatic cleanup (keeps last 30 days)
- Contains all app events and errors
-
Autostart log:
assets/logs/autostart.log- Captures startup output when launched via autostart
- Useful for debugging boot issues
View logs:
# View today's log
tail -f ~/path/to/timebomb/Linux/assets/logs/timebomb_$(date +%Y%m%d).log
# View autostart log
cat ~/path/to/timebomb/Linux/assets/logs/autostart.log
# List all logs
ls -lh ~/path/to/timebomb/Linux/assets/logs/Two options:
Option 1: Standalone .exe (easiest)
- Download
timebomb.exefrom thewindowsfolder - Double-click to run
- (Optional) Add to startup:
- Press
Win + R, typeshell:startup, press Enter - Create a shortcut to
timebomb.exein the startup folder
- Press
Option 2: AutoHotkey script
- Install AutoHotkey
- Download
timebomb.ahkfrom thewindowsfolder - Double-click
timebomb.ahkto run - (Optional) Add to startup folder same as above
Windows folder structure:
windows/
├── gui_state/
│ └── timebomb_config.ini
├── icon/
│ └── timebomb.ico
├── settings/
│ └── settings.txt
├── sounds/
│ ├── adjust.wav
│ ├── alarm.wav
│ ├── pause.wav
│ ├── play.wav
│ ├── reset.wav
│ ├── start.wav
│ ├── switch_stopwatch.wav
│ └── switch_timer.wav
├── timebomb.ahk
└── timebomb.exe
cd timebomb/Linux
chmod +x uninstall.sh
./uninstall.shThe uninstall script will:
- Stop any running TimeBomb processes
- Remove autostart entry
- Remove virtual environment
- Optionally remove DS-Digital fonts
- Optionally remove you from the
inputgroup - Optionally remove state and log files
Note: System packages (Python, GTK, etc.) are not removed.
Just delete the folder. If you added it to startup, remove the shortcut from the startup folder.
TimeBomb doesn't start on login:
- Check autostart log:
cat ~/path/to/timebomb/Linux/assets/logs/autostart.log - Verify desktop file exists:
ls ~/.config/autostart/timebomb.desktop - Check permissions: Desktop file should NOT be executable (
-rw-r--r--)
Keyboard shortcuts not working:
- Ensure you're in the
inputgroup:groups | grep input - If not, run:
sudo usermod -a -G input $USER - Log out and back in for changes to take effect
GTK initialization errors:
- Check if display is ready: The app waits up to 20 seconds for GTK to initialize
- View logs to see retry attempts
- If using autostart, ensure the 12-second delay is sufficient for your system
Viewing debug information:
# Check if TimeBomb is running
ps aux | grep timebomb
# View real-time logs
tail -f ~/path/to/timebomb/Linux/assets/logs/timebomb_$(date +%Y%m%d).log
# Check autostart configuration
cat ~/.config/autostart/timebomb.desktop- None currently - suppression works perfectly! The Windows version is just not as polished.
No reason, it's just that the name was available!
TimeBomb uses Win+key combos because it's the only modifier not heavily used by applications. Ctrl, Alt, and Shift would conflict with browser shortcuts, terminal commands, and app hotkeys.
- Built with GTK 3 and Python
- Uses GtkLayerShell for proper Wayland overlay support
- Direct keyboard access via evdev (no X11 dependencies)
- Threaded keyboard listener to avoid blocking the GUI
- Hot-plug support for USB keyboards
- Comprehensive logging with automatic rotation and cleanup
- Graceful startup with retry logic for autostart reliability
- Built with AutoHotkey
- Native Win+key suppression (no conflicts!)
- Simpler implementation than Linux version
- Saves state to INI files
- Requires your user to be in the
inputgroup - Won't work over certain system modals (lockscreen, etc.)
- Keybind conflicts with system shortcuts (add custom shortcuts for a cheap workaround as mentioned in the note above)
- Windows version is functional but less polished than Linux version
- Built-in keybind suppression system for Linux
- Polish Windows version
MIT - do whatever you want with it
If you find bugs or want features, open an issue. PRs welcome.
Especially interested in hearing if it worked for you!!
TimeBomb uses the DS-Digital font by Dusit Supasawat for the retro timer display.
- Author: Dusit Supasawat
- License: Freeware for personal and commercial use
- Source: dafont.com/ds-digital.font
- Location:
Linux/assets/font/
This font is included for convenience and is property of its original author.



