GitHub - CommanderTurtle/omarchy-webapp-shell: usage of plugin store requires omarchy? Why not just webapp? · GitHub
Skip to content

About

usage of plugin store requires omarchy? Why not just webapp?

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Omarchy Web Apps

Omarchy Web Apps is a static, browser-native host for Omarchy plugins. It keeps the plugin catalog, theme contract, and QML source visible, while replacing desktop-only boundaries with narrow web adapters only where the browser truly needs one. There is no Qt runtime, C++, server application, package install, or build step in the deployed site.

The first packaged application is a faithful web port of AksharP5/omarchy-radio-atlas, imported from commit 1738fa116522ed5dffc1bec53144a3b9f2ac7204.

The original Radio Atlas overlay used as the visual reference

Run it

Any ordinary static HTTP server works:

npm run serve
# http://127.0.0.1:4173

Or serve the repository root through GitHub Pages, Caddy, nginx, Apache, a CDN, or python -m http.server 4173. Opening index.html through file:// is not supported because browsers intentionally block local fetch() and QML loads.

The deployed application has zero npm dependencies. package.json only provides convenient development commands.

Radio Atlas

The adapter preserves the useful overlay experience:

  • rotatable, deeply zoomable Canvas globe with clipped country geometry;
  • live Radio Browser station discovery, country browsing, search, and random tuning;
  • progressive world catalog expansion up to 5,000 records;
  • coordinate estimation for stations that publish only a country;
  • virtualized station list, favorites, recent history, and cached results;
  • <audio> playback with play/pause, previous/next, stop, mute, volume, failed-stream skipping, and Media Session controls;
  • the complete upstream keyboard and pointer control set;
  • close/reopen behavior without discarding the in-page session; and
  • indexed browser persistence with no telemetry.

The browser contacts only Radio Browser and the station stream the user asks it to play. Some community stations expose only insecure HTTP audio; an HTTPS-hosted page detects those entries before assigning them to the media element and moves to the next playable station without issuing a mixed-content request. A static browser page also cannot read arbitrary ICY response headers, so it exposes the station identity to Media Session but does not claim MPV's proxy-level now-playing extraction.

See the parity audit for the source-by-source mapping.

Themes

The selector contains the first twelve themes in the canonical Omarchy manual:

  1. Tokyo Night
  2. Catppuccin
  3. Lumon
  4. Ethereal
  5. Everforest
  6. Gruvbox
  7. Miasma
  8. Hackerman
  9. Osaka Jade
  10. Kanagawa
  11. Nord
  12. Matte Black

Their tokens and canonical previews come from the corresponding current Omarchy theme directories. The palette identities were also cross-checked against the public Omarchy Themes preview catalog where that catalog exposes the first-party entry. Catppuccin is the initial theme because it most closely matches Radio Atlas's upstream screenshot; the selection persists locally.

Import another plugin

The importer accepts either a checkout or a Git URL. --repo always points to the plugin root itself—the directory containing its schema-1 manifest.json:

node tools/import-plugin.mjs --repo /path/to/plugin
node tools/import-plugin.mjs --repo https://github.com/owner/plugin.git

That one command creates or updates plugins/<manifest-id>/ and registers its descriptor in plugins/catalog.json. The running shell reads the catalog and adds the application tab programmatically; shell.js never needs a plugin- specific edit.

The importer validates schema-1 manifest.json, entry-point containment, symlinks, file sizes, and record count. It copies only auditable static source, records the Git commit/date/dirty state and a deterministic SHA-256 source digest, generates qmlweb/OmarchyShell.qml, and updates plugins/catalog.json. It never executes the imported plugin.

A plugin using the portable QtQuick subset gets the vendored QmlWeb runtime. A plugin using Quickshell processes, files, Wayland/Hyprland, Omarchy UI globals, shell IPC, or an external player is refused until an explicit adapter is named:

node tools/import-plugin.mjs \
  --repo /path/to/plugin \
  --adapter my-browser-adapter \
  --app-entry app/index.html

The adapter directory is deliberately preserved on later imports so upstream source can be refreshed and audited independently. An adapter is not a blank compatibility waiver: plugin.json retains every detected native boundary.

See the architecture and plugin contract before adding a second application.

Verification

npm test

The suite checks importer refusal/reproducibility, source digest and commit, manifest/catalog resolution, exact theme order and tokens, local-only assets, QmlWeb packaging, Radio Browser normalization, map mathematics, and upstream control/API parity. The final browser audit also exercises the portable QML runtime and Radio Atlas search, playback, history, favorites, themes, close/reopen behavior, and responsive layout.

License

This host and its original adapter code are licensed under AGPL-3.0-only. Imported Radio Atlas source remains MIT-licensed; QmlWeb remains MIT/BSD-2-Clause; Natural Earth geometry is public domain; and Omarchy theme token provenance is retained. See third-party notices.

About

usage of plugin store requires omarchy? Why not just webapp?

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages