Omahub
← All plugins
N

NVIDIA Hybrid

by nenadjokic

NVIDIA telemetry plus, on hybrid laptops, whether the dGPU is rendering and which GPU new apps use

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
ba602b5
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
ba602b5
Reviewed
1 month ago

The plugin is a transparent GPU monitoring and mode-switching widget. It reads from nvidia-smi and lspci, and modifies the user's systemd environment and a config file to control GPU selection for new apps. No malicious behavior, network access, or obfuscation was found.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/nenadjokic/omarchy-nvidia-hybrid --enable
Hardware #bar #quickshell #power-management
<div align="center">

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

Stars License Last commit Issues

Buy Me a Coffee PayPal

<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-smi plumbing 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 plugin available)
  • An NVIDIA GPU with the proprietary driver, and nvidia-smi on PATH
  • 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ć.