Formula 1 Schedule is a fast, local-first Omarchy bar widget. It puts the next session at a glance, turns its white F1 mark red while a session is LIVE, and opens a full race-weekend timetable on click.
Everything needed for normal runtime ships with the plugin: no API key, no network polling, no background service, and no battery-hungry helper process. The season timetable is loaded once from the bundled data file and the display refreshes only as often as it needs to. An optional Sync calendar now action is available in Settings; it contacts Jolpica only after you click it.
Install
omarchy plugin add https://github.com/AnthonyPoschen/omarchy-f1-schedule --enable
omarchy bar move io.github.anthonyposchen.f1-schedule --section right
To remove it later:
omarchy plugin remove io.github.anthonyposchen.f1-schedule
Dependencies
- Runtime: Omarchy (which provides the Quickshell bar environment). Desktop alerts use the standard
notify-sendcommand; the timetable and countdown continue to work if notifications are unavailable. The optional manual calendar sync usescurl, which is included with Omarchy. - Maintainers only: Go, used by
scripts/update-seasonto generate the bundled annual timetable. It is not required by an installed plugin.
Manage and configure it with Omarchy
Omarchy manages installation, updates, enablement, and bar placement:
# Check whether the plugin is installed and enabled.
omarchy plugin list
# Update the installed plugin from its Git remote.
omarchy plugin update io.github.anthonyposchen.f1-schedule
# Temporarily hide or restore it.
omarchy plugin disable io.github.anthonyposchen.f1-schedule
omarchy plugin enable io.github.anthonyposchen.f1-schedule
# Place it in the desired bar section.
omarchy bar move io.github.anthonyposchen.f1-schedule --section right
Configure from the command line
Every widget preference can be set with omarchy bar set. Changes take effect in the running bar; right-click the F1 mark to inspect or fine-tune the same values visually.
# Minutes before an enabled session alert is sent (0–60; default: 15).
omarchy bar set io.github.anthonyposchen.f1-schedule alertLeadMinutes 15 --json
# Show a session as LIVE before its scheduled start (0–60; default: 0).
omarchy bar set io.github.anthonyposchen.f1-schedule earlyLiveMinutes 0 --json
# Extend or shorten the assumed LIVE duration (-30–60; default: 0).
omarchy bar set io.github.anthonyposchen.f1-schedule finishOffsetMinutes 0 --json
# Set race/sprint start-light audio volume (0–100; default: 0).
omarchy bar set io.github.anthonyposchen.f1-schedule startLightVolume 0 --json
# Reveal the Developer section, including a ten-second race-start preview (default: false).
omarchy bar set io.github.anthonyposchen.f1-schedule developerMode true --json
# Show or hide the next-session countdown beside the F1 mark (default: true).
omarchy bar set io.github.anthonyposchen.f1-schedule showNextEvent true --json
# Set when the countdown appears, from 1 minute to 1 day (default: 120 minutes).
omarchy bar set io.github.anthonyposchen.f1-schedule nextEventLeadMinutes 120 --json
# Show the F1 bar icon always (-1), when the countdown appears (0), or within 1–14 days (default: -1).
omarchy bar set io.github.anthonyposchen.f1-schedule f1MarkVisibleWithinDays -1 --json
# Open this web URL or registered app link when the hero is clicked (default: empty).
omarchy bar set io.github.anthonyposchen.f1-schedule watchLink "https://example.com/watch" --json
# Enable or disable alerts by session type.
omarchy bar set io.github.anthonyposchen.f1-schedule alertPractice false --json
omarchy bar set io.github.anthonyposchen.f1-schedule alertSprintQualifying true --json
omarchy bar set io.github.anthonyposchen.f1-schedule alertSprint true --json
omarchy bar set io.github.anthonyposchen.f1-schedule alertQualifying true --json
omarchy bar set io.github.anthonyposchen.f1-schedule alertRace true --json
For example, to show the icon as LIVE 10 minutes early and notify 20 minutes before qualifying:
omarchy bar set io.github.anthonyposchen.f1-schedule earlyLiveMinutes 10 --json
omarchy bar set io.github.anthonyposchen.f1-schedule alertLeadMinutes 20 --json
At a glance
| In the bar | In the timetable |
|---|---|
White F1 mark becomes red during a LIVE session |
Current race weekend with every session time |
| Full next-session label appears inside your configured lead time | Minute detail appears only in the final two hours |
| Hover for the current or next session and its countdown | Date and time formatting follows Omarchy's 12/24-hour clock choice |
| Click to open the timetable | Next three rounds, with a compact remaining-rounds indicator |
| Middle-click to recompute from the local schedule | Local alerts for the sessions you choose |
| Right-click to open settings | Countdown becomes a seconds display in the final two minutes |
The widget updates hourly when the next session is more than two hours away, every minute inside two hours, and every second for the final two minutes. It also gives the just-started moment a short, deliberate LIGHTS OUT / SESSION STARTED cue before settling into LIVE.
Settings and alerts
Right-click the bar widget to open its settings panel. You can choose:
- How far ahead alerts appear.
- How early a session should be shown as LIVE.
- A finish offset for broadcast overruns.
- Race and sprint start-light audio volume.
- Whether the next-session countdown appears beside the F1 bar mark, and how early it appears (up to one day).
- Whether the F1 mark stays visible always, follows the event-label window, or appears within 1–14 days of a session; hidden marks reveal in Omarchy's muted style while the bar is hovered.
- A web URL or registered app link to open when the hero is clicked.
- Alert types: practice, sprint qualifying, sprint, qualifying, and race.
Use Send test alert in that panel to check desktop notifications without waiting for a session. Click anywhere outside the settings panel to close it.
Developer mode
Developer mode keeps testing controls out of the regular settings panel. Enable it with omarchy bar set io.github.anthonyposchen.f1-schedule developerMode true --json; then use Preview race start to run an in-memory race exactly ten seconds away. It does not change the saved timetable or schedule state. Turn it off again with the same command using false.
Watch link
Paste a web URL or a registered app link into Watch link in Settings to make the hero clickable. The tooltip shows the exact configured link, and clicking opens it with your default browser or app handler. The same setting is available from the command line as watchLink. Empty, invalid, and unsafe local/content schemes are ignored; the plugin never runs a command from this setting.
Manual calendar sync
Choose Sync calendar now in Settings to request the current season's JSON schedule from https://api.jolpi.ca/ergast/f1/<year>.json. The button has a tooltip showing the exact request URL. It never runs automatically, sends no credentials, validates the received data, and atomically saves a user-local override at $XDG_DATA_HOME/omarchy-f1-schedule/data/<year>.json (or ~/.local/share/omarchy-f1-schedule/data/<year>.json).
The override takes priority over the bundled schedule and survives plugin updates. A failed download or invalid response leaves the currently displayed schedule untouched.
Local development
Make changes in this checkout, then mirror them into the installed plugin — no deploy or push required:
plugin_target="${XDG_CONFIG_HOME:-"$HOME/.config"}/omarchy/plugins/io.github.anthonyposchen.f1-schedule"
mkdir -p "$plugin_target"
rsync -a --delete --exclude='.git' ./ "$plugin_target/"
omarchy-shell shell rescanPlugins
omarchy restart shell
This replaces the chosen installed copy with the checkout while preserving its .git directory, then recreates the shell so all QML and asset changes take effect. Do not edit that installed copy directly.
Run the complete local checks before handing off a change:
go test ./...
tests/test-view-model.sh
omarchy plugin validate .
qmllint BarWidget.qml Panel.qml PlainText.qml Model.js tests/test-model.qml
git diff --check
The detailed contributor workflow is in docs/agents/local-development.md.
Timetable maintenance
The widget normally runs from the bundled data/<year>.json without network access. The optional Settings sync is a user-triggered override only. Each release still bundles a reviewed timetable; the Go maintainer tool produces it from the published Jolpica schedule:
scripts/update-season --year 2027
tests/test-view-model.sh
git diff -- data/2027.json
Review the generated schedule before committing — calendars can change. The annual workflow, including offline fixture testing and the scheduled GitHub update, is documented in docs/agents/local-development.md.
Releases
Releases use Calendar Versioning. The manifest version and annotated Git tag must describe the same commit:
manifest.json: 2026.8.22
Git tag: v2026.8.22
See the release versioning guide for same-day releases and the pre-publish checklist.
License
Trademark notice
Formula 1 and the F1 mark are trademarks of Formula One Licensing B.V. This unofficial plugin is not affiliated with Formula 1, the FIA, or their subsidiaries. The bundled F1 mark is a theme-tinted raster derived from the Wikimedia Commons F1 logo, identified there as public-domain text-logo artwork; trademark rights still apply.