aboutsummaryrefslogtreecommitdiff
path: root/modules/workstation/mail/timer.nix
{ pkgs, config, ... }:

let
  startISync = pkgs.writeShellScriptBin "start-isync" ''
    systemctl start isync.service
  '';
in
{
  # Might want to run mbsync manually
  environment.systemPackages = with pkgs; [ isync startISync ];

  # Setup spacekookie-mail user
  users.users.spacekookie-mail = {
    createHome = true;
    group = "spacekookie";
    home = "/var/lib/spacekookie-mail";
  };
  
  systemd.services.isync =
    let
      maildir = "${config.users.users.spacekookie.home}/Office/mail";
      mbsyncrc = pkgs.writeText "mbsyncrc"
        (import ../../../ext/mail/mbsyncrc.nix { inherit maildir; });
    in with pkgs; {
      serviceConfig.Type = "oneshot";
      script = ''
        ${sudo}/bin/sudo -u spacekookie-mail \
        ${isync}/bin/mbsync -a -V -c ${mbsyncrc}
      '';
      postStart = ''
        ${findutils}/bin/find \
            "${maildir}" \
            \! -name .mbsyncstate* \
            \( \
              \( \! -user spacekookie -o \! -group spacekookie \) \
              -exec ${coreutils}/bin/chown spacekookie:spacekookie '{}' \; \
            , \
              -type f \! -perm 660 \
              -exec ${coreutils}/bin/chmod 0660 '{}' \; \
            , \
              -type d \! -perm 770 \
              -exec ${coreutils}/bin/chmod 0770 '{}' \; \
            \)
            ${sudo}/bin/sudo -u spacekookie \
              ${notmuch}/bin/notmuch new
      '';
    };

  systemd.timers.isync = {
    timerConfig.Unit = "isync.service";
    timerConfig.OnCalendar = "*:0/5";
    timerConfig.Persistent = "true";
    after = [ "network-online.target" ];
    wantedBy = [ "timers.target" ];
  };

  # This sudoers rule allows anyone in the wheel group to run this
  # particular command without a password. Make sure that 'startISync'
  # is present in a path (environment.systemPackages above)!
  security.sudo.extraRules = [
    { commands = [ { command = "${startISync}/bin/start-isync";
                     options = [ "NOPASSWD" ]; } ];
      groups = [ "wheel" ];  }
  ];
}