Adding CalDAV calendars to org-agenda
Since I’m trying to use org-agenda
more, I spent a bit of time setting it up to show my CalDAV calendars (usually work meetings) using vdirsyncer, khal, khalel and nix/home-manager. I didn’t find any HOWTO on the web, so I had to read the documentation of the tools (yes, I know, the horror :D) to set it up, hence this write-up.
Let’s start with home-manager
to install and configure vdirsyncer
(which sync CalDAV calendars locally) and khal
(which is an interface for the local calendars). The home-manager
community provides a nice way to configure calendars: accounts.calendar
.
accounts.calendar = {
basePath = ".calendars";
accounts = {
sula_personal = {
name = "personal";
khal = {
enable = true;
readOnly = false;
type = "calendar";
};
vdirsyncer = {
enable = true;
auth = "basic";
conflictResolution = "remote wins";
timeRange = {
end = "datetime.now() + timedelta(days=365)";
start = "datetime.now() - timedelta(days=365)";
};
};
primary = true;
remote = {
url = "https://nextcloud.fqdn/remote.php/dav/calendars/tyx/personal";
passwordCommand = [ "gopass" "-o" "path/to/password" ];
type = "caldav";
userName = "tyx";
};
};
};
};
Let’s not forget to enable those two programs, and to configure khal
for khalel
usage:
programs.vdirsyncer.enable = true;
programs.khal = {
enable = true;
locale = {
timeformat = "%H:%M";
dateformat = "%Y-%m-%d";
longdateformat = "%Y-%m-%d %a";
datetimeformat = "%Y-%m-%d %H:%M";
longdatetimeformat = "%Y-%m-%d %H:%M";
};
};
Now, onto the khalel
configuration:
(use-package khalel
:after org
:config
(khalel-add-capture-template)
(setq khalel-capture-key "e")
(setq khalel-import-org-file (concat org-directory "/" "calendar.org"))
(setq khalel-import-org-file-confirm-overwrite nil)
(setq khalel-import-start-date "-30d")
(setq khalel-import-end-date "+30d"))
And adding the newly created calendar.org
to the agenda:
(setq org-agenda-files
(list
"~/path/to/todo.org"
"~/path/to/calendar.org"
)
)
Now that everything is set up, you can M-x
khalel-import-events
and you’ll see your events in you agenda (with C-c a a
for example).