Sports Wizard
A calm, personal sports briefing for the Omarchy bar. One compact trophy icon opens a theme-native panel for Australia Test cricket, Lionel Messi, major football, and Formula 1.
Sports Wizard is designed for glancing, not doom-scrolling. Live scores are prominent, upcoming times use your desktop timezone, finished results stay brief, and provider failures never erase the last useful snapshot.
Highlights
- Australia men's Test cricket is shown exclusively; its ODI and T20 matches are ignored.
- Every fixture includes an explicit calendar date and uses your desktop timezone.
- Messi's Inter Miami fixtures and results appear in the personal section.
- Major football competitions form a short world watch.
- The next F1 race and latest winner work without an API key.
- The panel follows the active Omarchy theme, spacing, typography, and keyboard behavior.
- Data fetching runs once per shell, even with multiple monitors.
- Last-good caching and partial-provider failures are built in.
- The Python backend uses only the standard library.
Install
From a published Git repository:
omarchy plugin add https://github.com/maybeabhinav/sports-wizard.git --enable
For local development from this checkout:
scripts/install-local
The local installer validates the real repository, creates only the
~/.config/omarchy/plugins/abhinav.sports-wizard symlink, rescans the shell,
and enables the widget in the right bar section. It refuses to replace an
existing directory or unrelated symlink.
Left-click the trophy to open the panel. Right-click it to refresh. Inside the
panel, use Up/Down to select, Enter to open the source, R to refresh, and
Escape to close.
Data providers
The default installation needs no credentials:
| Provider | Default | Purpose |
|---|---|---|
| Cricket Australia | On | Official current/next and previous Australia men's Test |
| TheSportsDB | On | Inter Miami and daily football |
| Jolpica F1 | On | Next race and most recent winner |
| football-data.org | Off | Optional broader major-football coverage |
| CricketData.org | Off | Optional stronger live-cricket and Test coverage |
The official Cricket Australia fixture feed supplies a live Test when one is underway, otherwise the closest upcoming Test, plus the latest completed Test. Adjacent-year lookups fill either side when required. CricketData remains an optional source for richer live scores; non-Test and non-senior Australia matches are always filtered out.
Configure
Create a private config, then edit it:
cd ~/.config/omarchy/plugins/abhinav.sports-wizard
python3 -m backend init-config
${EDITOR:-nano} "${XDG_CONFIG_HOME:-$HOME/.config}/sports-wizard/config.json"
python3 -m backend doctor
The file must be owned by you, be a regular file, and have mode 0600. Sports
Wizard refuses to read loose permissions because optional provider tokens live
there. Tokens are never passed in process arguments, written to the snapshot
cache, or included in errors.
See config.example.json for every supported preference. The sports focus is
intentionally fixed; extend or replace a provider to add another team or sport.
Omarchy's bar settings panel owns the safe UI settings: refresh interval and
live-dot visibility.
Extend with another provider
Providers do one job: fetch one vendor and return normalized Event values.
- Add
backend/providers/your_provider.pywith anid, constructor, andfetch(FetchRequest) -> ProviderResultmethod. - Use the shared
JsonHttpClient; do not callurllibdirectly. - Tag personal or editorial intent (
messi,australia-test,major,f1) in the provider. Rendering and ranking stay provider-agnostic. - Register it in
backend/__main__.pyand add a config block. - Add a redacted fixture test to
tests/test_providers.py.
The QML consumes a bounded, pre-sectioned wire snapshot. Adding a provider or sport should not require editing the panel.
Development
scripts/check
python3 -m backend snapshot | jq
omarchy-shell shell rescanPlugins
scripts/check compiles Python, runs the unit suite, compares every QML file
against qmlformat, runs qmllint with Omarchy's shell import root, validates
the plugin manifest, and runs the configuration doctor.
Symlink-target edits may not always trigger recursive shell watchers. Run
omarchy-shell shell rescanPlugins after changes during local development.
Privacy and failure behavior
- Provider responses are size-limited and time-bounded.
- Only HTTPS provider requests are accepted.
- Event links are restricted to provider-specific HTTPS hosts before opening.
- Cache writes are atomic and private.
- A valid empty provider result replaces an obsolete cache.
- Total provider failure uses the last good cache and labels it as cached.
- Partial failure preserves successful sports and identifies the degraded source.
Things this does not cover
Sports Wizard does not provide betting odds, streams, news scraping, notifications, full cricket scorecards, football tables, ball-by-ball data, or live F1 telemetry. Free-provider completeness and commercial provider uptime are outside the plugin's control.
License
MIT