A Pomodoro timer for GNOME that stays out of your way.
Focus in clean 25 minute blocks, tag what you're working on, and see exactly where your hours go. Native GTK4 and libadwaita, no clutter, no settings you'll never touch.
- Four session types. Focus, Short Break, Long Break and Custom, each with a duration you can change on the fly. Focus itself toggles between a 25 or 50 minute block right on the main page.
- A ring that shows where you are. The progress ring is colour-coded per session type, with dots underneath counting the focus sessions in your current cycle. Scroll on it while the timer is stopped to nudge the current session's length a minute at a time.
- Auto-cycle. Finish a focus block and Tempus lines up the matching break — short after a brief focus, long after a longer one — and advances on its own.
- Todo list that sticks around. Add tasks inline or import them from Markdown, export them back when you're done. Standard GFM checkboxes, nothing proprietary.
- Subjects. Tag any task with a subject like Thesis, Coursework or Reading, each with its own colour shown as a dot beside the task. Add them on the fly or manage them in Preferences.
- Markdown that carries more than a checkbox. An imported task can declare how many pomodoros it should take and which subject it belongs to, and any detail you indent underneath becomes its subtitle. Notes wrap to the window width instead of being cut off, so a long one stays readable.
- Two-way sync with the source file. Check off a task that came from a Markdown import and Tempus flips the same checkbox in the file it came from — no need to keep the list and the app in sync by hand.
- Per-task pomodoro count. Every task keeps a running tally of the focus sessions you've poured into it — against your estimate, when the task declares one.
- History that actually adds up. Flip between Today, Week, Month and Semester. Today breaks down by task, longer ranges group your time by subject in matching colours so you can see exactly where the hours went.
- Semester view. Defaults to the last six months, or pin a fixed start and end date if your term has real boundaries.
- Focus mode. Silences GNOME notifications while a session runs and restores them the moment you stop.
- Live countdown in the window title. Glance at the taskbar and read
12:34 · Focuswithout switching back to the app. - GNOME Shell panel widget. An optional top-bar indicator with a session-coloured dot and live countdown — start, pause, skip or switch session without opening the window.
- Sound alerts with volume control. A chime when a session starts and ends. Mute the start sound if it gets on your nerves, or keep the end one looping until you dismiss the session.
- Desktop notifications. Pinged the moment a session ends, even with the window minimised.
- No restart, ever. Change any duration or the cycle length in Preferences and it applies live.
flatpak install flathub io.github.EmaLica.Tempus
flatpak run io.github.EmaLica.TempusThe quickest way to run Tempus without packaging it.
Fedora 40 / 41 / 42 / 44
sudo dnf install python3-gobject gtk4 libadwaita glib2-develUbuntu / Debian / Linux Mint
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-4.0 \
gir1.2-adw-1 libglib2.0-devArch Linux / Manjaro
sudo pacman -S python-gobject gtk4 libadwaita glib2git clone https://github.com/EmaLica/Tempus
cd Tempus
chmod +x run.sh
./run.shrun.sh compiles the GSettings schema locally and launches the app directly — no system install needed.
Use this if you want to test Tempus exactly as it will appear on Flathub, or if you want a proper desktop entry and app icon without touching your system Python.
Fedora 40 / 41 / 42 / 44
sudo dnf install flatpak flatpak-builderUbuntu / Debian
sudo apt install flatpak flatpak-builderArch Linux
sudo pacman -S flatpak flatpak-builderThis only needs to be done once per machine.
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gnome.Platform//50 org.gnome.Sdk//50Note: if
50is not yet available on your system, runflatpak remote-ls flathub | grep org.gnome.Platformto see which versions are listed.
git clone https://github.com/EmaLica/Tempus
cd Tempusflatpak-builder --user --install --force-clean build-dir flatpak/io.github.EmaLica.Tempus.ymlWhat each flag does:
| Flag | Meaning |
|---|---|
--user |
Installs only for your user, no sudo needed |
--install |
Installs the result right after building |
--force-clean |
Wipes build-dir/ before building, avoids stale artefacts |
The first build downloads the GNOME SDK modules and can take a few minutes. Subsequent builds are cached and much faster.
flatpak run io.github.EmaLica.TempusTempus will also appear in GNOME Shell's application grid after installation.
flatpak uninstall io.github.EmaLica.TempusTempus ships an optional panel indicator that mirrors the timer in the top bar — a session-coloured dot and a live 12:34 · Focus countdown, plus play/pause, reset, skip and session switching, without switching back to the window. It talks to the running app over D-Bus, so it stays in sync while Tempus is open; close the app and the indicator dims, click it to launch Tempus again.
ln -s "$PWD/shell-extension" \
~/.local/share/gnome-shell/extensions/tempus@emalica.github.io
gnome-extensions enable tempus@emalica.github.ioOn Wayland, log out and back in first so the shell picks up the new extension. Full details in shell-extension/INSTALL.md.
Tempus imports and exports the standard GFM task-list syntax:
- [ ] Write the report
- [x] Review the PR
- [ ] Fix bug #42Plain - item lines without a checkbox are imported as uncompleted tasks.
Indented lines under a task become its subtitle, so the row stays readable no matter how much detail the note carries:
- [ ] Rewrite the parser
Split the prefix off the title first.
- the old regex swallowed the whole lineA blank line closes the note. An indented checkbox is a task of its own, not a note.
Notes are never truncated: they wrap over as many lines as they need, reflowing when you resize the window. Titles behave the same way, so nothing is hidden behind an ellipsis — keep titles short if you want compact rows.
A task can declare how many pomodoros it should take, and Tempus tracks progress
against it — the badge reads ● 2/5 instead of ● 2:
- [ ] [5🍅] Write the reportAn optional keyword after the count is carried through untouched on export, so tags your notes rely on survive a round trip:
- [ ] [5🍅 alpha] Write the reportSubjects are picked up from the surrounding headings. A task inherits the last
heading that names one of the subjects you already created in the app — matching
ignores emoji, case and punctuation, so ## 📐 Mat. Continuo — limits assigns
Mat. Continuo:
## 📐 Mat. Continuo — limits
- [ ] [2🍅] Sequences
## Anything else
- [ ] [1🍅] Mat. Continuo: extra exercisesUnder a heading that matches nothing, Tempus looks for a subject name in the task text itself — the second task above still lands on Mat. Continuo. Subjects are never created by an import: unknown names are left unassigned.
Importing replaces the whole list, so keep one file per batch of tasks.
Checking a task off in Tempus writes the same change back to the Markdown file
it was imported from — - [ ] becomes - [x] right where the task lives, so
the file on disk never falls behind the app:
- [ ] [2🍅 alpha] Write the reportbecomes
- [x] [2🍅 alpha] Write the reportThis only applies to tasks imported from a real checkbox. Plain - item
bullets and tasks added directly in Tempus have no file to sync back to. If
the source file was edited or moved since the import, Tempus looks for a line
with matching text before giving up.
Bug reports and pull requests are welcome on the issue tracker.
Tempus is released under the GNU General Public License v3.0.





