{ config, pkgs, ... }: { programs = { vdirsyncer.enable = true; 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"; }; }; }; services.vdirsyncer = { inherit (config.programs.vdirsyncer) enable package; frequency = "*:0/30"; # Every 30 minutes }; accounts.calendar = { basePath = "Calendar"; accounts = { main = let url = "dav.xenia.me.uk"; in { primary = true; primaryCollection = "personal"; local = { type = "filesystem"; fileExt = ".ics"; }; remote = let userName = "pixelifytica"; in { inherit userName; url = "https://${url}"; type = "caldav"; passwordCommand = [ "${pkgs.libsecret}/bin/secret-tool" "lookup" "url" "${url}" "user" "${userName}" ]; }; vdirsyncer = { inherit (config.programs.vdirsyncer) enable; auth = "basic"; collections = [ "personal" "work" "other" ]; metadata = [ "displayname" ]; timeRange = { start = "datetime.now() - timedelta(days=365)"; end = "datetime.now() + timedelta(days=365)"; }; }; khal = { inherit (config.programs.khal) enable; type = "discover"; addresses = with config.accounts.email.accounts.proton; [ address ] ++ aliases; }; }; }; }; }