home-manager/modules/services/vdirsyncer.nix
Matthieu Coudron b01eb1eb3b
Add infrastructure for contacts and calendars (#4078)
* Add infrastructure for contacts and calendars

This also adds the modules

  - programs.vdirsyncer,
  - programs.khal, and
  - services.vdirsyncer

that integrate with the new infrastructure.

Co-authored-by: Andrew Scott <3648487+ayyjayess@users.noreply.github.com>
Co-authored-by: Sebastian Zivota <sebastian.zivota@mailbox.org>

wip

* vdirsyncer: allow option userName, disallow userNameCommand

1. account option `userName` is now allowed by `programs.vdirsyncer`

2. The commented out account option `userNameCommand` was required to be set
   by `programs.vdirsyncer` (e.g. as `null`).
   It is now disallowed (commented out) by vdirsyncer.

* khal: added options 'color' and 'priority'
* Apply nixfmt

---------

Co-authored-by: Sebastian Zivota <sebastian.zivota@mailbox.org>
Co-authored-by: Johannes Rosenberger <johannes.rosenberger@jorsn.eu>
Co-authored-by: Johannes Rosenberger <johannes@jorsn.eu>
Co-authored-by: Robert Helgesson <robert@rycee.net>
2023-06-12 23:21:24 +02:00

87 lines
2.3 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.vdirsyncer;
vdirsyncerOptions = [ ]
++ optional (cfg.verbosity != null) "--verbosity ${cfg.verbosity}"
++ optional (cfg.configFile != null) "--config ${cfg.configFile}";
in {
meta.maintainers = [ maintainers.pjones ];
options.services.vdirsyncer = {
enable = mkEnableOption "vdirsyncer";
package = mkOption {
type = types.package;
default = pkgs.vdirsyncer;
defaultText = "pkgs.vdirsyncer";
example = literalExpression "pkgs.vdirsyncer";
description = "The package to use for the vdirsyncer binary.";
};
frequency = mkOption {
type = types.str;
default = "*:0/5";
description = ''
How often to run vdirsyncer. This value is passed to the systemd
timer configuration as the onCalendar option. See
<citerefentry>
<refentrytitle>systemd.time</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information about the format.
'';
};
verbosity = mkOption {
type = types.nullOr
(types.enum [ "CRITICAL" "ERROR" "WARNING" "INFO" "DEBUG" ]);
default = null;
description = ''
Whether vdirsyncer should produce verbose output.
'';
};
configFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
Optional configuration file to link to use instead of
the default file (<filename>$XDG_CONFIG_HOME/vdirsyncer/config</filename>).
'';
};
};
config = mkIf cfg.enable {
systemd.user.services.vdirsyncer = {
Unit = {
Description = "vdirsyncer calendar&contacts synchronization";
PartOf = [ "network-online.target" ];
};
Service = {
Type = "oneshot";
# TODO `vdirsyncer discover`
ExecStart = "${cfg.package}/bin/vdirsyncer sync ${
concatStringsSep " " vdirsyncerOptions
}";
};
};
systemd.user.timers.vdirsyncer = {
Unit = { Description = "vdirsyncer calendar&contacts synchronization"; };
Timer = {
OnCalendar = cfg.frequency;
Unit = "vdirsyncer.service";
};
Install = { WantedBy = [ "timers.target" ]; };
};
};
}