# tock **The fast terminal calendar. Written in Rust.** ![Rust](https://img.shields.io/badge/language-Rust-f74c00) ![License](https://img.shields.io/badge/license-Unlicense-green) ![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20macOS-blue) ![Stay Amazing](https://img.shields.io/badge/Stay-Amazing-important) Terminal calendar with week view, event management, astronomy, and weather. Built on [Crust](https://github.com/isene/crust). Feature clone of [Timely](https://github.com/isene/Timely) rewritten in Rust for speed and single-binary distribution. ![Tock screenshot](img/screenshot.png) ## Features - **5-pane TUI**: info bar, mini-month strip, week view grid, event details, status bar - **Week view**: 7-column layout with half-hour time slots, all-day event rows, weather per day - **Mini-month calendars**: horizontal strip with event indicators, week numbers, today highlight - **Calendar sources**: Google Calendar (OAuth2), Outlook/365 (device auth), local events - **ICS import**: parse and import .ics files with RRULE expansion for recurring events - **Background sync**: automatic polling with configurable intervals - **Ephemeris engine**: full planetary position calculator ported from [ruby-ephemeris](https://github.com/isene/ephemeris) - Moon phase with emoji symbols, illumination percentage - Moon rise/set times - Sunrise/sunset times - Visible planets (Mercury, Venus, Mars, Jupiter, Saturn) with rise/set - Solstices, equinoxes, 11 meteor shower peaks - **Weather**: 7-day forecast from Met.no (free, no API key) - **Desktop notifications**: configurable alarms via notify-send - **Event management**: create, edit, delete, accept invites (RSVP) - **Preferences**: 15 configurable settings with inline color picker (256-color grid) - **Calendar manager**: enable/disable calendars, change colors, remove - **Kastrup integration**: reply to events via Kastrup (r key), jump to Kastrup (Z key) - **Database**: SQLite DB in ~/.tock/tock.db (migrated from ~/.timely/) ## Install Download the prebuilt binary from [Releases](https://github.com/isene/tock/releases), or build from source: ```bash cargo build --release cp target/release/tock ~/.local/bin/ ``` ## Key Bindings | Key | Action | |-----|--------| | d/RIGHT, D/LEFT | Next/prev day | | w/W | Next/prev week | | m/M | Next/prev month | | y/Y | Next/prev year | | UP/DOWN | Navigate time slots | | PgUp/PgDn | Jump 10 slots | | HOME/END | Top/bottom of day | | j/k | Cycle events on day | | e/E | Jump to next/prev event | | t | Go to today | | g | Go to date | | n | New event | | Enter | Edit event | | x/DEL | Delete event | | v | View event details | | a | Accept invite (RSVP) | | Ctrl+Y | Copy event to clipboard | | i | Import ICS file | | G | Setup Google Calendar | | O | Setup Outlook/365 | | S | Manual sync | | C | Calendar manager | | P | Preferences | | Ctrl+R | Clear caches | | Ctrl+L | Redraw | | ? | Help | | q | Quit | ## Configuration Config file: `~/.tock/config.yml` Settings include location (for astronomy/weather), work hours, calendar colors, sync intervals, and notification preferences. ## Dependencies Runtime: SQLite (bundled). Optional: `notify-send` (notifications), `xclip` (clipboard). ## Part of the Rust Terminal Suite See the [Fe₂O₃ suite overview](https://github.com/isene/fe2o3) and the [landing page](https://isene.org/fe2o3/) for the full list of projects. | Tool | Clones | Description | |------|--------|-------------| | [rush](https://github.com/isene/rush) | [rsh](https://github.com/isene/rsh) | Shell | | [crust](https://github.com/isene/crust) | [rcurses](https://github.com/isene/rcurses) | TUI library | | [kastrup](https://github.com/isene/kastrup) | [Heathrow](https://github.com/isene/heathrow) | Messaging hub | | [tock](https://github.com/isene/tock) | [Timely](https://github.com/isene/timely) | Calendar | | [pointer](https://github.com/isene/pointer) | [RTFM](https://github.com/isene/RTFM) | File manager | | [scroll](https://github.com/isene/scroll) | [brrowser](https://github.com/isene/brrowser) | Web browser | | [crush](https://github.com/isene/crush) | - | Rush config helper | ## License [Unlicense](https://unlicense.org/) - public domain. ## Credits Created by Geir Isene (https://isene.org) with extensive pair-programming with Claude Code.