Skip to content
 
 

Repository files navigation

Omastorm

Open-source, live NEXRAD radar for the Omarchy desktop. Beta.

Omastorm window: live take with loop, search, keys, and treatments

Live KJAX demo: playback, pan and zoom, treatments, weak returns, station search, and keyboard controls.

A radar that lives in your bar. The popover shows the station nearest you with the actual scan time. Expand it for the full window: every NEXRAD site in the network, reflectivity at native resolution, a timeline you can scrub, all drawn in your Omarchy theme.

The Omastorm window, live

The Omastorm popover, live

A headless Rust engine fetches and decodes NEXRAD Level II data and prepares GPU-ready radar textures. An Omarchy plugin built with Quickshell/QML is the client: it displays those textures in the bar popover and full window.

Features

  • Live. A Rust engine polls NOAA's public Level II feed and sweeps paint as the antenna turns. Stale data says it is stale.
  • Every site. Pan the map and it follows the nearest station, or search by id, city, or state.
  • Timeline. Up to 60 scans per station, cached locally. Play, step, scrub.
  • Three treatments. Glyphs, Pixels, and Stipple sample the same gate and paint the cell differently.
  • Native. Colors, font, and spacing come from the active Omarchy theme and change with it.
  • Keyboard first. Everything the pointer reaches is a keystroke, and every key is rebindable.
  • Honest. Actual scan times. Missing, range-folded, and below-threshold returns are drawn distinctly from measured values. Displays individual radar sweeps.

Install

Omarchy 4 on x86_64 and aarch64.

omarchy plugin add https://github.com/wesleygrimes/omastorm.git --enable

This clones the plugin into ~/.config/omarchy/plugins/com.omastorm.radar and asks which bar section to use. The first time the popover opens it downloads the pinned engine binary from this repository's GitHub Releases, verifies its sha256 against engine/release.pin, and installs it under ~/.local/share/omastorm/bin. Runtime files, cached data, remembered view state, and configuration stay inside Omastorm's own directories.

On first use, Omastorm uses your Omarchy weather location when available; otherwise it prompts you to search for a place or enter coordinates. To set a fixed launch location, including during agent-assisted installation, see configuration and remembered state.

To open the window from the keyboard, add one line to ~/.config/hypr/bindings.lua. Omastorm never writes that file.

o.bind("SUPER + SHIFT + R", "Omastorm", "omarchy shell shell toggle com.omastorm.radar '{}'")

To list Omastorm in the app launcher:

bash ~/.config/omarchy/plugins/com.omastorm.radar/scripts/install-launcher.sh

Update with omarchy plugin update com.omastorm.radar.

Use

Click the mark in the bar for the popover: the map at your location, LIVE or the connection condition, the actual scan time, step and play, and EXPAND. If no location is known, the popover offers “Choose a location,” which opens the picker in the window. Click the radar or press Enter for the window; it opens on the same station, frame, and camera. Closing preserves your view for the next launch.

In the window, drag to pan and scroll to zoom. The map follows the nearest station as you pan unless you lock it; a locked radar stays put even when the camera leaves its coverage. A station you arrive at fetches its last dozen scans, so there is a loop to play within a few seconds; the cache then grows to 60 as new scans arrive. The status slot shows the age of the frame on screen: LIVE, STALE after ten minutes, UNAVAILABLE or OFFLINE when the feed cannot be reached, with cached frames kept.

Key Action
h j k l or arrows Pan
+ - Zoom
0 Reset to the configured or weather location
/ or s Search sites (center and lock)
n Nearest site
Shift+L Lock the station
Shift+H Choose a location
Space Loop the frames
[ ] Step a frame
Home End Oldest or newest frame
1 2 3 Pixels, Glyphs, Stipple
w Show weak returns
? Keys sheet
Esc Close

Measured returns under 5 dBZ (insects, birds, ground clutter on a clear day) are hidden by default and the legend says so; w shows them.

Configuration

~/.config/omastorm/config.toml holds deliberate preferences. The app saves last map center, zoom, and UI radar lock separately in $XDG_STATE_HOME/omastorm/state.json (default ~/.local/state/omastorm/state.json). Navigation never rewrites your config. Shift+H, or LOCATION, opens the location picker; it writes state, not config.

Explicit center coordinates win on every launch. Without them, Omastorm restores your last view, then falls back to the weather location or location picker. Radar selection is independent: a configured lock wins, otherwise a remembered lock is restored, otherwise the nearest radar follows the map.

# Optional: always open here. Omit both to remember the last map position.
center_lat = 36.23708
center_lon = -79.97948
# locked_radar = "KFCX" # optional radar override; coordinates do not imply a lock

treatment = "GLYPHS" # PIXELS, GLYPHS, or STIPPLE at launch
weak_floor = 5       # dBZ; false draws every measured return

[keys]
pan_left = "h Left"
zoom_in = "+ ="

A bad value is named in the status slot and that setting stays on its default. Every action name, the key syntax, and what each setting does are in docs/configuration.md.

Troubleshooting

If expand or the keybind does nothing after omarchy plugin update, the shell still has the previous QML types. Restart it:

omarchy restart shell

The engine runs as one shared daemon per login. Its log is $XDG_RUNTIME_DIR/omastorm/engine.log (usually /run/user/<uid>/omastorm/). If the popover says the engine could not be installed, the download or its sha256 check failed; the reason is in bootstrap.log in the same directory, and opening the popover again retries. To restart the engine by hand:

~/.local/share/omastorm/bin/omastorm-engine stop

The next popover or window starts it again. Please attach both logs to a bug report.

Remove

omarchy plugin remove com.omastorm.radar
~/.local/share/omastorm/bin/omastorm-engine stop
rm -rf ~/.local/share/omastorm ~/.cache/omastorm ~/.local/state/omastorm
rm -rf ~/.config/omastorm                            # your config.toml; keep it to reinstall later
rm -f ~/.local/share/applications/omastorm.desktop   # if you added the launcher entry

Then delete the o.bind line if you added one.

Feedback

This is a beta. Bugs, rough edges, and ideas go to GitHub issues.

Data and licenses

Radar: NOAA NEXRAD Level II via the NOAA Open Data program on AWS. Basemap: © OpenStreetMap contributors, ODbL, tiles by OpenFreeMap; Natural Earth, public domain. Location search: GeoNames, CC BY 4.0. Code: MIT, see LICENSE.

Contributing

This is a beta. Contributions are welcome. CONTRIBUTING.md is setup, checks, and pull requests. Open work that is ready for a first patch is labeled good first issue and help wanted.

A headless Rust engine serves GPU textures over a Unix socket. The Quickshell UI is the client. manifest.json is the Omarchy plugin.

  • engine/ Rust daemon: NEXRAD decode, cache, and the socket protocol
  • ui/ Quickshell QML for the bar popover and window
  • scripts/ setup, checks, captures, install, and release
  • data/ fixture provenance, checksums, and vendored archives (data/raw/ is extracted)
  • golden/ decoder answer key for the archived KTLX scan
  • docs/ protocol, configuration, and releasing
  • site/ omastorm.com

Read DESIGN.md before proposing a product change and docs/protocol.md before touching the engine/client boundary. Maintainers cut releases with docs/RELEASING.md.

About

An Omarchy-native NEXRAD radar viewer built with Rust and Quickshell.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages