Omahub
← All plugins
M

Sports Wizard

by maybeabhinav

A beautiful, personal sports briefing for the Omarchy bar.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
885c203
Scanned
6 days ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
885c203
Reviewed
6 days ago

The plugin is a well-structured sports briefing widget that fetches data from public APIs. It uses only the Python standard library, validates all inputs, restricts URLs to a whitelist, protects config permissions, and follows security best practices. No malicious or dangerous behavior was found.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/maybeabhinav/sports-wizard --enable

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.

  1. Add backend/providers/your_provider.py with an id, constructor, and fetch(FetchRequest) -> ProviderResult method.
  2. Use the shared JsonHttpClient; do not call urllib directly.
  3. Tag personal or editorial intent (messi, australia-test, major, f1) in the provider. Rendering and ranking stay provider-agnostic.
  4. Register it in backend/__main__.py and add a config block.
  5. 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