{
  config,
  pkgs,
  ...
}: {
  home.packages = with pkgs; [
    protonmail-bridge-gui
    (writeShellScriptBin "mbsync-ensure-pass"
      (builtins.readFile ./mbsync-ensure-pass.sh))
    (writeShellScriptBin "davmail-setup" ''
      systemctl --user restart davmail # Ensure config file is present
      systemctl --user stop davmail
      ${davmail}/bin/davmail -n ~/.davmail.properties
      systemctl --user restart davmail
    '')
  ];
  xdg.configFile."protonmail/bridge-v3/keychain.json".text = builtins.toJSON {
    Helper = "secret-service-dbus";
  };
  accounts.email = {
    maildirBasePath = "Mail";
    accounts = let
      realName = "Evie Litherland-Smith";
    in {
      proton = let
        address = "e.litherlandsmith@proton.me";
        host = "127.0.0.1";
        tls.enable = false;
      in {
        inherit realName address;
        primary = true;
        maildir.path = "Proton";
        imap = {
          inherit host tls;
          port = 1143;
        };
        smtp = {
          inherit host tls;
          port = 1025;
        };
        aliases = ["evie@xenia.me.uk" "evie@litherlandsmith.slmail.me"];
        userName = address;
        passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
        mu.enable = true;
        msmtp = {
          enable = true;
          extraConfig = {
            tls = "off";
            auth = "login";
          };
        };
        mbsync = {
          enable = true;
          create = "both";
          expunge = "both";
          remove = "both";
          patterns = ["*" "!All Mail" "!Labels*" "!Starred" "!Recovered Messages"];
          subFolders = "Verbatim";
          extraConfig.account.AuthMechs = "LOGIN";
        };
      };
      icloud = let
        address = "e.litherlandsmith@icloud.com";
      in {
        inherit realName address;
        primary = false;
        maildir.path = "iCloud";
        imap.host = "imap.mail.me.com";
        smtp.host = "smtp.mail.me.com";
        userName = address;
        passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
        mu.enable = true;
        msmtp.enable = true;
        mbsync = {
          enable = true;
          create = "both";
          expunge = "both";
          remove = "both";
          patterns = ["*" "!Notes"];
          subFolders = "Verbatim";
        };
      };
      outlook = let
        address = "evie.litherland-smith@ukaea.uk";
        host = "127.0.0.1";
        tls.enable = false;
      in {
        inherit realName address;
        primary = false;
        maildir.path = "Outlook";
        imap = {
          inherit host tls;
          port = 1144;
        };
        smtp = {
          inherit host tls;
          port = 1026;
        };
        aliases = ["elitherl@jet.uk"];
        userName = address;
        passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup email ${address}";
        mu.enable = true;
        msmtp = {
          enable = true;
          extraConfig = {
            tls = "off";
            auth = "login";
          };
        };
        mbsync = {
          enable = true;
          create = "both";
          expunge = "both";
          remove = "both";
          patterns = [
            "*"
            "!Conversation History"
            "!Snoozed"
            "!Social Activity Notifications"
            "!Sync Issues*"
            "!Unsent Messages"
          ];
          subFolders = "Verbatim";
          extraConfig.account.AuthMechs = "LOGIN";
        };
      };
    };
  };
  programs = {
    mu.enable = true;
    msmtp.enable = true;
    mbsync = {
      enable = true;
      groups.inboxes = {
        proton = ["INBOX"];
        icloud = ["INBOX"];
        outlook = ["INBOX"];
      };
    };
  };
  systemd.user.services.davmail = {
    Unit = {
      Description = "Davmail server";
      Wants = ["network-online.target"];
      After = ["network-online.target"];
    };
    Service = {
      Environment = ["PATH=/run/current-system/sw/bin/:$PATH"];
      Restart = "always";
      ExecStartPre = with config.home; ''
        /bin/sh -c "if [ ! -f ${homeDirectory}/.davmail.properties ]; then cp ${./davmail.properties} ${homeDirectory}/.davmail.properties; fi; chmod 644 ${homeDirectory}/.davmail.properties"
      '';
      ExecStart = "${pkgs.davmail}/bin/davmail -notray ${config.home.homeDirectory}/.davmail.properties";
    };
    Install.WantedBy = ["default.target"];
  };
}