Skip to main content

☕ slow-coffee

A take-your-time keep-awake indicator for your system tray. On by default.

A small coffee cup lives in your top bar and stops the screen blanking or the session going idle. The cup boots full, because the whole point is to stay awake until you say otherwise. No daemon to babysit, no battery to drain - it just holds a D-Bus idle inhibitor and gets out of the way.

CI PyPI AUR License: MIT

slow-coffee tray menu

Why another caffeine?

Most keep-awake tools assume you want a trigger: stay awake while a video plays, while music plays, while an app is fullscreen. slow-coffee assumes the opposite. You opened it because you want to stay awake now, so it starts caffeinated and stays that way. One click (or a timer) to stop.

  • On by default. Cup full at launch. --start-inactive if you disagree.
  • Honest icon. Full = really inhibiting; empty = really not. No lying cup.
  • Idle-only by default. The screen stays on, but closing the lid still suspends - safer for a laptop than blocking all sleep.
  • Timers. 30 min / 1 hour / 2 hours / indefinitely, from the menu or --minutes N.
  • Self-contained. Bundles its own icons; no theme or extra data package.

Install

slow-coffee needs the GObject introspection runtime (GTK 3 + Ayatana AppIndicator). On a tray that hides AppIndicators (e.g. vanilla GNOME), enable the AppIndicator support extension.

Arch (AUR)

yay -S slow-coffee          # or: paru -S slow-coffee

Debian / Ubuntu (.deb)

Grab slow-coffee_*.deb from the latest release and:

sudo apt install ./slow-coffee_1.0.0_all.deb

pip (PyPI)

The GIR libraries come from your distro, the rest from pip:

# Debian/Ubuntu
sudo apt install python3-gi gir1.2-gtk-3.0 gir1.2-ayatanaappindicator3-0.1
# Fedora
sudo dnf install python3-gobject gtk3 libayatana-appindicator-gtk3

pip install --user slow-coffee
slow-coffee --install-desktop      # add it to your applications menu (no root)

From source

git clone https://github.com/PLNech/slow-coffee
cd slow-coffee
sudo make install                  # PREFIX=/usr/local by default

Usage

Run slow-coffee (or launch Slow Coffee from your applications menu). The cup appears in the tray, already caffeinated. Click it for the menu:

Item Does
Activate / Deactivate Toggle the inhibitor by hand
Indefinitely / 30 min / 1 h / 2 h Pick a duration; it auto-stops when time is up
About / Quit The usual
slow-coffee                  # start caffeinated, forever
slow-coffee --minutes 90     # caffeinated for 90 minutes, then off
slow-coffee --start-inactive # start decaf; toggle on from the tray
slow-coffee --install-desktop --autostart   # menu entry + start at login
slow-coffee --uninstall-desktop             # undo the above

How it works

slow-coffee asks the session to not go idle, preferring whatever is actually running and falling back gracefully:

  1. org.gnome.SessionManager.Inhibit (flag 8, idle) - GNOME. X11 verified; GNOME-Wayland expected but untested by the author.
  2. org.freedesktop.ScreenSaver.Inhibit - KDE and other freedesktop shells.
  3. systemd-inhibit --what=idle - logind fallback for bare window managers.

It holds one persistent session-bus connection and releases the inhibitor on quit. It does not add the "suspend" flag, so lid-close still sleeps. Wayland note: the idle-inhibit protocol is per-surface, so a global manual inhibitor is shell-dependent; under GNOME the SessionManager call covers it, under wlroots your mileage varies and the systemd-inhibit fallback handles sleep.

Prior art

This is an independent implementation, written from scratch, but it stands on the shoulders of two lovely projects worth knowing:

  • caffeine by Reuben Thomas - the classic fullscreen-auto daemon + manual indicator (GPL-3, X11).
  • caffeine-ng by Hugo Barrera - the modern rewrite with presentation-mode and audio awareness.

slow-coffee differs by being on by default, using D-Bus inhibition (rather than an unmapped X window), shipping as a single self-contained package, and living under MIT.

Development

python3 -m slow_coffee            # run from a checkout (needs system PyGObject)
python3 make_icons.py             # regenerate the cup icons (needs Pillow)
/usr/bin/python3 docs/render_menu.py docs/menu.png   # re-render the screenshot

License

MIT (c) 2026 PLNech.

Metadata

Release files for slow-coffee 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slow-coffee 1.0.0
File Size Uploaded
slow_coffee-1.0.0.tar.gz 22.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for slow-coffee 1.0.0
File Interpreter ABI Platform
slow_coffee-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 42.9 kB

Release files / slow_coffee-1.0.0.tar.gz

Download URL slow_coffee-1.0.0.tar.gz
Size 22.5 kB
Tags Source
SHA-256 checksum
How to use checksums
eff0fd223ad590a4225c238e2826df05e9a149e0c4072e30dc5d58d2b1a9cd21
BLAKE2b-256 checksum
How to use checksums
d62ab3aa01a1b21e8d28d1ca5db8fee0d026d6e02f92965695db075de9184f61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.

Transparency log

Release files / slow_coffee-1.0.0-py3-none-any.whl

Download URL slow_coffee-1.0.0-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
17b12ca4bc7be7ecb82ea86682d83473105c87044517d3aa2cd801b8ef17f4f6
BLAKE2b-256 checksum
How to use checksums
c247ea03844fad638294da5b808e193efdae496aa61ce3cf1826b61e51fb010c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page