Summary
Add an opt-in System Monitor module that shows compact CPU and RAM usage in the GNOME top panel, similar to Vitals-style text:
CPU 23% RAM 8.1G
Clicking the indicator opens a details menu (overall CPU %, used/total RAM, and swap when available). GPU usage and temperatures are out of scope for the first version; they should be follow-up work only if they can be read from sysfs without spawning processes.
The module must follow Aurora’s module contract: Shell-free manifest, factory in registry.ts, GSettings keys, reversible enable()/disable(), and rows in the module reference / README.
Motivation
Vanilla GNOME has no always-visible CPU/RAM readout. Users currently stack a second extension (Vitals, system-monitor) next to Aurora. Aurora already owns panel status items (lock-key-indicators, weather clock, tray icons). A first-party, opt-in indicator would cover that everyday gap without another extension.
Proposed UX
- Placement:
Main.panel.addToStatusArea(..., 'right'), same family as lock-key-indicators.
- Compact labels, not emoji. No fake “loading…” ASCII meters; use
St.Label / BarLevel if a meter is needed in the menu.
- Polling:
GLib.timeout_add_seconds, default 2s, user-configurable (e.g. 1–10). Remove the source in disable().
- Missing data: hide that metric; do not invent values.
Data sources (v1, no subprocess)
| Metric |
Source |
Notes |
| CPU % |
/proc/stat |
Delta of cpu aggregate between polls |
| RAM |
/proc/meminfo |
Prefer MemAvailable; show used and total |
Read with Gio.File + cancellable, not cat/free/top. Parse in Shell-free TypeScript so Node unit tests can cover it.
Prefs (suggested)
- Master switch
module-system-monitor — off
- Show CPU / show RAM (switches)
- Refresh interval (spin)
- RAM format:
8.1G vs 45% (select)
Alternatives considered
- Rely on Vitals / system-monitor — works, but fights Aurora’s “one extension” goal and can clash on the panel.
- Ship GPU + temperature in v1 — NVIDIA often needs
nvidia-smi; Aurora/EGO strongly discourage subprocesses in the Shell process. CPU and RAM can be read from /proc/stat and /proc/meminfo via Gio.File.
- Enable by default — docs say new modules are opt-in unless product explicitly wants them on.
- Graphs or icon-only — denser UI, more CSS/a11y work; compact text is enough for v1.
Follow-up (not this issue)
- GPU from sysfs only (
/sys/class/drm/.../gpu_busy_percent, Intel equivalents). Hide if absent. No nvidia-smi.
- Temperature from
/sys/class/hwmon / /sys/class/thermal. Hide if absent.
Implementation sketch
src/panel/systemMonitor/ — systemMonitor.manifest.ts, parser, module, SCSS
- Catalog section
dock-panel; register in moduleCatalog.ts + registry.ts
- Schema keys in
data/schemas/org.gnome.shell.extensions.aurora-shell.gschema.xml
- Unit tests for
/proc parsing; Shell test for panel actor + teardown
- Docs:
docs/module-reference.md, README module list, .po after just i18n update
Acceptance
- Disabled by default; no panel widget until enabled
- With the module on:
CPU …% and RAM … update on the interval
- Details menu opens on click
- Disable removes the button and the timeout
just validate, unit tests, targeted Shell test, just shexli pass
- No subprocess, no GTop/lib dependency, no telemetry
EGO / Aurora constraints
- No work at import/construct time; poll only after
enable()
- No GTK in Shell; no emoji icons
- Do not claim GPU/temp until those sources exist
Summary
Add an opt-in System Monitor module that shows compact CPU and RAM usage in the GNOME top panel, similar to Vitals-style text:
CPU 23% RAM 8.1GClicking the indicator opens a details menu (overall CPU %, used/total RAM, and swap when available). GPU usage and temperatures are out of scope for the first version; they should be follow-up work only if they can be read from sysfs without spawning processes.
The module must follow Aurora’s module contract: Shell-free manifest, factory in
registry.ts, GSettings keys, reversibleenable()/disable(), and rows in the module reference / README.Motivation
Vanilla GNOME has no always-visible CPU/RAM readout. Users currently stack a second extension (Vitals, system-monitor) next to Aurora. Aurora already owns panel status items (
lock-key-indicators, weather clock, tray icons). A first-party, opt-in indicator would cover that everyday gap without another extension.Proposed UX
Main.panel.addToStatusArea(..., 'right'), same family aslock-key-indicators.St.Label/BarLevelif a meter is needed in the menu.GLib.timeout_add_seconds, default 2s, user-configurable (e.g. 1–10). Remove the source indisable().Data sources (v1, no subprocess)
/proc/statcpuaggregate between polls/proc/meminfoMemAvailable; show used and totalRead with
Gio.File+ cancellable, notcat/free/top. Parse in Shell-free TypeScript so Node unit tests can cover it.Prefs (suggested)
module-system-monitor— off8.1Gvs45%(select)Alternatives considered
nvidia-smi; Aurora/EGO strongly discourage subprocesses in the Shell process. CPU and RAM can be read from/proc/statand/proc/meminfoviaGio.File.Follow-up (not this issue)
/sys/class/drm/.../gpu_busy_percent, Intel equivalents). Hide if absent. Nonvidia-smi./sys/class/hwmon//sys/class/thermal. Hide if absent.Implementation sketch
src/panel/systemMonitor/—systemMonitor.manifest.ts, parser, module, SCSSdock-panel; register inmoduleCatalog.ts+registry.tsdata/schemas/org.gnome.shell.extensions.aurora-shell.gschema.xml/procparsing; Shell test for panel actor + teardowndocs/module-reference.md, README module list,.poafterjust i18n updateAcceptance
CPU …%andRAM …update on the intervaljust validate, unit tests, targeted Shell test,just shexlipassEGO / Aurora constraints
enable()