From 89fa46aa6de88db66b89dd22de31962d112468d1 Mon Sep 17 00:00:00 2001 From: "Lennart J. Kurzweg (Nx2)" Date: Sun, 19 Jan 2025 11:43:15 +0100 Subject: [PATCH] calendar ++ --- home-modules/calendar.nix | 113 +++++++++++++++++++++--------------- system-modules/calendar.nix | 5 ++ 2 files changed, 70 insertions(+), 48 deletions(-) create mode 100644 system-modules/calendar.nix diff --git a/home-modules/calendar.nix b/home-modules/calendar.nix index aa168c1..27069f5 100644 --- a/home-modules/calendar.nix +++ b/home-modules/calendar.nix @@ -1,81 +1,98 @@ -{ config, lib, user, secrets, domain, ... }: let +{ pkgs, lib, user, secrets, domain, ... }: let calendars = [ { name = "Preservation"; primary = true; - url = "https://dav.${domain}/nx2/preservation/"; + url = "https://dav.${domain}/${user}/preservation/"; color = "#dddddd"; } { name = "Effort"; - primary = false; - url = "https://dav.${domain}/nx2/effort/"; + url = "https://dav.${domain}/${user}/effort/"; color = "#dd2222"; } { name = "Experience"; - primary = false; - url = "https://dav.${domain}/nx2/experience/"; + url = "https://dav.${domain}/${user}/experience/"; color = "#2222dd"; } { name = "Exposure"; - primary = false; - url = "https://dav.${domain}/nx2/exposure/"; + url = "https://dav.${domain}/${user}/exposure/"; color = "#22aa22"; } { name = "Engagement"; - primary = false; - url = "https://dav.${domain}/nx2/engagement/"; + url = "https://dav.${domain}/${user}/engagement/"; color = "#8800CC"; } + { + name = "Sleep as Android"; + url = secrets.calendar.sleep-as-android-url; + color = "#111111"; + read-only = true; + type = "ics"; + } + { + name = "LEC"; + url = "https://zlypher.github.io/lol-events/cal/league-of-legends-lec.ical"; + color = "#A87000"; + read-only = true; + type = "ics"; + } + { + name = "Handball Männer"; + url = "http://i.cal.to/ical/108/dhb/handball-nationalmannschaft/c687e97f.bc7c3eb6-11a0e356.ics"; + color = "#880023"; + read-only = true; + type = "ics"; + } ]; + default_set = { + # name = + # url = + color = "#777777"; + read-only = false; + primary = false; + type = "caldav"; + }; in { + + home.packages = with pkgs; [ + gnome-calendar + thunderbird + ]; + accounts.calendar.accounts = let - makeCalendar = url: primary: color: { + transform_caledar_set = calendar_set: with calendar_set; { # transform set for accounts.calendar.accounts endpoint inherit primary; remote = { - type = "caldav"; - userName = user; - inherit url; + inherit url name; + userName = user; # my globally set username }; }; - 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 + map (calendar: { + "${calendar.name}" = transform_caledar_set ( default_set // calendar ); + }) calendars + ); + + programs.thunderbird.settings = let + to_safe_name = name: (builtins.replaceStrings ["."] ["-"]) name; + in (lib.attrsets.mergeAttrsList ( + map (calendar: with ( default_set // calendar ); { + "calendar.registry.${to_safe_name calendar.name}.cache.enabled" = true; + "calendar.registry.${to_safe_name calendar.name}.calendar-main-default" = primary; + "calendar.registry.${to_safe_name calendar.name}.calendar-main-in-composite" = true; + "calendar.registry.${to_safe_name calendar.name}.color" = color; + "calendar.registry.${to_safe_name calendar.name}.name" = name; + "calendar.registry.${to_safe_name calendar.name}.type" = type; + "calendar.registry.${to_safe_name calendar.name}.uri" = url; + "calendar.registry.${to_safe_name calendar.name}.username" = user; + "calendar.registry.${to_safe_name calendar.name}.readOnly" = read-only; + }) 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.list.sortOrder" = lib.fold (calendar: acc: calendar.name + " " + acc) "" calendars; "calendar.week.start" = 1; - }; + }); } diff --git a/system-modules/calendar.nix b/system-modules/calendar.nix new file mode 100644 index 0000000..00b81e3 --- /dev/null +++ b/system-modules/calendar.nix @@ -0,0 +1,5 @@ +{ ... }: +{ + programs.dconf.enable = true; + services.gnome.evolution-data-server.enable = true; +}