RobOS Google Calendar
Installs Mozilla Thunderbird if needed and writes Google Calendar, Google Contacts and optional Gmail settings into its profile for a Google account from Cloud Accounts.
packages/google-calendar
RobOS Google Calendar, in packages/google-calendar, sets up Mozilla Thunderbird as the calendar and contacts client for a Google account. It does not show your calendar itself. The work is done by the shared module packages/robos-lib/thunderbird-google.js; the app is a form around it.
Where the account comes from
The app lists the Google accounts in ~/.config/robos/cloud-accounts.json, the store kept by packages/robos-lib/cloud-accounts.js and managed in RobOS Cloud Accounts. Each time it reads that store, the module also imports Google Drive and OneDrive entries from ~/.config/robos/data-sources.json, the file written by Data Sources, so a Drive login made there shows up here. The default account is selected first.
+ Sign in / Switch Google Account starts a browser OAuth 2.0 sign-in through a loopback server on 127.0.0.1:53682 (or a random port if that one is taken). From this app it uses the built-in Google Drive desktop client and requests only the Drive scope, then saves the account and tokens back to cloud-accounts.json and data-sources.json. It does not request Calendar, Contacts or Gmail scopes. Manage Cloud Accounts opens the Cloud Accounts app.
Installing Thunderbird
The app looks for Thunderbird at ~/.local/bin/thunderbird, ~/.local/opt/thunderbird/thunderbird, /usr/bin/thunderbird, /snap/bin/thunderbird, /usr/local/bin/thunderbird, then on PATH. If none is found, Install & Configure Thunderbird runs a bash script and streams its output to the provisioning log:
- If
sudo -n truesucceeds (passwordless sudo), it runsapt-get updateandapt-get install -y thunderbird. - Otherwise it downloads
thunderbird-latest-SSLfor linux64 fromdownload.mozilla.org, extracts it to~/.local/opt/thunderbird, and writes a wrapper script at~/.local/bin/thunderbirdthat setsMOZ_DISABLE_CONTENT_SANDBOX=1.
The status card mentions snap, but the installer never installs the snap; it only detects one that is already there.
What it writes
Settings go into user.js in the Thunderbird profile. The app reads profiles.ini under ~/.thunderbird and ~/snap/thunderbird/common/.thunderbird. If no profile exists, it creates robos001.default-release with a matching profiles.ini in both locations. It writes to every profile it finds, not only the default one.
Each account gets a block between // >>> ROBOS-GOOGLE-INTEGRATION-START (<email>) and // <<< ROBOS-GOOGLE-INTEGRATION-END (<email>). Running it again replaces that block and keeps everything else in the file. The block contains:
| Service | Prefs | Endpoint |
|---|---|---|
| Google Calendar | calendar.registry.<uuid>.*, type caldav, offline cache on, refreshInterval from Sync Interval |
https://apidata.googleusercontent.com/caldav/v2/<email>/events |
| Google Contacts | ldap_2.servers.robos_gcontacts_<key>.*, dirType 102, sync every 30 minutes |
https://www.googleapis.com/carddav/principals/<email>/lists/default/ |
| Gmail (off by default) | mail.account, mail.server, mail.smtpserver entries, OAuth2 (authMethod 10) |
imap.gmail.com:993 (SSL), smtp.gmail.com:465 |
It also sets an identity, calendar.timezone.local from the system time zone, and calendar.list.sortOrder listing every RobOS calendar in the file (the line is removed when no account has Calendar ticked). The calendar UUID is derived from the email address, so repeat runs update the same calendar instead of adding a new one. The right-hand pane previews the block before anything is written.
No access or refresh token is written into Thunderbird. Thunderbird has to complete its own Google sign-in the first time it connects to these endpoints.
After writing, the app marks the account in cloud-accounts.json with thunderbirdConfigured, thunderbirdLastSyncedAt, thunderbirdProfilePath, the calendar color, the sync interval (calendarRefreshMinutes) and the service toggles. When you pick an account, the form loads these stored values.
Use it
- Pick an account under Active Google Account.
- Tick the services and set the calendar color and Sync Interval (Minutes).
- Click Install & Configure Thunderbird, or Write Configuration to Thunderbird Profile to write the profile without installing.
- Click Launch Thunderbird Calendar, which starts Thunderbird with
--profile <default profile> -calendar.
Both buttons configure the selected account and then run the configuration again for every Google account in Cloud Accounts. That second pass reuses each account’s stored choices (services, calendar color and sync interval), so what you set for the selected account is what ends up in user.js. An account that has never been configured gets a 15-minute refreshInterval, the field’s default. Unticking Google Calendar leaves that account’s calendar out of the RobOS block. Thunderbird copies prefs from user.js into its own prefs.js when it starts, though, so a calendar it has already loaded stays in Thunderbird until you delete it there.
The “Discovered Calendars” box calls the Google Calendar API with the account’s stored access token. Because sign-in from this app only grants the Drive scope, it usually shows just the primary calendar and a note.
Run it
Open RobOS Google Calendar from the desktop or the App Launcher. From a checkout:
scripts/dev-launch.sh google-calendar
Dev Central can also open this app, and reads the calendars it configures from the Thunderbird profile.
Source: packages/google-calendar and packages/robos-lib/thunderbird-google.js.
More in Desktop & Command Center
App Launcher
A searchable grid of the desktop applications installed on the machine, including the RobOS apps.
Desktop Customizer
A slash-command console that changes GNOME settings (clock, taskbar, theme, shortcuts, startup apps) and keeps git-backed snapshots to roll back.
Desktop Dashboard
A full-screen window that sits at desktop level and shows a grid of widgets; today it contains one clock and date widget.
Desktop Manager
The background process that launches RobOS apps, restarts the ones marked keep-alive, owns the tray icon and listens on a Unix socket.
Desktop Shell
Full-screen top bar and bottom dock for RobOS on a GNOME/X11 session, replacing the GNOME panel while it runs.
Desktop Widgets
A transparent panel on the right edge of the desktop with five status widgets: active task, system stats, AI agent, work journal and security.
Dev Central
Your daily task list: issues from your task servers as an epic tree, with buttons to start design or implementation agents and to open the related PR.
Dev Discussions
A chat-style view of discussion threads attached to tasks and pull requests, stored in a local cache with optional posting to GitHub.
Icon Manager
Shows the icon of every installed RobOS app, lets you replace one, and rewrites the apps' installed icon.svg and .desktop Icon= lines.
Manager Dashboard
Team metrics for one GitHub repository: open issues, merged PRs, PR cycle time, deploy frequency, approval rate, tasks by stage and PRs per developer.
Notifications Center
Shows the notification history stored in ~/.config/robos/notifications.json, with filters by category, tier and date, and edits the notification preferences.
Package Manager
Prototype screen for listing apps and daemons with start, stop and health-probe buttons. It shows built-in sample data.
RobOS App Manager
Choose, download, launch and remove RobOS apps
RobOS Audio Player
Open-source audio player, custom playlist engine, procedural focus soundscapes, and zero-cloud Google Cast smart speaker streaming.
RobOS Dashboards
Create KGraph graphical dashboards from card layouts where each widget is any RobOS component, embeddable via <robos-dashboard> and castable to Smart TVs
RobOS GNOME Desktop App Installer
Install, manage, and repair GNOME Desktop shortcuts, App Grid launchers, multi-scale icons, and Dock favorites for all RobOS apps.
RobOS Home for Android
The home screen of the RobOS phone: the time, the date and every app, with the RobOS apps first.
RobOS Home Speaker
Two-way smart speaker intercom, Home Assistant Voice PE (NC-VK-9727) hands-free voice approval, neural TTS broadcast, and soundboard.
RobOS Movie Player
Open-source cinema, TV series & Tablo OTA DVR player sharing the warm theater theme of RobOS Audio Player: 100,000-movie & TV series library, Show & Season Navigator, Tablo 4th Gen OTA DVR live & recorded broadcast streaming, TMDB/TVmaze posters, AI Watchlists, Virtual Cinema Host, synced .srt/.vtt subtitles, and a 3-row visual image-card Roku & Smart TV app.
RobOS Preferences
Settings window for RobOS apps: Config Sync & Sharing (cloud backup and shared configs), optional AI API mode, agent tiers, prompt security, GitHub accounts, IDE, notifications, journal and theme.
RobOS Preferences for Android
Signs in to Google Drive on an Android phone, opens your RobOS Config Sync backups and restores the settings phone apps use.
RobOS Smart TV Studio
Pair Smart TVs, build & sideload Developer Mode TV apps (LG webOS, Samsung Tizen, Google TV/ADB, Roku), serve the 10-foot D-Pad TV Portal (:19210), and stream 4K games.
Search Indexer
Builds plain-text lists of file paths under folders you choose, which RobOS text areas search for @-mentions.
Software Center
Install and manage coding-agent CLIs, IDEs, browsers, game tools and utilities on Windows or Linux.
System Logs Viewer
Viewer for the structured logs that RobOS apps write to ~/.config/robos/logs, with search and level filters.
Toast Daemon
Shows overlay toast windows for new entries in ~/.config/robos/notifications.json, with tiers, categories, do-not-disturb and anti-spam limits.
Workspace Manager
Window showing a sample multi-repo task workspace with sync, teardown and open-in-IDE buttons that return canned results. Discovery helpers exist in the code but are not wired to the window.