{ config, lib, user, secrets, domain, ... }: let calendars = [ { name = "Preservation"; primary = true; url = "https://dav.${domain}/nx2/preservation/"; color = "#dddddd"; } { name = "Effort"; primary = false; url = "https://dav.${domain}/nx2/effort/"; color = "#dd2222"; } { name = "Experience"; primary = false; url = "https://dav.${domain}/nx2/experience/"; color = "#2222dd"; } { name = "Exposure"; primary = false; url = "https://dav.${domain}/nx2/exposure/"; color = "#22aa22"; } { name = "Engagement"; primary = false; url = "https://dav.${domain}/nx2/engagement/"; color = "#8800CC"; } ]; in { accounts.calendar.accounts = let makeCalendar = url: primary: color: { inherit primary; remote = { type = "caldav"; userName = user; inherit url; }; }; m = cc: lib.attrsets.mergeAttrsList ( map (c: { "${c.name}" = makeCalendar c.url c.primary c.color;}) cc ); in m calendars; # TODO: Replace this once https://github.com/nix-community/home-manager/pull/5484 is merged. # Make sure it works, though, including the order of calendars. programs.thunderbird.settings = let makeThunderbirdCalendar = cal: let calendarAccountSafeName = (builtins.replaceStrings ["."] ["-"]) cal.name; in { "calendar.registry.${calendarAccountSafeName}.cache.enabled" = true; "calendar.registry.${calendarAccountSafeName}.calendar-main-default" = cal.primary; "calendar.registry.${calendarAccountSafeName}.calendar-main-in-composite" = true; "calendar.registry.${calendarAccountSafeName}.color" = cal.color; "calendar.registry.${calendarAccountSafeName}.name" = cal.name; "calendar.registry.${calendarAccountSafeName}.type" = "caldav"; "calendar.registry.${calendarAccountSafeName}.uri" = config.accounts.calendar.accounts.${cal.name}.remote.url; "calendar.registry.${calendarAccountSafeName}.username" = config.accounts.calendar.accounts.${cal.name}.remote.userName; }; in lib.attrsets.mergeAttrsList ( map (cal: makeThunderbirdCalendar cal) calendars ) // { "calendar.registry.sleep-as-android.cache.enabled" = true; "calendar.registry.sleep-as-android.calendar-main-in-composite" = true; "calendar.registry.sleep-as-android.color" = "#222233"; "calendar.registry.sleep-as-android.name" = "Sleep As Android"; "calendar.registry.sleep-as-android.type" = "ics"; "calendar.registry.sleep-as-android.readOnly" = true; "calendar.registry.sleep-as-android.uri" = secrets.calendar.sleep-as-android-url; "calendar.list.sortOrder" = lib.fold (cal: acc: cal.name + " " + acc) "" calendars; # Keep these after removing the above. "calendar.week.start" = 1; }; }