93 lines
2.3 KiB
Nix
93 lines
2.3 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
inherit (config.my) nextcloud;
|
|
pass_cmd = (
|
|
pkgs.writeShellScript "get_pass" ''
|
|
pass "${nextcloud.pass}" | head -n1
|
|
''
|
|
);
|
|
in
|
|
{
|
|
systemd.user.services.vdirsyncer = {
|
|
Unit.Description = "vdirsyncer calendar and contacts synchronization";
|
|
Service = {
|
|
Type = "oneshot";
|
|
ExecStart = toString (
|
|
pkgs.writeShellScript "run-vdirsyncer" ''
|
|
${pkgs.coreutils}/bin/yes | ${pkgs.vdirsyncer}/bin/vdirsyncer discover
|
|
${pkgs.coreutils}/bin/yes | ${pkgs.vdirsyncer}/bin/vdirsyncer sync
|
|
''
|
|
);
|
|
};
|
|
};
|
|
systemd.user.timers.vdirsyncer = {
|
|
Unit.Description = "vdirsyncer calendar and contacts synchronization";
|
|
Timer = {
|
|
OnCalendar = "*:0/30";
|
|
Unit = "vdirsyncer.service";
|
|
};
|
|
Install.WantedBy = [ "timers.target" ];
|
|
};
|
|
|
|
xdg.configFile = {
|
|
"vdirsyncer/config".text = ''
|
|
[general]
|
|
status_path = "~/.vdirsyncer/status/"
|
|
|
|
[pair contacts]
|
|
a = "contacts_local"
|
|
b = "contacts_remote"
|
|
|
|
collections = ["from a", "from b"]
|
|
|
|
metadata = ["displayname"]
|
|
|
|
[storage contacts_local]
|
|
type = "filesystem"
|
|
path = "~/.local/share/contacts/"
|
|
fileext = ".vcf"
|
|
|
|
[storage contacts_remote]
|
|
type = "carddav"
|
|
url = "https://${nextcloud.host}/remote.php/dav/addressbooks/users/${nextcloud.user}/"
|
|
username = "${nextcloud.user}"
|
|
password.fetch = [ "command", "${pass_cmd}" ]
|
|
|
|
[pair calendar]
|
|
a = "calendar_local"
|
|
b = "calendar_remote"
|
|
collections = ["from a", "from b"]
|
|
metadata = ["displayname", "color"]
|
|
conflict_resolution = "b wins"
|
|
|
|
[storage calendar_local]
|
|
type = "filesystem"
|
|
path = "~/.local/share/calendars/"
|
|
fileext = ".ics"
|
|
|
|
[storage calendar_remote]
|
|
type = "caldav"
|
|
url = "https://${nextcloud.host}/remote.php/dav/calendars/${nextcloud.user}/"
|
|
username = "${nextcloud.user}"
|
|
password.fetch = [ "command", "${pass_cmd}" ]
|
|
'';
|
|
"todoman/config.py".text = ''
|
|
path = "~/.local/share/calendars/*"
|
|
date_format = "%Y-%m-%d"
|
|
time_format = "%H:%M"
|
|
default_list = "Personal"
|
|
default_due = 48
|
|
'';
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
vdirsyncer
|
|
todoman
|
|
];
|
|
}
|