A take-your-time keep-awake indicator for your system tray - on by default.
Project description
☕ 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.
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-inactiveif 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:
org.gnome.SessionManager.Inhibit(flag8, idle) - GNOME. X11 verified; GNOME-Wayland expected but untested by the author.org.freedesktop.ScreenSaver.Inhibit- KDE and other freedesktop shells.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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slow_coffee-1.0.0.tar.gz.
File metadata
- Download URL: slow_coffee-1.0.0.tar.gz
- Upload date:
- Size: 22.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eff0fd223ad590a4225c238e2826df05e9a149e0c4072e30dc5d58d2b1a9cd21
|
|
| MD5 |
9f7e3aba2920161de23cee16971b5ec4
|
|
| BLAKE2b-256 |
d62ab3aa01a1b21e8d28d1ca5db8fee0d026d6e02f92965695db075de9184f61
|
Provenance
The following attestation bundles were made for slow_coffee-1.0.0.tar.gz:
Publisher:
release.yml on PLNech/slow-coffee
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slow_coffee-1.0.0.tar.gz -
Subject digest:
eff0fd223ad590a4225c238e2826df05e9a149e0c4072e30dc5d58d2b1a9cd21 - Sigstore transparency entry: 1948451957
- Sigstore integration time:
-
Permalink:
PLNech/slow-coffee@95fc8e5df1cb31a60980d9a303faa18d043ac95e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/PLNech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@95fc8e5df1cb31a60980d9a303faa18d043ac95e -
Trigger Event:
push
-
Statement type:
File details
Details for the file slow_coffee-1.0.0-py3-none-any.whl.
File metadata
- Download URL: slow_coffee-1.0.0-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b12ca4bc7be7ecb82ea86682d83473105c87044517d3aa2cd801b8ef17f4f6
|
|
| MD5 |
155d07b9567ab3e7b728cc091cfa8a8e
|
|
| BLAKE2b-256 |
c247ea03844fad638294da5b808e193efdae496aa61ce3cf1826b61e51fb010c
|
Provenance
The following attestation bundles were made for slow_coffee-1.0.0-py3-none-any.whl:
Publisher:
release.yml on PLNech/slow-coffee
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slow_coffee-1.0.0-py3-none-any.whl -
Subject digest:
17b12ca4bc7be7ecb82ea86682d83473105c87044517d3aa2cd801b8ef17f4f6 - Sigstore transparency entry: 1948452069
- Sigstore integration time:
-
Permalink:
PLNech/slow-coffee@95fc8e5df1cb31a60980d9a303faa18d043ac95e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/PLNech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@95fc8e5df1cb31a60980d9a303faa18d043ac95e -
Trigger Event:
push
-
Statement type: