diff --git a/user/email.nix b/user/email.nix index f2f5275..31f0ba8 100644 --- a/user/email.nix +++ b/user/email.nix @@ -1,43 +1,82 @@ -{ pkgs, ... }: { +{ pkgs, ... }: +let + + downloadEmails = "${pkgs.offlineimap}/bin/offlineimap"; + afterSync = "${pkgs.notmuch}/bin/notmuch new"; + onNewEmails = "${pkgs.libnotify}/bin/notify-send 'You've got mail!'"; + + defaultAccountSettings = { + astroid.enable = true; + imapnotify = { + enable = true; + boxes = [ "INBOX" ]; + onNotify = downloadEmails; + onNotifyPost = afterSync; + }; + offlineimap = { + enable = true; + postSyncHookCommand = afterSync; + }; + msmtp.enable = true; + notmuch.enable = true; + }; +in +{ accounts.email.accounts = - let - mkAccount = username: host: passName: { - realName = "Leonardo EugĂȘnio"; - address = "${username}@${host}"; - userName = username; - astroid.enable = true; - imap.host = host; - smtp.host = host; - imapnotify = { - enable = true; - onNotify = "${pkgs.isync}/bin/mbsync -a"; - onNotifyPost = - "${pkgs.notmuch}/bin/notmuch new && ${pkgs.libnotify}/bin/ notify-send 'New mail arrived'"; - }; - mbsync = { - enable = true; - create = "both"; - }; - msmtp.enable = true; - notmuch.enable = true; - passwordCommand = toString (pkgs.writeShellScript "get_pass" '' - pass ${passName} | head -n1 - ''); - }; - in { - "personal" = (mkAccount "lelgenio" "disroot.org" "disroot.org") // { primary = true; }; - "work" = mkAccount "leonardo" "wopus.com.br" "Trabalho/wopus_email/leonardo@wopus.com.br"; + "personal" = { + primary = true; + realName = "Leonardo EugĂȘnio"; + address = "lelgenio@disroot.org"; + userName = "lelgenio"; + imap.host = "disroot.org"; + smtp.host = "disroot.org"; + passwordCommand = toString (pkgs.writeShellScript "get_pass" '' + pass "disroot.org" | head -n1 + ''); + } // defaultAccountSettings; + "work" = { + realName = "Leonardo EugĂȘnio"; + address = "leonardo@wopus.com.br"; + userName = "leonardo@wopus.com.br"; + imap.host = "imap.wopus.com.br"; + smtp.host = "smtp.wopus.com.br"; + passwordCommand = toString (pkgs.writeShellScript "get_pass" '' + pass "Trabalho/wopus_email/leonardo@wopus.com.br" | head -n1 + ''); + } // defaultAccountSettings; }; services.imapnotify.enable = true; - programs.mbsync.enable = true; - services.mbsync.enable = true; - services.mbsync.postExec = "${pkgs.notmuch}/bin/notmuch new"; + programs.offlineimap.enable = true; + systemd.user.services.offlineimap = { + Unit = { + Description = "offlineimap mailbox synchronization"; + }; + Service = { + Type = "oneshot"; + ExecStart = downloadEmails; + }; + }; + systemd.user.timers.offlineimap = { + Unit = { Description = "offlineimap mailbox synchronization"; }; + Timer = { + OnCalendar = "*:0/5"; + Unit = "offlineimap.service"; + }; + Install = { WantedBy = [ "timers.target" ]; }; + }; + programs.notmuch.enable = true; + programs.notmuch.hooks.postInsert = onNewEmails; programs.msmtp.enable = true; - programs.astroid.enable = true; + programs.astroid = { + enable = true; + externalEditor = "terminal -e kak %1"; + pollScript = downloadEmails; + extraConfig = { }; + }; }