Overview
Nexa Coffee is a tray (menu bar) timer that keeps your PC awake for a set period. Pick a duration from the menu, and for that time it prevents the screen saver, display turn-off, sleep, and hibernation, while the tray icon shows the remaining time as a number and a ring. When the time is up, it releases the sleep prevention on its own and returns to idle.
It is a tool for those moments when you “just want to keep the PC awake for a while” — long downloads or builds, presentations, remote sessions — without changing your power settings.
- Three operating systems — works on Windows, macOS, and Linux with the same menu and the same icon.
- Extremely lightweight — written in pure C (Objective-C on macOS only) with no external libraries. As of v0.1.2, the Windows x64 executable is about 30KB (30,208 bytes) and needs no .NET or VC++ redistributable.
- No windows — just a tray icon and a menu; a small input window appears briefly only when you enter a time manually.
- Four languages — English · 한국어 · 日本語 · 中文. It follows the OS language at first.
- Free and open source — MIT license. It collects no personal data and makes no network connections.
Note The app introduction page is at /apps/nexa-coffee. Source code and releases are in the GitHub repository.
System requirements
| OS | Requirements | Notes |
|---|---|---|
| Windows | Windows 10 or later · x64 or x86 (32-bit) | No additional runtime needed |
| macOS | macOS 11 Big Sur or later (for Homebrew installs) · universal for Intel and Apple Silicon | Shown only in the menu bar; no Dock icon |
| Linux | x86_64 · a desktop with a system tray (StatusNotifierItem) host | Static executable that does not depend on the distribution |
Additional requirements on Linux
- A tray host is required. KDE Plasma supports it out of the box; on GNOME, the AppIndicator extension (e.g. Ubuntu’s default AppIndicator extension) must be enabled for the icon to appear.
- The “Custom…” input window requires one of
yad,zenity, orkdialogto be installed (they are looked up in this order). If none is present, a notification asking you to install one appears instead of the input window. Preset durations (Unlimited, 12 hours, etc.) work without these tools.
Installation and removal
All installation files are on GitHub Releases, and you can verify downloaded files with the accompanying SHA256SUMS.txt.
Caution The current version is not code-signed. If you download and run it directly, Windows SmartScreen or macOS Gatekeeper may show a warning. Follow the OS-specific instructions below.
Installation channel status
Based on the repository documentation and a check of each channel (2026-10-12).
| Channel | Command | Status |
|---|---|---|
| Chocolatey (Windows) | choco install nexa-coffee | 0.1.2 approved |
| Homebrew Cask (macOS) | brew install --cask kiros33/tap/nexa-coffee | 0.1.2 |
| APT · DNF repository (Linux) | sudo apt install nexa-coffee / sudo dnf install nexa-coffee | 0.1.2 (repository registration required) |
| Homebrew Formula (Linux) | brew install kiros33/tap/nexa-coffee-portable | 0.1.2 |
| winget (Windows) | winget install SosomLab.NexaCoffee | Not yet listed — awaiting review (PR) |
Note winget will only find the package once the initial submission review is complete. Until then, use Chocolatey or the zip install on Windows.
Windows
Install with Chocolatey (recommended) — run in PowerShell with administrator privileges.
choco install nexa-coffee -y
- The executable matching your PC’s architecture is installed; on 64-bit Windows, you can launch it with the
nexa-coffee-x64command. - Upgrade:
choco upgrade nexa-coffee -y· Uninstall:choco uninstall nexa-coffee -y - A running Nexa Coffee is closed automatically before upgrading or uninstalling.
Install from zip
- Download
nexa-coffee-<version>-windows-x64.zipfrom Releases (-windows-x86.zipfor 32-bit Windows). - Extract it to any folder. It contains only
nexa-coffee-x64.exeandLICENSE. - Run
nexa-coffee-x64.exe. If a SmartScreen warning appears, click More info → Run anyway.
It is a portable program with no installation step, so to remove it, quit from the tray menu and delete the exe. To remove the settings as well, also delete the %APPDATA%\nexa-coffee folder.
winget (available once listed)
winget install SosomLab.NexaCoffee
Once listed, you will be able to launch it with the nexa-coffee command. To uninstall, use winget uninstall SosomLab.NexaCoffee.
macOS
Install with Homebrew (recommended)
brew install --cask kiros33/tap/nexa-coffee
- Because the app is unsigned, the Cask removes the macOS quarantine flag (
com.apple.quarantine) right after installation, so it launches without a warning. - Launch Nexa Coffee from the Applications folder and its icon appears in the menu bar.
- Upgrade:
brew upgrade --cask nexa-coffee - Uninstall:
brew uninstall --cask nexa-coffee— to remove the settings folder too, usebrew uninstall --zap --cask nexa-coffee
Install from zip
- Download
nexa-coffee-<version>-macos-universal.zipfrom Releases and extract it. - Remove the quarantine flag in Terminal.
xattr -dr com.apple.quarantine "Nexa Coffee.app"
- Move
Nexa Coffee.appto the Applications folder and launch it.
To uninstall, move the app to the Trash and, if needed, delete the ~/Library/Application Support/nexa-coffee folder.
Linux
APT repository (Debian · Ubuntu) — register the repository once, and from then on sudo apt upgrade keeps it updated.
sudo curl -fsSLo /usr/share/keyrings/sosomlab-archive-keyring.gpg https://pkg.sosomlab.com/sosomlab-archive-keyring.gpg
sudo curl -fsSLo /etc/apt/sources.list.d/sosomlab.sources https://pkg.sosomlab.com/apt/sosomlab.sources
sudo apt update
sudo apt install nexa-coffee
DNF repository (Fedora · RHEL · Rocky · AlmaLinux) — when the first installation asks whether to import the signing key, check that the fingerprint matches the one listed on pkg.sosomlab.com before accepting.
sudo curl -fsSLo /etc/yum.repos.d/sosomlab.repo https://pkg.sosomlab.com/rpm/sosomlab.repo
sudo dnf install nexa-coffee
When installed as a package, the executable goes to /usr/bin/nexa-coffee, and an app menu entry and icon are installed as well. To uninstall, use sudo apt remove nexa-coffee or sudo dnf remove nexa-coffee.
Note You can also install without the repository by downloading
nexa-coffee_<version>_amd64.debornexa-coffee-<version>-1.x86_64.rpmfrom Releases and runningsudo apt install ./filename.deb/sudo dnf install ./filename.rpm. In this case, it will not be updated automatically.
Homebrew (Linux)
brew install kiros33/tap/nexa-coffee-portable
Install from tar.gz (for your account only, no administrator privileges needed)
- Download
nexa-coffee-<version>-linux-x64.tar.gzfrom Releases and extract it. - Run the install script in the extracted folder.
./install.sh # install under ~/.local
./install.sh --autostart # install + launch automatically at login
The executable goes to ~/.local/bin/nexa-coffee and the app menu entry to ~/.local/share/applications/. To uninstall, run ./uninstall.sh in the same folder; it also removes the autostart entry but keeps the settings folder (~/.config/nexa-coffee).
Getting started
- Launch Nexa Coffee. No window opens; only an icon appears in the tray (the menu bar on macOS).
- It starts in the idle state. It does nothing, and your PC follows its usual power settings.
- Click the icon to open the menu and choose a duration (e.g. 2 hours).
- The icon changes to a colored ring and a number, and your PC stays awake for that time.
- When the time is up, it releases sleep prevention without any notification and returns to the idle icon. To stop early, choose Off from the menu.
Note Only one instance of Nexa Coffee runs at a time. If you launch it again while it is already running, the new instance simply exits.
Note Windows 11 puts new tray icons in the hidden overflow area (
^) at the right of the taskbar. To keep it always visible, turn onnexa-coffeeunder Settings → Personalization → Taskbar → Other system tray icons.
Reading the tray icon
| State | Icon appearance | Meaning |
|---|---|---|
| Idle | A single-color ring shaped like the app icon | Doing nothing (sleep prevention off) |
| Active | Thin outer border + a thick arc proportional to the remaining time + a number in the center | Preventing sleep. The arc shortens as time passes, and its end fades |
| Unlimited | Blue ∞ | Prevents sleep until you turn it off |
The number in the center is colored by unit. It is rounded down, with no decimals.
| Color | Unit | Shown when | Example |
|---|---|---|---|
| Purple | Days | 24 hours or more remaining | 2 days 5 hours left → 2 |
| Green | Hours | 1 hour or more but less than 24 hours | 11 hours 59 minutes left → 11 |
| Orange | Minutes | 1 minute or more but less than 1 hour | 45 minutes 30 seconds left → 45 |
| Red | Seconds | Less than 1 minute | 30 seconds left → 30 |
| Blue | Unlimited | When Unlimited is selected | ∞ |
Hovering over the icon shows the status in a tooltip, such as Nexa Coffee — 2 hours left (Nexa Coffee — Idle while idle). The exact remaining time is shown on the top line of the menu.
Using the timer
Starting with a preset duration
Choose one of Unlimited · 12 hours · 6 hours · 2 hours · 1 hour · 30 minutes from the menu to start right away. The currently running item has a check mark.
- If you choose a different duration while running, it starts over with that duration (it is not added to the remaining time).
- Unlimited continues until you click Off or quit the app.
Starting with a custom duration (Custom…)
- Choose Custom… from the menu.
- Enter days · hours · minutes in the single-line input window and click Start.
- The values you enter are remembered and prefilled the next time you open the input window. While running, the menu item shows the duration you set, e.g.
Custom… (1d 2h 30m).
| Field | Range |
|---|---|
| Days | 0 – 99 |
| Hours | 0 – 23 |
| Minutes | 0 – 59 |
- Out-of-range values are clamped to the range (e.g. entering 30 for hours gives 23).
- If all three fields are 0, the timer does not start.
- The input window looks different on each OS: a small dialog on Windows, a panel window on macOS, and on Linux the window of whichever of
yad/zenity/kdialogis installed.
Stopping and quitting
- Off — stops the timer and releases sleep prevention immediately. The app stays in the tray.
- Quit — releases sleep prevention and exits the app completely.
Note A running timer does not resume when you relaunch the app. If you want the PC kept awake for a set time as soon as the app starts, use Auto-start on launch below.
Menu and options
Left- or right-clicking the tray icon opens the same menu (on macOS, click the menu bar icon).
| Menu item | Description |
|---|---|
| (Top line) Remaining time | Shows the remaining time in the format 0 days 12 hours 50 minutes 3 seconds. Updates every second while the menu is open. Shows Idle while idle, and Unlimited · preventing sleep when unlimited |
| Unlimited · 12 hours · 6 hours · 2 hours · 1 hour · 30 minutes | Starts sleep prevention for that duration immediately |
| Custom… | Starts with days, hours, and minutes you enter |
| Off | Stops the timer |
| Auto-start on launch ▸ | Off / Custom… — sets whether the timer starts automatically when the app launches |
| Language ▸ | English / 한국어 / 日本語 / 中文 |
| About Nexa Coffee… | Shows the version and license |
| Quit | Exits the app |
Auto-start on launch
Choosing Auto-start on launch ▸ Custom… opens the same days/hours/minutes input window, with the button changed to Save. Once saved, the timer starts immediately with that duration every time the app launches from then on. While it is set, the menu shows it, e.g. Auto-start on launch (2h).
- To turn it off, choose Auto-start on launch ▸ Off (saving 0 days 0 hours 0 minutes has the same effect).
- This option “turns on the timer when the app launches.” To launch the app itself at login, you need to set up Launch at login separately. Using both together gives you “keep the PC awake for N hours automatically after logging in.”
Language
At first, the app follows the OS language (Korean, Japanese, or Chinese; English otherwise). Choosing one under Language ▸ changes the menu, tooltip, and input window immediately, and the choice is saved in the settings.
Note Chinese is shown in Simplified Chinese only. In the English menu, the remaining time uses the plural only for values greater than 1 (e.g.
0 days 2 hours 1 minute 5 seconds).
Keyboard shortcuts
There are no global shortcuts. Everything is done from the tray (menu bar) menu.
Settings and data location
Settings are stored in a single text file (config). The lock file in the same folder is used to prevent multiple instances (macOS and Linux).
| OS | Settings file |
|---|---|
| Windows | %APPDATA%\nexa-coffee\config |
| macOS | ~/Library/Application Support/nexa-coffee/config |
| Linux | ~/.config/nexa-coffee/config (if XDG_CONFIG_HOME is set, nexa-coffee/config under it) |
Only three things are stored.
auto=0,2,0
custom=1,2,30
lang=ko
| Key | Meaning |
|---|---|
auto | Auto-start on launch duration (days,hours,minutes). 0,0,0 means off |
custom | The last custom duration you entered (days,hours,minutes) |
lang | The language chosen in the menu (en, ko, ja, zh). If you have never chosen a language, this line is absent and the OS language is used |
Nothing is written to the Windows registry. To reset the settings, quit the app, delete this file, and launch it again.
Launch at login
Nexa Coffee does not register itself to launch at login. If you need it, set it up once for your OS.
Windows
- Press
Win+Rand entershell:startupto open the Startup folder. - Put a shortcut to
nexa-coffee-x64.exe(right-click the exe → Create shortcut) in this folder.
If you installed with Chocolatey, the target file is %ChocolateyInstall%\lib\nexa-coffee\tools\nexa-coffee-x64.exe. To disable it, delete the shortcut you added.
macOS
Add Nexa Coffee.app under System Settings → General → Login Items.
Linux
- If you installed from tar.gz,
./install.sh --autostartcreates~/.config/autostart/nexa-coffee.desktopfor you. To disable it, delete that file or run./uninstall.sh. - If you installed the APT or DNF package, copy the app menu entry into the autostart folder.
mkdir -p ~/.config/autostart
cp /usr/share/applications/nexa-coffee.desktop ~/.config/autostart/
Note It is fine if Nexa Coffee starts before the tray host (a GNOME extension, etc.) right after login. When the host appears later or restarts, the app registers its icon again (from v0.1.2). In v0.1.1 and earlier, the app crashed in this situation, so please use the latest version.
Troubleshooting
The tray icon doesn’t appear
- Windows 11: it may be in the hidden overflow area (
^). Turn it on under Other system tray icons as described in Getting started. - Linux GNOME: the icon is not shown if the AppIndicator extension is disabled. Enabling the extension makes the icon of the running app reappear (v0.1.2 or later).
- If it is already running, a second launch exits silently. Check whether it is running with Task Manager or
ps.
My PC sleeps when I close the lid, even though time is left
Each OS handles closing the lid (the laptop cover) differently.
| OS | When the lid is closed | To prevent it |
|---|---|---|
| Windows | Nexa Coffee cannot prevent it (the power policy takes precedence) | Change the “When I close the lid” action in Power Options, or run the administrator command powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS LIDACTION 0 (when plugged in · apply with powercfg /setactive SCHEME_CURRENT) |
| macOS | Cannot be prevented (the OS forces sleep) | sudo pmset -a disablesleep 1 — this is a system-wide setting, so revert it with sudo pmset -a disablesleep 0 when you are done |
| Linux | Prevented (requests logind to block the lid switch) | No extra setup needed |
Caution The Windows and macOS commands above change the system power settings themselves, independently of Nexa Coffee. Use them only when needed and restore the original settings afterward.
On Linux, clicking “Custom…” doesn’t open the input window
The input window uses whichever is installed, in the order yad → zenity → kdialog. If none is installed, only a “no tool available to show the input window” notification appears. Install one from your distribution’s packages (e.g. sudo apt install zenity). If you installed the APT or DNF package, one is usually installed along with it as a recommended dependency (Recommends).
Antivirus blocks the executable on Windows
There was a case where the 32-bit (x86) zip of v0.1.0 was falsely flagged (Trojan:Win32/Tecabans.STV!cl) by Microsoft Defender’s cloud scan. Starting with v0.1.1, version information was added to the executable to mitigate this. Use the latest version, and if it is still blocked, check with SHA256SUMS.txt that the file matches the official release, then add it to your antivirus exceptions.
On macOS, an “unidentified developer” warning appears
This happens because of the quarantine flag when you download the zip directly. Run xattr -dr com.apple.quarantine "/Applications/Nexa Coffee.app" in Terminal and open the app again. Installing with Homebrew handles this automatically.
I want to check that sleep prevention is actually in effect
| OS | Command to check | What you see while active |
|---|---|---|
| Windows | powercfg /requests (administrator command prompt) | nexa-coffee under the DISPLAY and SYSTEM entries |
| macOS | pmset -g assertions | PreventUserIdleSystemSleep · PreventUserIdleDisplaySleep |
| Linux | systemd-inhibit --list | A sleep:idle:handle-lid-switch inhibitor entry |
Version history
Version summary
- v0.1.2 (2026-09-26) — Linux stability fix (crash when the tray host restarted) · launch at login on Linux · handling display scale changes on Windows
- v0.1.1 (2026-09-17) — Version information added to the Windows executable (mitigates antivirus false positives)
- v0.1.0 (2026-09-13) — First public release
v0.1.2 — 2026-09-26
Fixed
- Linux: crash when the tray host started later than the app — occurred when auto-launching right after login, restarting GNOME Shell, or enabling the AppIndicator extension later (v0.1.0, v0.1.1). The app now registers its icon again when the host appears or restarts.
- Linux: app not appearing in the app menu after installation —
install.shnow writes the executable path as an absolute path and refreshes the existing icon cache if there is one. - Windows: tray icon stayed at the old size when the display scale was changed while idle — the icon is now redrawn for the current scale when the scale or display changes.
Improved
- Linux: sharper numbers in the GNOME panel — a 16px icon is now sent as well, so it is not blurred by downscaling.
- Linux: launch at login — register with
./install.sh --autostart;./uninstall.shremoves it as well.
Changed
- Added Linux
.deband.rpmpackages to the release, and the app can now also be installed from the APT and DNF repository (pkg.sosomlab.com) (added 2026-10-09; the program itself is the same).
v0.1.1 — 2026-09-17
Improved
- Added version information (the version in file properties) to the Windows executable — mitigates the issue where the 32-bit zip of v0.1.0 was falsely flagged by Microsoft Defender’s cloud scan. No functional changes.
v0.1.0 — 2026-09-13
Added
- Sleep prevention timer — Unlimited · 12 hours · 6 hours · 2 hours · 1 hour · 30 minutes · Custom (days, hours, minutes). While running, it prevents the screen saver, display turn-off, sleep, and hibernation, and releases automatically when the time is up.
- Remaining-time icon — an arc proportional to the remaining time and a number colored by unit (days purple · hours green · minutes orange · seconds red · unlimited blue ∞). Drawn pixel-identically on all three OSes.
- Remaining time on the top line of the menu — in the format
0 days 12 hours 50 minutes 3 seconds, updated every second. - Auto-start on launch — starts the timer with a saved duration as soon as the app launches.
- Language selection — English · 한국어 · 日本語 · 中文, defaulting to the OS language.
- About window and duplicate-instance prevention.
- Installation channels — GitHub Releases (Windows x64 and x86 zip, macOS universal zip, Linux x64 tar.gz), Homebrew, Chocolatey.
Known limitations
- No code signing — Windows SmartScreen and macOS Gatekeeper warnings may appear.
- Closing the lid — Nexa Coffee alone cannot prevent sleep on Windows and macOS (see Troubleshooting).
- Not listed on winget —
winget installwill not work until the initial submission review is complete. - No menu option to launch at login — you need to register it yourself for each OS (see Launch at login).
- Timer state is not resumed — relaunching the app starts in the idle state (or with the “Auto-start on launch” duration).
- No notification at the end — when the time is up, it quietly returns to idle.
- Linux — only x86_64 is provided, and the icon is not shown in environments without a tray host (such as GNOME with the AppIndicator extension disabled). Verification on a real KDE Plasma environment is not yet complete.
- Languages — Chinese is Simplified only, and the Japanese and Chinese text has not yet been reviewed by native speakers.
- macOS screen saver — the screen saver is prevented by signaling user activity, and testing across all screen saver settings is still in progress.