Omahub
← All plugins
A

Fan Control

by Abhay Kshatriya

nbfc-linux fan control with live animated fan art

Security review

Review recommended · 1 finding

Deterministic scan — not a security guarantee

Low
Risk level
Low
Analyzed commit
c7eda38
Scanned
1 month ago

Flagged patterns appear only in documentation files (README / docs) — descriptive examples, not executable code.

  • Docs sudo README.md:41

    Command runs with sudo, elevating the process beyond the plugin environment.

    sudo pacman -S nbfc-linux   # Arch

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

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

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

The plugin is a fan-control widget that runs `nbfc status` and `nbfc set` commands locally. It does not use sudo, download anything, or modify system files beyond the intended fan-speed changes, which require explicit user action. The only flagged item is a `sudo` command in the README's installation instructions, which is documentation and not part of the plugin's runtime behavior.

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/kshatriya-abhay/omarchy-nbfc-linux-plugin --enable
Hardware #quickshell #system

nbfc-linux Fan Control

An omarchy status-bar widget for controlling nbfc-linux fans — the Linux port of NoteBook FanControl. It shows each fan as ASCII art that spins faster as the fan speeds up (with the exact RPM printed below), and lets you switch between auto and manual control with staged edits that only reach the hardware when you press Save.

Fan Control panel

Features

  • Live fan art — every fan is drawn as ASCII art that oscillates between cross and X spokes to look like it's spinning; it spins faster as the fan's speed percent climbs (1–4 swaps/sec). The animation only runs while the panel is open. Current RPM is printed right underneath, with the temperature alongside
  • Auto / Manual mode — one tap back to nbfc's automatic control, or take over and pick a target speed yourself
  • Fan picker (Manual) — "All fans" or a specific fan (labels pulled from the fan names nbfc reports, e.g. "CPU fan" → "CPU"), each seeded with its current target speed
  • Percent slider (Manual) — set the target duty 0–100%
  • Staged changes — edits are never applied while you drag; a Save / Cancel row appears only once something has changed, and nothing touches the fans until you confirm. Save is themed as the primary (filled) action, Cancel as the secondary (bordered) one
  • Polling while open — status refreshes every 2 seconds while the panel is open, so the art and numbers stay live without hammering the CLI when closed
  • Service detection — if nbfc_service isn't reachable, the panel shows a warning banner and disables the controls instead of failing silently
  • Keyboard-navigable popup (j/k/h/l + Enter), matching omarchy's other panels

Prerequisites

  • nbfc-linux with the nbfc_service systemd service running:

    sudo pacman -S nbfc-linux   # Arch
    systemctl --user start nbfc_service
    
  • A config for your machine. nbfc ships configs for many laptops; pick one with nbfc config -a (list all) / nbfc config -c <name>, then apply with nbfc config -a or nbfc config -c <name>.

The widget drives nbfc through its set/status subcommands, so it needs the service socket (/run/nbfc_service.socket) to be accessible to your user. If nbfc is configured to require root for the socket, run the service with nbfc_service's --socket-access option or adjust the socket unit. (On Arch's default package the socket is world-writable, so no extra setup is needed.)

Requirements

  • Linux with nbfc-linux (nbfc_service running) and a config applied
  • omarchy (Quickshell-based shell, v4)

Installation

The repo root is the plugin (manifest.json with its Panel.qml entry point live at the top level, per the omarchy plugin layout), so it can be added like any other omarchy plugin.

From the UI: Omarchy Menu > Setup > Plugins > Add Plugin, then enter the repo URL.

From the CLI:

omarchy plugin add https://github.com/kshatriya-abhay/omarchy-nbfc-linux-plugin

Removal

From the UI: Omarchy Menu > Setup > Plugins, select Fan Control, then Remove.

From the CLI:

omarchy plugin remove kshatriya-abhay.nbfc

Removal just unloads the widget and deletes the plugin folder. It never touches nbfc, its config, or your fan settings — the fans keep whatever mode they were in (the same state nbfc status reports). To fully restore automatic control after removing the widget, run:

nbfc set -a

Dependencies

Dependency Why Notes
nbfc-linux Provides the nbfc CLI and nbfc_service the widget talks to Required, runtime
omarchy (Quickshell, v4) Host shell the widget runs in Required, runtime

There are no other runtime dependencies — the widget uses only the QML/JS built-ins that ship with omarchy (no bundled binaries, no install hooks, no remote calls).

Permissions

The widget is read-only with respect to your system: it only runs nbfc status (polling) and nbfc set (writes), and nbfc set is only invoked when you press Save — never automatically. It does not modify or overwrite any configuration file, and uninstalling it leaves no state behind.

Usage

Click the fan icon in the bar to open the panel:

  • Fans — read-only display at the top: each fan's animated ASCII art, its RPM, and temperature.
  • Mode — choose Auto (nbfc controls all fans) or Manual (you pick). In Auto, no further options are shown.
  • Fan (Manual only) — "All fans" sets every fan, or pick one specific fan; the slider seeds from that fan's current target speed.
  • Percent (Manual only) — the target duty 0–100%.
  • Save / Cancel — appears only after a change is staged. Save writes the pending mode/fan/percent to nbfc; Cancel throws the edits away and reverts to the applied state.

Roadmap

  • Animated fan art (oscillates between cross and X spokes, faster with speed)
  • Animation only runs while the panel is open
  • Auto / Manual mode with staged edits (Save / Cancel)
  • Per-fan picker with live target seeding
  • Percent slider with keyboard support
  • 2s polling while the panel is open
  • Service-unavailable warning banner (including "only works with nbfc-linux")
  • Config selection — pick among installed nbfc configs from the panel (not planned)

Known issues

  • Reading critical mode — nbfc reports Critical Mode Enabled in status, but the panel keeps it read-only for now; a fan stuck in critical mode is shown as-is rather than offering a control that could interfere.
  • Configs with many fans — the fan row lays out one card per fan; very wide configs (3+ fans) may crowd the panel width.

License

MIT — Copyright (c) 2026 Abhay Kshatriya