NVIDIA Hybrid for the Omarchy bar
GPU utilization, memory, temperature and clock in the bar — and on a hybrid laptop, the thing PRIME render offload otherwise hides: whether the discrete card is actually rendering right now, and which GPU the next app you launch will use.
Built for the Omarchy shell. One nvidia-smi call every
two seconds, no daemon, no root, nothing that ever prompts you for a password.
Install · Using it · How it works · From the terminal · Report a bug
<img src="docs/panel-states.png" alt="The panel, asleep and rendering" width="520"> </div>A fork. This started as dimapanov/omarchy-nvidia — the meters, the bar glyph and the
nvidia-smiplumbing are that project's work, and it is MIT, so this one is too. Everything under hybrid laptops was added here and offered upstream first.
Requirements
- Omarchy with the Quickshell-based shell (
omarchy pluginavailable) - An NVIDIA GPU with the proprietary driver, and
nvidia-smionPATH lspci(pciutils) — only for the hybrid features; without it the widget quietly leaves them out- Developed and measured on Omarchy 4.x / Hyprland 0.56.2, GeForce MX150 + Intel UHD 620
Install
omarchy plugin add https://github.com/nenadjokic/omarchy-nvidia-hybrid.git --enable
omarchy restart shell
The restart matters: a new bar widget is not picked up by hot-reload, only by a shell restart.
Place it wherever you like:
omarchy bar move nenadjokic.nvidia-hybrid --after omarchy.cpu
Note omarchy bar move has no --before; it will print "Moved" and do nothing.
Using it
In the bar — the NVIDIA glyph with the current temperature, 41°. Click
it for the panel.
The meters — utilization, memory, temperature, and power. On cards that
report no power telemetry the last meter becomes CORE CLOCK instead of
sitting dead at 0 W; GP10x parts such as the MX150 return [N/A] for both
power.draw and power.limit.
On a hybrid laptop
With a second, non-NVIDIA display device present, the widget answers the question offload leaves invisible — is the discrete card doing anything?
<div align="center"> <img src="docs/bar-states.png" alt="The bar glyph, asleep and rendering" width="300"> </div>- The bar glyph is dimmed while the card sleeps, and switches to the theme's urgent colour with a slow breathing pulse the moment it starts rendering.
- ACTIVE RENDERER — two pills naming both GPUs, the live one lit.
- GPU FOR NEW APPS —
AUTO/INTEL/NVIDIA, applied to everything you launch from that point on.
None of this appears on a single-GPU machine; there the widget is just the meters.
How it works
Detecting that the card is busy takes three signals OR'd together, because not one of them is trustworthy alone:
| Signal | Why it is not enough by itself |
|---|---|
--query-compute-apps |
Never lists OpenGL clients — only Vulkan and CUDA |
utilization.gpu |
Reads 0% under a light Vulkan load |
clocks.current.graphics |
Stays boosted for ~4 s after the last client exits |
So the clock only counts as activity when VRAM is allocated too, and the idle VRAM floor is learned at runtime rather than assumed — a card that also drives a display sits at hundreds of MiB, not the ~1 MiB of a pure offload target, and would otherwise read as busy forever. The drop back to idle is debounced over three polls so a game rendering one quiet frame does not make the glyph flicker.
Choosing the GPU for new apps sets the PRIME offload variables in the
systemd user environment. Omarchy starts applications through uwsm-app, as
transient systemd user units, so they inherit that environment — which is why
this needs no root and no session restart. Already-running apps and the
compositor keep whatever GPU they started on.
AUTO forces nothing, and that is not the same as "the system decides":
Linux has no per-application GPU arbitration. Worth knowing on Omarchy
specifically, because it already exports __GLX_VENDOR_LIBRARY_NAME=nvidia by
default, so OpenGL apps go to the dGPU whether or not you expected them to.
AUTO restores the value your session actually started with, recorded once
before any mode is applied, rather than inventing a default.
The chosen mode is written to ~/.config/environment.d/95-omarchy-gpu-mode.conf
so it survives a reboot. auto deletes that file again.
From the terminal
The GPU selector is a plain script, so it works from a keybinding or a shell — handy for launching one game on the discrete card without leaving the mode set:
scripts/gpu-mode status # auto | intel | nvidia
scripts/gpu-mode nvidia # force OpenGL and Vulkan onto the dGPU
scripts/gpu-mode intel # keep the dGPU out of it entirely
scripts/gpu-mode auto # force nothing
scripts/gpu-mode path # where the persistent setting is written
About AMD
Not supported, and the README would rather say so than imply otherwise. The
telemetry lives in NvidiaSource.qml behind a documented
property contract precisely so a second vendor can be added as a sibling file
instead of a rewrite — and amdgpu needs no process at all, publishing the same
figures as files under /sys/class/drm/cardN/device.
What is missing is not code but a card. The activity heuristic above was arrived at by measuring a real MX150, and shipping a guessed-at version of it for hardware nobody here can test would undo the one thing that makes this widget worth having. If you have a Radeon and want this, open an issue — that is the missing half.
Remove
omarchy plugin remove nenadjokic.nvidia-hybrid
rm -f ~/.config/environment.d/95-omarchy-gpu-mode.conf
omarchy restart shell
The second line matters only if you left the selector on something other than
AUTO; without it, that choice keeps applying at every login.
Support the developer
This widget is free, with no ads and no tracking. If it earns a place in your bar, a coffee genuinely helps and means a lot.
<div align="center"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?style=for-the-badge&logo=buymeacoffee&logoColor=black" alt="Buy Me a Coffee"> <img src="https://img.shields.io/badge/PayPal-0070BA?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal">
</div>Credits
Original widget by dimapanov — the meters,
the bar glyph, the nvidia-smi query. Hybrid-GPU work and this fork by
nenadjokic.
License
MIT — see LICENSE. Copyright © 2026 Dima Panov and Nenad Jokić.