110 lines
2.8 KiB
Nix
110 lines
2.8 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.home.roles.email;
|
|
in
|
|
{
|
|
options.home.roles.email = {
|
|
enable = mkEnableOption "Enable email with mu4e, mbsync, and msmtp";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
home.packages = with pkgs; [
|
|
isync # provides mbsync for IMAP sync
|
|
msmtp # for SMTP sending
|
|
mu # email indexer for mu4e
|
|
mu.mu4e # mu4e elisp files for Emacs
|
|
openssl # for certificate management
|
|
];
|
|
|
|
# Ensure Mail directory exists
|
|
home.file."Mail/.keep".text = "";
|
|
|
|
# mbsync configuration
|
|
home.file.".mbsyncrc".text = ''
|
|
# IMAP Account Configuration
|
|
IMAPAccount proton
|
|
Host proton.johnogle.info
|
|
Port 143
|
|
User john@ogle.fyi
|
|
PassCmd "${pkgs.rbw}/bin/rbw get proton.johnogle.info"
|
|
TLSType STARTTLS
|
|
AuthMechs PLAIN
|
|
|
|
# Remote Storage
|
|
IMAPStore proton-remote
|
|
Account proton
|
|
|
|
# Local Storage
|
|
MaildirStore proton-local
|
|
Path ~/Mail/
|
|
Inbox ~/Mail/INBOX
|
|
SubFolders Verbatim
|
|
|
|
# Channel Configuration - Sync All
|
|
Channel proton
|
|
Far :proton-remote:
|
|
Near :proton-local:
|
|
Patterns *
|
|
Create Both
|
|
Expunge Both
|
|
SyncState *
|
|
'';
|
|
|
|
# msmtp configuration
|
|
home.file.".msmtprc".text = ''
|
|
# Default settings
|
|
defaults
|
|
auth plain
|
|
tls on
|
|
tls_starttls on
|
|
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
|
logfile ${config.home.homeDirectory}/.msmtp.log
|
|
|
|
# Proton mail account
|
|
account proton
|
|
host proton.johnogle.info
|
|
port 25
|
|
from john@ogle.fyi
|
|
user john@ogle.fyi
|
|
passwordeval rbw get proton.johnogle.info
|
|
|
|
# Set default account
|
|
account default : proton
|
|
'';
|
|
|
|
# Systemd service for mail sync
|
|
systemd.user.services.mbsync = {
|
|
Unit = {
|
|
Description = "Mailbox synchronization service";
|
|
After = [ "network-online.target" ];
|
|
Wants = [ "network-online.target" ];
|
|
};
|
|
Service = {
|
|
Type = "oneshot";
|
|
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.isync}/bin/mbsync -a && (${pkgs.mu}/bin/mu info >/dev/null 2>&1 || ${pkgs.mu}/bin/mu init --maildir ~/Mail --personal-address=john@ogle.fyi) && ${pkgs.mu}/bin/mu index'";
|
|
Environment = "PATH=${pkgs.rbw}/bin:${pkgs.coreutils}/bin";
|
|
StandardOutput = "journal";
|
|
StandardError = "journal";
|
|
};
|
|
};
|
|
|
|
# Systemd timer for automatic sync
|
|
systemd.user.timers.mbsync = {
|
|
Unit = {
|
|
Description = "Mailbox synchronization timer";
|
|
};
|
|
Timer = {
|
|
OnBootSec = "2min";
|
|
OnUnitActiveSec = "5min";
|
|
Unit = "mbsync.service";
|
|
};
|
|
Install = {
|
|
WantedBy = [ "timers.target" ];
|
|
};
|
|
};
|
|
};
|
|
}
|