diff options
Diffstat (limited to 'home-modules/services/vdirsyncer.nix')
| -rw-r--r-- | home-modules/services/vdirsyncer.nix | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/home-modules/services/vdirsyncer.nix b/home-modules/services/vdirsyncer.nix new file mode 100644 index 0000000..c5dd2cc --- /dev/null +++ b/home-modules/services/vdirsyncer.nix @@ -0,0 +1,74 @@ +{pkgs, inputs, config, lib, ...}: +let + cfg = config.homesv.vdirsyncer; +in +{ + options.homesv.vdirsyncer = { + enable = lib.mkEnableOption "Enable syncing via vdirsyncer"; + user = lib.mkOption { default = config.home.username; }; + server = lib.mkOption { default= "https://webdav.wilkuu.xyz/dav.php"; }; + }; + config = lib.mkIf cfg.enable { + sops.secrets.webdav_uname = { + sopsFile = ../../secrets/secrets.yaml; + key="${cfg.user}/webdav/username"; + }; + sops.secrets.webdav_pass = { + sopsFile = ../../secrets/secrets.yaml; + key="${cfg.user}/webdav/password"; + }; + services.vdirsyncer = { + enable = true; + frequency = "*:0/5"; # About once in 5 minutes + }; + + systemd.user.services.vdirsyncer.unitConfig.After = [ "sops-nix.service" ]; + + sops.templates."vdirsyncer_config_${cfg.user}" = { + content = '' + [general] + status_path = "~/.vdirsyncer/status/" + + [pair contacts] + a = "contacts_local" + b = "contacts_remote" + collections = ["from a", "from b"] + + [storage contacts_local] + type = "filesystem" + path = "~/.contacts/" + fileext = ".vcf" + + [storage contacts_remote] + type = "carddav" + auth = "digest" + url = "${cfg.server}" + username = "${config.sops.placeholder.webdav_uname}" + password = "${config.sops.placeholder.webdav_pass}" + + [pair calendar] + a = "calendar_local" + b = "calendar_remote" + collections = ["from a", "from b"] + metadata = ["color", "displayname"] + conflict_resolution = "b wins" + + [storage calendar_local] + type = "filesystem" + path = "~/.calendar/" + fileext = ".ics" + + [storage calendar_remote] + type = "caldav" + auth = "digest" + url = "${cfg.server}" + username = "${config.sops.placeholder.webdav_uname}" + password = "${config.sops.placeholder.webdav_pass}" + ''; + }; + home.file.".config/vdirsyncer/config" = { + source = config.lib.file.mkOutOfStoreSymlink config.sops.templates."vdirsyncer_config_${cfg.user}".path; + }; + }; +} + |
