Live weather radar in your Omarchy bar. Beta.
A radar that lives next to the clock. The popover shows your selected radar and its actual scan time. Click the map (or press Enter) for the full window: individual NOAA NEXRAD sweeps in the U.S. and the EUMETNET OPERA European mosaic, drawn in your Omarchy theme.
This page is the user guide: install, first run, and everyday use. How the code is built lives in CONTRIBUTING.md.
Omarchy 4 on x86_64 and aarch64.
omarchy plugin add https://github.com/wesleygrimes/omastorm.git --enableThat clones the plugin, asks which bar section to use, and on first open
downloads the pinned engine from GitHub Releases, checks its sha256, and
installs it under ~/.local/share/omastorm/bin. Configuration, remembered
view, and cached scans stay in Omastorm's own directories.
Optional: a Hyprland key to toggle the window. 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 '{}'")Optional: list it in the app launcher:
bash ~/.config/omarchy/plugins/com.omastorm.radar/scripts/write-desktop-entry.shOpen the popover from the bar. If Omarchy weather already has a city, the map opens there. If not, you get a choice: pick a place, or use an approximate location.
Use approximate location is one click. It asks wttr.in to guess your city from the public IP of that request. Nothing is sent until you click; there is no GPS and no background tracking. A VPN or CGNAT may land you at the ISP instead of your house. Choose manually if the guess is wrong.
The view is remembered. Next time you open the popover, you are back where you left off.
U.S. radar comes from NOAA NEXRAD; European radar comes from EUMETNET OPERA. Coverage depends on radar range and the data available from each provider. Some areas have no radar data, even when their cities appear in search.
Watch the 24-second Europe demo.
Omastorm currently uses two radar products. In the U.S., NOAA NEXRAD provides individual radar volumes: each dish spins, sends a pulse, and measures how much bounced back. In Europe, EUMETNET OPERA provides a mosaic combining the strongest radar returns at each location.
For NEXRAD, Omastorm shows reflectivity on the lowest tilt: the beam that stays closest to the ground. OPERA combines multiple radars and elevations into one image.
Color is dBZ, not a rain rate and not a warning. Stronger return, warmer color. The legend under the map is that scale.
A bright blob is often rain or snow. Radar can also detect:
- insects, birds, and bats (especially on clear evenings)
- dust, smoke, and sea spray
- ground clutter and buildings near the dish
- anomalous propagation, when the beam bends and paints the ground far away
- wind farms, towers, and military chaff
Measured returns under 5 dBZ (the usual biological clutter and haze) are
hidden by default; the legend says so. Press w to show them.
These are observations, not forecasts or weather warnings. Each frame shows its observation time on the stamp.
Drag to pan, scroll to zoom. The map and the radar are independent: panning moves the camera; the active source is whichever covering radar Omastorm is following, unless you lock it.
Click the source name for covering mosaics and nearby dishes. The padlock pins
that source so panning will not hand off; it turns yellow when the camera sits
outside the source's coverage. n resumes automatic selection for the current
map centre and leaves the camera where it is.
The number under the product line is how stale the frame on screen is. The stamp above the timeline is when that frame was observed. LIVE is the feed; the light beside it goes yellow when data is stale (ten minutes) and red when the feed is unreachable. Cached frames stay.
A scale bar on the map is ground distance, in kilometres or miles from your locale.
Press a in the window or popover to show nearby airport weather reports on
the map. Airport codes replace city labels; their colors show the reported
flight category: green VFR, blue MVFR, red IFR, and magenta LIFR. Click an
airport code to read its raw METAR. These are current observations, not
forecasts or flight guidance.
The overlay is off by default and works with live NEXRAD radar in the U.S. and
Canada. It is unavailable on the European OPERA mosaic. To start with it on,
set [metar] show = true in your configuration. You can also choose how many
airports appear and how they are selected; see configuration.
/ (or s) is one field. Type a city, a radar site or mosaic name, or paste coordinates.
A city centres the map there, unlocks, and selects a covering source. Type
a region or country qualifier when needed, such as London, UK.
Cities come from the bundled GeoNames database. A configured radar override
still applies when choosing a place.
A site (KTLX, tlx) locks that dish and centres on it. Clicking the
source title opens the same card on covering mosaics and nearby dishes.
A mosaic (opera) locks that source and centres the map on its coverage.
Coordinates are latitude then longitude, decimal degrees, comma or space, the way a maps link looks. Invalid range is named on the card; the layout does not jump.
The map-marker at the top-left of the map, or m, jumps to the same
approximate IP location as first run. Zoom stays. The radar unlocks and
follows. Archived sessions never locate.
If the lookup fails, the camera stays put and a short overlay appears on the map. It is not a new row of chrome.
Selecting a radar loads its recent scans for playback. NEXRAD history grows
toward 60 frames / two hours;
OPERA retains up to 12 mosaic frames. Older scans drop out. Space loops
what is available; [ ] steps; Home and End jump.
NOAA publishes NEXRAD Level II via the Open Data program on AWS. A full volume takes about four to seven minutes (faster in severe weather, slower in clear air). While a volume is in progress the engine reads live chunks, so the sweep can paint as the antenna turns. If no new chunk arrives for 90 seconds it rediscovers the latest volume; cached frames stay. OPERA polls its public 24-hour cache and loads complete mosaic frames.
Three treatments sample the same radar data and palette. They only change how each
3 px cell is painted. Glyphs is the default; 1 2 3 switch.
| Key | Treatment | Look |
|---|---|---|
1 |
Pixels | Solid blocks. The most literal picture of each radar cell. |
2 |
Glyphs | A denser mark as the return strengthens. |
3 |
Stipple | Soft squares that grow with intensity; more map shows through. |
Chrome follows the Omarchy theme. Radar color comes from the measured reflectivity.
? lists every key. They are all rebindable.
| Key | Action |
|---|---|
h j k l or arrows |
Pan |
+ - |
Zoom |
0 |
Reset to the configured or weather location |
/ or s |
Search |
n |
Follow the covering radar (camera stays) |
Shift+L |
Lock the radar |
m |
My location |
| Space | Play / pause the loop |
[ ] |
Step a frame |
| Home / End | Oldest or newest frame |
1 2 3 |
Pixels, Glyphs, Stipple |
w |
Show weak returns |
a |
Show or hide aviation observations |
? |
This map |
| Esc | Close |
~/.config/omastorm/config.toml is what you mean to keep. The last map
center, zoom, and UI radar lock are saved separately in
~/.local/state/omastorm/state.json. Panning never rewrites config.
# Optional: always open here. Omit both to remember the last map position.
center_lat = 36.23708
center_lon = -79.97948
# locked_radar = "KFCX" # optional; coordinates do not lock a radar
treatment = "GLYPHS" # PIXELS, GLYPHS, or STIPPLE at launch
weak_floor = 5 # dBZ; false draws every measured return
[metar]
show = true # optional; start with airport reports on the map
[keys]
pan_left = "h Left"
zoom_in = "+ ="A bad value is named in the status slot and that setting stays on its
default. Keys are Qt sequences; an empty string unbinds. 1 2 3 change
treatment, w changes the weak-return floor, and a toggles aviation mode
for the session without writing the file.
omarchy plugin update com.omastorm.radar
omarchy restart shellUntil the restart, the shell keeps running what it loaded at login, old engine pin included. Omastorm notices the new files and says so; clicking that notice in the popover restarts the shell.
If expand or the keybind does nothing after an update, restart the shell.
The engine is one daemon per login. Its log is
$XDG_RUNTIME_DIR/omastorm/engine.log (usually /run/user/<uid>/omastorm/).
If the engine could not be installed, the reason is bootstrap.log in the
same directory; opening the popover again retries.
~/.local/share/omastorm/bin/omastorm-engine stopThe next popover or window starts it again.
This is a beta. Bugs, rough edges, and ideas go to
GitHub issues. For a
failure, use the
bug report template
and attach the last screenful of engine.log (and bootstrap.log if the
engine never installed). Include Omarchy version, plugin commit, and GPU as
the template asks.
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 # keep this to reinstall later
rm -f ~/.local/share/applications/omastorm.desktop # if you added the launcher entryThen delete the o.bind line if you added one.
Radar: NOAA NEXRAD Level II via the NOAA Open Data program on AWS; Europe mosaic from EUMETNET OPERA COMP DBZH via the Open Radar Data 24-hour cache (CC BY 4.0). Basemap: Β© OpenStreetMap contributors, ODbL, tiles by OpenFreeMap; Natural Earth, public domain. Location search: GeoNames, CC BY 4.0. Approximate location: wttr.in. METAR: NOAA/NWS Aviation Weather Center. Code: MIT, see LICENSE.
Setup, checks, and pull requests are in CONTRIBUTING.md.
Read DESIGN.md before proposing a product change. Open work
that is ready for a first patch is labeled
good first issue
and help wanted.
Thanks to these people (emoji key):
This project follows the all-contributors specification.











