See the next space launch without leaving Omarchy.
Flip-digit Falcon and Starship stats, a local-time countdown (HOLD / LIVE / SOON), ongoing crew, past missions, and Watch in the panel. A native bar-widget, not a browser tab.
Named for Heinlein’s rocket-pilot vibe. Unofficial; not SpaceX-branded.
ID: kenhara.rocketlauncher
Author: Harris Kenny
License: MIT
Version: 1.7.1
1.7.0: fetch watchdog, host allowlist, launch-id and cache fail-closed, Watch resolve timeout. Prior releases: CHANGELOG.md.
Repo: https://github.com/kenhara/omarchy-rocketlauncher
Rocketlauncher is unofficial. It is not affiliated with, endorsed by, or sponsored by Space Exploration Technologies Corp. (“SpaceX”) or any related entity. This plugin does not ship SpaceX logos, wordmarks, or brand assets. Mission/vehicle names and trademarks mentioned in launch data belong to their respective owners. Launch schedules and imagery metadata come from Launch Library 2 (The Space Devs); the plugin links to LL2-hosted images and does not redistribute those binaries.
Marketplace card: Widgets · tags bar, media, quickshell.
Search words include space, Falcon, Starship, SpaceX, NASA, webcast. Display name stays Rocketlauncher (brand-free).
omarchy plugin add https://github.com/kenhara/omarchy-rocketlauncher.git --enable
omarchy bar move kenhara.rocketlauncher --section rightThe git repo root is the plugin (manifest.json at root). On an Omarchy
machine:
mkdir -p ~/.config/omarchy/plugins
cp -a . ~/.config/omarchy/plugins/kenhara.rocketlauncher
omarchy plugin validate ~/.config/omarchy/plugins/kenhara.rocketlauncher
omarchy-shell shell rescanPlugins
omarchy bar move kenhara.rocketlauncher --section rightHot reload applies on save under ~/.config/omarchy/plugins/.
Watch embeds when possible via Qt Multimedia + a small localhost helper:
| Dep | Why |
|---|---|
python3 |
Runs scripts/stream-proxy.py |
yt-dlp |
Resolves YouTube / (sometimes) X / other webcast URLs to a playable stream |
# Arch / Omarchy examples
sudo pacman -S python yt-dlp
# or: python3 -m pip install --user yt-dlpyt-dlp must be importable by system python3 (pacman / pip --user). A pipx-only install is not seen by the helper.
Without these, WATCH still works: the panel shows a thumbnail fallback and Open original (or the store opens the URL externally). The plugin never bundles binaries and never runs remote installers.
- Left-click the bar rocket + short countdown (
14h 06m/06:22; tooltip keepsT-HH:MM:SS) to open/close the panel. Opening fetches mission detail for the next launch (cached by id after the first hit). Middle-click play/pauses Watch when active, otherwise refreshes data. Right-click starts Watch for the next launch. - Past Missions — expand the section in the panel to load the last few
SpaceX launches (
/launches/previous/, lazy on first expand to save free-tier quota). Tap a card for the same on-demand mission detail as Next / Upcoming. Offline sample cache ships a few past rows from research fixtures. - Ongoing missions — expand the section; LOCATE (on click) proves a docked ISS fix or shows a static course /
NO PUBLIC TRACK. Not on the refresh cycle. - Crew avatars with a Wikipedia / LL2 astronaut URL are clickable (opens in the browser). Pointer cursor only appears on actionable controls.
- Tap the next-launch card to expand/collapse detail (description, pad, landing, patch, crew when present). Starlink-style flights omit the empty crew section.
- WATCH prefers an in-panel player (YouTube / HLS when
yt-dlpcan resolve). Official webcasts are often X broadcasts — those tryyt-dlpfirst, then degrade to the webcastfeature_image+ Open original. We never claim X always embeds. - Flip counters animate when totals change.
| Input | Action |
|---|---|
| Left-click bar | Toggle panel |
| Middle-click bar | If Watch is active: play/pause; else refresh launch data |
| Right-click bar | Open Watch for next launch (panel opens; falls back toward Open original when no webcast) |
| Escape | Close panel (see stickyWatch below) |
| Space | Play / pause Watch (or start Watch for next launch) |
M |
Mute / unmute |
O |
Open original webcast URL |
S |
Stop Watch (tears down player + proxy even when sticky) |
| WATCH button | Start in-panel Watch |
| PLAY / PAUSE / MUTE / OPEN ORIGINAL | Same as keys, on the Watch chrome |
| Tap next-launch card | Expand / collapse mission detail |
| Tap upcoming / past card | Expand / collapse mission detail for that id |
| Past Missions header | Expand section (lazy-loads previous launches once) |
| Crew avatar (when linked) | Open Wikipedia / LL2 astronaut page |
Schema default is false (pause-on-hide). When true, Watch aims to
stay up while you work, like Meet PiP — Esc / click-away hides the panel
but MediaPlayer + stream-proxy.py keep running from a BarWidget-hoisted
player (outlives the keyboard panel). Treat sticky playback as
best-effort until verified on a live Omarchy shell / UTM VM.
stickyWatch: false(default): Esc / hide pauses Watch, clears the stream URL, and stopsstream-proxy.py. Reopening does not auto-resume — press WATCH / PLAY (or Space) again.stickyWatch: true: Esc / hide keeps MediaPlayer + the localhost proxy running in the background. The bar can show a ▶ glyph while Watch is active. Press S or the Watch × control to fully stop. Optionalsystemd-inhibit --what=idleruns while sticky Watch is playing (no privilege; skipped quietly ifsystemd-inhibitis missing). There is no safehyprctlidle-inhibit dispatcher, so we do not call one.
omarchy-shell shell toggle kenhara.rocketlauncher
omarchy-shell shell hide kenhara.rocketlauncherRocketlauncher is bar-widget only — use left / middle / right clicks on the
bar (and the keys above) rather than inventing summon payloads. Middle-click
play/pauses Watch when active, otherwise refreshes launch data; right-click
starts Watch for the next launch.
Paste into your own Hypr config if you want a key — Rocketlauncher does not
edit ~/.config/hypr/ or shell.json for you:
# hyprland.conf / binds.conf (example only)
bind = SUPER, L, exec, omarchy-shell shell toggle kenhara.rocketlauncherOmarchy has no widget-settings GUI. Prefer the in-panel toggles; CLI / shell.json are secondary.
Open Rocketlauncher → scroll to the Bar section near the footer:
- Countdown on bar — On/Off (default On). When Off, the bar chip is just the rocket (optional mission name still respects
barShowMissionNamevia CLI); countdown stays in the panel and tooltip.
Edits update the live store and mirror into bar settings so they survive reload.
omarchy bar set kenhara.rocketlauncher barShowCountdown false
omarchy bar set kenhara.rocketlauncher barShowMissionName true| Key | Type | Default | Description |
|---|---|---|---|
refreshIntervalSec |
integer | 1800 |
Poll interval in seconds. Minimum 600 so the free Launch Library 2 tier (15 req/hour) is never hammered. |
notifyMilestones |
bool | false |
Opt-in notify-send once per launch id at T−10 and T−0 (debounced in ~/.cache/rocketlauncher/cache.json). |
barShowMissionName |
bool | false |
Prefix the bar countdown with a short mission name (CLI / shell.json; no in-panel switch). |
barShowCountdown |
bool | true |
Show NET countdown on the bar chip. Prefer the in-panel Countdown on bar toggle. When off, chip is just the rocket (mission name still respects barShowMissionName); countdown stays in panel + tooltip. |
stickyWatch |
bool | false |
Keep Watch playing when the panel hides — Meet-style PiP (see above). |
watchQuality |
enum | best |
best, 720, or 480 — passed to scripts/stream-proxy.py as yt-dlp height preference. |
flipAnimate |
bool | true |
Animate flip-digit counters when totals change. |
omarchy plugin remove kenhara.rocketlauncherOptional cache cleanup:
rm -rf ~/.cache/rocketlauncherPrimary API: Launch Library 2 (The Space Devs)
Base: https://ll.thespacedevs.com/2.3.0/ · Falcon / Starship launches via LSP agency id 121
Up to three list GETs on the regular refresh cycle:
GET /agencies/121/— totals (launches, landings, pending, consecutive successes)GET /launches/upcoming/?lsp__id=121&limit=5&mode=list— upcoming list (compact)GET /spacecraft/?search=Crew%20Dragon&in_space=true— ongoing Crew Dragon
On-click LOCATE (not on this cycle): LL2 spacecraft_flights + CelesTrak SATCAT/TLE.
On first expand of the Past Missions section (not on every refresh):
GET /launches/previous/?lsp__id=121&limit=5&mode=list— recent past launches
Bundled data/sample-cache.json includes offline past rows from
docs/research/samples/ll2-spacex-previous-*.json.
When you open the panel or expand the next / upcoming / past card:
GET /launches/{id}/— one detailed fetch per id, then cached in~/.cache/rocketlauncher/cache.jsonand in-memorylaunchDetails.
Do not detailed-fetch every upcoming/past row. Stay under the free tier (15 req/hour).
Cache path: ~/.cache/rocketlauncher/cache.json
Offline fixtures: data/sample-cache.json, plus
data/sample-detail-crew.json / data/sample-detail-starlink.json for UI demos.
Labels are honest LL2 agency fields:
- LAUNCHES →
total_launch_count - Landings →
successful_landings - Pending →
pending_launches
No API key is used (free tier). No scrapers, no sudo, no second Quickshell
process. Pure QML + Qt network (+ optional local yt-dlp helper for Watch).
- Network:
ll.thespacedevs.comfor launch data (https, host pinned after redirects); on-click LOCATE also hitscelestrak.org(SATCAT + ISS TLE). When Watch is used,yt-dlpcontacts the webcast host (YouTube / X / etc.) over https only and the helper binds 127.0.0.1 only. Webcast / image URLs that are not https are dropped. - Disk: read/write
~/.cache/rocketlauncher/cache.json(atomic helper write; reads refuse symlink/FIFO); read bundled samples. - Opens user-selected https webcast URLs in the default browser as a fallback.
- Optional
notify-sendtoasts whennotifyMilestonesis enabled (FreeDesktop Notifications;--before title/body). - Optional
systemd-inhibit --what=idlewhilestickyWatchWatch is playing (user-session inhibit only; not used when sticky is off). - Zero privilege beyond normal desktop user permissions inside
omarchy-shell.
MIT — see LICENSE. Copyright (c) 2026 Harris Kenny.
Icons from Phosphor Icons (regular weight) by
Helena Zhang and Tobias Fried, MIT. Paths are bundled in PhosphorIcon.qml and
painted with QML Shape/Path — no remote webfont, no Image.source of SVG.
Launch data © The Space Devs / Launch Library 2 contributors. Imagery URLs in samples may carry CC BY-NC or NASA terms — this plugin does not redistribute those binaries; it only links or references metadata. No SpaceX logos or wordmarks are shipped. Unofficial; not affiliated with SpaceX or NASA.
