Skip to content

Calendar setup

stint can pull calendar events and offer them as one-click time entries. This is useful for any “log the meeting I just had” workflow — open the popover after a meeting, click the event, the timer entry is created with the meeting’s title and time range.

Once one or more accounts are connected, the Settings → Calendar panel looks roughly like:

In the GUI: Settings → Calendar → Add Google account. A browser tab opens, you authorize, the tab redirects back. stint pulls the list of calendars under that account.

Or via CLI:

Terminal window
stint calendar add google

Each Google account can have many calendars (primary, holidays, shared team calendars, etc.). Toggle which ones surface in stint via:

  • GUI: Settings → Calendar → <account> → Toggle each calendar

  • CLI:

    Terminal window
    # List calendars on an account (shows inclusion + default project too)
    stint calendar calendars <account-id>
    # Include or exclude a specific calendar
    stint calendar calendars <account-id> --include <calendar-id>
    stint calendar calendars <account-id> --exclude <calendar-id>

Excluded calendars are still fetched (to keep the cache warm) but don’t appear in the popover’s event picker.

When you click an event in the popover to log it, stint creates a time entry with the event’s title, start, and end. You can set a per-calendar default project so logged events land under that project automatically.

  • GUI: Settings → Calendar → <account> → <calendar> → Default project

  • CLI:

    Terminal window
    stint calendar calendars <account-id> \
    --set-default-project <calendar-id> <project-uuid>
    stint calendar calendars <account-id> \
    --clear-default-project <calendar-id>

stint polls Google every 15 minutes in the background. You can force a refresh from Settings → Calendar → <account> → Refresh or via:

Terminal window
stint calendar refresh <account-id>

For forks: registering your own Google OAuth client

Section titled “For forks: registering your own Google OAuth client”

The canonical reyem.tech build of stint ships with a Google OAuth client ID and secret baked at compile time (read via option_env! from STINT_GOOGLE_CLIENT_ID / STINT_GOOGLE_CLIENT_SECRET).

If you’re building stint from source for personal use or as a fork, you need to register your own client at Google Cloud Console:

  • Type: Desktop app
  • Authorized scopes include: .../auth/calendar.readonly
  • Authorized redirect URIs include: http://127.0.0.1 (loopback, port-agnostic)

Then set the env vars at build time:

Terminal window
STINT_GOOGLE_CLIENT_ID= \
STINT_GOOGLE_CLIENT_SECRET=… \
cargo build --release

Forks without these set still build and run — the calendar UI shows “Google OAuth not configured” instead of attempting the flow and failing opaquely.

GUI: Settings → Calendar → <account> → Remove.

CLI: stint calendar remove <account-id>.

This deletes both the database row and the Keychain entry holding the OAuth tokens. Past calendar-logged time entries are preserved (they’re normal time entries; only the link back to the calendar event is broken).