If you, like me …

  • … use the Nextcloud calendar app to syncronize your calendar across devices,
  • … like to manage your calendar within Emacs,
  • … spend considerable part of the year in different timezones …

… I have great news for you: after years of trial and error, I think I have finally found a workable set-up.

To begin with, this set-up builds upon org-caldav, and the org-agenda. As it turns out, this combo works great in combination with Nextcloud, but there are a couple of tricks that are not mentioned in the documentation.

Trick 1:

When adding a new event to the org-calendar, you can add the timezone of the event as a property to the org header of your event. If you sync this event to the Nextcloud server, the calendar app will faithfully recognize this timezone.

This is what happiness looks like.

Trick 2:

Although org-caldav has no issue informing the Nextcloud server of the timezone org property of any pushed event (org-calendar –> Nextcloud), it does not recognize any timezone data from any event that is pulled from the Nextcloud server to the org-calendar (Nextcloud –> org-calendar).

Also, org-calendar (and org in general) does not have proper timezone support.

For several years I thought that this simply means that I cannot manage my calendar in Emacs/ org-mode. But today I decided to “re-open the case”. And I think I solved it.

As it turns out, when pulling new events from the Nextcloud server with org-caldav, it adjusts the time to the timezone of the device.

So let’s say I have an event saved in the Nextcloud server at 10:00h Colombian time. If I pull this event with org-caldav to my laptop, and my laptop is set to the Amsterdam timezone (summer time), it will pull the time as 17:00h. If I would do the same while my laptop is set to Colombian timezone, it will pull the time as 10:00h.

This means that two simple rules will make this set-up workable:

  1. Whenever I switch timezones, I need to “re-sync from scratch” all events from the Nextcloud server to my laptop.
  2. When adding new events with org-calendar, always use the active/ current timezone of the device.

Following these two simple rules should be enough to have a timezone consistent org-agenda, properly synced across devices by Nextcloud.

True happiness.