Get up, walk it off, and actually get back at it.
A break reminder for Linux that is genuinely hard to ignore — and, unusually, one that also tells you when the break is over.
Grab the .deb from the latest release,
then:
sudo apt install ./backatit_1.1_all.debOr straight from the terminal, without opening a browser:
wget https://github.com/akashmony01/BackAtIt/releases/latest/download/backatit_1.1_all.deb
sudo apt install ./backatit_1.1_all.debThat command names version 1.0 explicitly; check releases for the current filename if a newer one is out.
Works on Debian, Ubuntu, Mint and anything else apt-based. apt pulls in
GTK and the other dependencies itself. Remove it later with
sudo apt remove backatit.
Not on a .deb distro, or would rather build it yourself? See
Install below — it is a shell and Python app, so there is nothing
to compile.
This started with back pain.
Sitting through long stretches of work without moving does that, and every break reminder I tried was far too easy to wave away. A small notification in the corner, dismissed without even reading it, and another hour gone.
So this one is harder to ignore. When a break is due it takes over the whole screen and sounds an alarm, and it ignores the keyboard completely — so carrying on typing cannot dismiss it by accident, which is exactly what happens when an alert lands mid-sentence. You get up because getting up is easier than arguing with it.
The other half is the part most timers forget: coming back. Once your break is over a second alert calls you back to the desk and keeps nagging — a burst of alarm, then a longer and longer silence — until you answer it. No more twenty-minute "five minute" breaks.
Everything about it bends to how you actually work.
| The break alert | Settings |
|---|---|
![]() |
![]() |
| Statistics | Built-in guide |
|---|---|
![]() |
![]() |
- Full-screen alerts that cannot hide behind the window you are working in
- Keyboard-proof — nothing you type can dismiss an alert, and the buttons stay dead for three seconds so a click already in flight cannot either
- Calls you back when the break is over, and keeps nagging until you answer
- Knows when you are away and stays quiet instead of alarming an empty room
- Daily schedule with any combination of days off, not just weekends
- Your words — the heading and message of both alerts are editable
- Your sounds — a different one for each alert, so you can tell them apart from another room
- Statistics — breaks taken, snoozed and skipped, over the last week or month
- Fractional minutes — every timing accepts halves, down to 30 seconds
Either download it from releases, or build it yourself from a clone:
./build-deb.sh
sudo apt install ./backatit_1.1_all.debRemove it with sudo apt remove backatit.
./install.sh # just for you (~/.local)
sudo ./install.sh --system # for everyone (/usr/local)
./install.sh --uninstall # remove it againinstall.sh checks what is missing first and prints the package names for
Debian, Ubuntu, Fedora and Arch.
| Needs | For |
|---|---|
bash, python3, python3-gi + GTK 3 |
the window and the alerts |
pw-play (PipeWire), paplay or aplay |
the sound |
notify-send (libnotify) |
the heads-up notifications |
gdbus (glib) |
away detection — GNOME only |
On Debian or Ubuntu:
sudo apt install python3-gi gir1.2-gtk-3.0 libnotify-bin pipewire-bin- You work for the break interval.
- Shortly before it is due, a notification warns you.
- "Take a break!" appears full-screen with the alarm sounding.
- You click I took my break! and walk away.
- When the break is over, "Walk time is up" calls you back and keeps buzzing until you click I'm back at work.
- The next work block begins.
The countdown restarts when you answer, not when the alert appeared — so however long an alert sits there, you still get a full work block afterwards.
Step 5 is optional, as is almost everything else.
| What | Where |
|---|---|
| Settings | ~/.config/backatit/config |
| Statistics | ~/.local/state/backatit/stats.tsv |
| Runtime state | $XDG_RUNTIME_DIR/backatit/ (cleared at logout) |
Installing, upgrading and removing never touch your settings or statistics.
A few advanced settings are only in the config file: BUZZ_ON_MIN,
BUZZ_GAP_START_MIN and GRACE_SEC. Editing that file by hand is safe — the
app changes values in place and leaves your comments alone.
| Script | Does |
|---|---|
./install.sh |
install or uninstall from source |
./build-deb.sh |
build a .deb (VERSION=1.1 ./build-deb.sh) |
./make-icons.sh |
regenerate icon sizes from logo.png |
./demo-stats.sh on |
fill the stats page with sample data (off restores) |
./purge.sh --dry-run |
list every trace of the app on the machine |
./tests/run.sh |
run the test suite (10 suites, sandboxed) |
Your name, email and version live in about.conf, which the About card, the
package metadata and the licence all read from.
./tests/run.shTen suites covering the schedule and days-off logic, config parsing and quoting, the daemon's lifecycle, the alert window and its buzzer, and the settings window. They run against sandboxed copies of the config, statistics and runtime state, so your real settings are never touched.
alarm.sh launcher — starts the background app, opens the window
alarmd.sh the background app: timing, scheduling, firing alerts
settings.py the settings window (GTK 3)
alert.py the full-screen alert window
alertctl.sh shows one alert on demand, for the Test buttons
lib.sh shared shell helpers: config, schedule, sound, stats
Written against the freedesktop desktop standards, so it should run on GNOME, KDE, XFCE, Cinnamon and the rest. Two things are GNOME-specific and degrade quietly elsewhere:
- Away detection asks GNOME's idle monitor. Off GNOME it reads zero, which means "you are here" — so breaks always fire and nothing is skipped.
- The full-screen alert prefers XWayland so it can stay on top. Under other compositors it still goes full screen.
It does not run on Windows. The background app is bash, sound goes through
PipeWire, away detection through D-Bus, and start-at-login through
~/.config/autostart. Porting means rewriting those four pieces.
MIT — free to use, change and share, including commercially. The only condition is that the copyright notice stays with it.



