From aadef397ac4aeade6da9286449cfaed611ebf207 Mon Sep 17 00:00:00 2001 From: nathan mccarty Date: Sat, 2 Jul 2022 16:15:19 -0400 Subject: [PATCH] Configure protonmail with mbsync and mu --- certificates/protonmail-levitation.pem | 22 +++++ flake.nix | 3 +- home-manager/default.nix | 9 +- home-manager/machines/levitation.nix | 5 ++ home-manager/services/email.nix | 83 +++++++++++++++++++ .../{programs => services}/syncthing.nix | 0 6 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 certificates/protonmail-levitation.pem create mode 100644 home-manager/services/email.nix rename home-manager/{programs => services}/syncthing.nix (100%) diff --git a/certificates/protonmail-levitation.pem b/certificates/protonmail-levitation.pem new file mode 100644 index 0000000..2133054 --- /dev/null +++ b/certificates/protonmail-levitation.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAJ8hYGGIdDyn13K0d/euZzgwDQYJKoZIhvcNAQELBQAw +VzELMAkGA1UEBhMCQ0gxHzAdBgNVBAoTFlByb3RvbiBUZWNobm9sb2dpZXMgQUcx +EzARBgNVBAsTClByb3Rvbk1haWwxEjAQBgNVBAMTCTEyNy4wLjAuMTAeFw0yMjA2 +MjgxMjM0MzRaFw00MjA2MjMxMjM0MzRaMFcxCzAJBgNVBAYTAkNIMR8wHQYDVQQK +ExZQcm90b24gVGVjaG5vbG9naWVzIEFHMRMwEQYDVQQLEwpQcm90b25NYWlsMRIw +EAYDVQQDEwkxMjcuMC4wLjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDL1asnn8Z9Uvk8zT9hfdCG2MuHfSYSNi4/RNqzA0kACfCw8/fKQx+FDJOWuZAH +7ZJA8+xk3W+AS2VTb35+TtwWSyIE/9cc4exTSx52Mv/EdhrSCbIBPGmp6MPiLFCf +5xPD7Df6WbfGuTcfc6sBIUPcN9qZmud2tiHCb6CCvyWpTrLjaSCAx5eRB4mKlqiz +bFaTrEal/DSgrtziMRwawCLMH3Q7/6PQNTpXzOGXhrhy3b9Fi7aLLHztQWr23C9K +RI22TgawYh/rG7xd/tjSm7qJkhsqvFoq/41I4c/PMNTpVuCWYQyBr7pm9CxrvIsA +of6vbMScUT+h3pWl/cz1lNrhAgMBAAGjcjBwMA4GA1UdDwEB/wQEAwICpDAdBgNV +HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUwqc9Wvucag5zHRnlXw6Ti3kt3aAwDwYDVR0RBAgwBocEfwAAATANBgkq +hkiG9w0BAQsFAAOCAQEAp0YD/BlWvjE7PBMnpR4LOJO/RqxtUgaKMb1DiFCtrBai +n3MHJEVaZsFNk7Golm2ZihmfTFou60JFpt7FtspgQp8XzIA0oXnGqB+6EYFfmC8X +aJK1yrOI1R+nYCY99BGZ8BzyhwXh7ofNQt1+SzP7iBA1HwDy19HVQTRedt3rm61Q +WKudhxo8IIhWSTQ2OLYMSU1PrSdPjS+wUBY8rqrXz6xdHT5yxcwMyTURQJmF6GGl +dCVv5Q89hrvG26rv6ycldLMRbBlaAoNr8JCSbHPpU/KQybSsga0Qui7z0w7mYT4z +NJNXADYysmkqbNuj8pAGTzio64EFqQCDbkWOW7DlSQ== +-----END CERTIFICATE----- diff --git a/flake.nix b/flake.nix index 9c8e47f..6abde5e 100644 --- a/flake.nix +++ b/flake.nix @@ -72,7 +72,7 @@ sops-nix.nixosModules.sops home-manager.nixosModules.home-manager ./modules/default.nix - ({ pkgs, lib, ... }: { + ({ pkgs, lib, config, ... }: { # Configure hostname networking = { hostName = hostName; @@ -90,6 +90,7 @@ useGlobalPkgs = true; extraSpecialArgs = { inputs = inputs; + nixosConfig = config; }; sharedModules = [ ./home-manager/default.nix diff --git a/home-manager/default.nix b/home-manager/default.nix index 6500764..95938e4 100644 --- a/home-manager/default.nix +++ b/home-manager/default.nix @@ -11,7 +11,8 @@ with lib; with nLib; { ./programs/emacs.nix ./programs/image-editing.nix ./programs/media.nix - ./programs/syncthing.nix + ./services/syncthing.nix + ./services/email.nix ]; options = { @@ -20,6 +21,12 @@ with lib; with nLib; { services = { # Synthing, enabled by default on linux desktop syncthing = mkDefaultOption "Syncthing" (config.nathan.config.isDesktop && pkgs.stdenv.isLinux); + # Email syncing + # Disabled by default since this requires manual setup on the machine + # TODO: Get this working on darwin + email = { + enable = mkEnableOption "Email"; + }; }; # Programs programs = { diff --git a/home-manager/machines/levitation.nix b/home-manager/machines/levitation.nix index 4f78a0e..fb35fc4 100644 --- a/home-manager/machines/levitation.nix +++ b/home-manager/machines/levitation.nix @@ -2,6 +2,11 @@ { nathan = { + services = { + email = { + enable = true; + }; + }; config = { isDesktop = true; }; diff --git a/home-manager/services/email.nix b/home-manager/services/email.nix new file mode 100644 index 0000000..303357c --- /dev/null +++ b/home-manager/services/email.nix @@ -0,0 +1,83 @@ +{ config, nixosConfig, lib, pkgs, ... }: + +with lib; { + config = mkIf config.nathan.services.email.enable { + # Packages used for mbsync + mu + protonmail-bridge + home.packages = with pkgs; [ + pass + protonmail-bridge + mu + xapian + ]; + # Configure protonmail as a service + systemd.user.services.protonmail-bridge = { + Unit = { + Description = "Proton Mail Bridge"; + After = [ "graphical-session-pre.target" ]; + Before = [ "mbsync.service" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Type = "simple"; + ExecStart = '' + ${pkgs.protonmail-bridge}/bin/protonmail-bridge --noninteractive + ''; + }; + }; + # Setup accounts + accounts.email = { + maildirBasePath = ".mail"; + accounts = { + "nathan@mccarty.io" = { + maildir = { + path = "nathan@mccarty.io"; + }; + address = "nathan@mccarty.io"; + primary = true; + realName = "Nathan McCarty"; + userName = "nathan@mccarty.io"; + # TODO: Move into `pass` + passwordCommand = "${pkgs.pass}/bin/pass protonmail-bridge-password"; + aliases = [ + "thatonelutenist@protonmail.com" + "nathan@asuran.rs" + "nathan@community.rs" + ]; + imap = { + host = "127.0.0.1"; + port = 1143; + tls = { + useStartTls = true; + certificatesFile = ../../certificates/protonmail-${nixosConfig.networking.hostName}.pem; + }; + }; + smtp = { + host = "127.0.0.1"; + port = 1025; + tls = { + useStartTls = true; + certificatesFile = ../../certificates/protonmail-${nixosConfig.networking.hostName}.pem; + }; + }; + mbsync = { + enable = true; + create = "maildir"; + }; + mu.enable = true; + }; + }; + }; + # Setup mbsync + programs.mbsync = { + enable = true; + }; + services.mbsync = { + enable = true; + postExec = "${pkgs.mu}/bin/mu index"; + }; + # Setup mu + programs.mu = { + enable = true; + }; + }; +} diff --git a/home-manager/programs/syncthing.nix b/home-manager/services/syncthing.nix similarity index 100% rename from home-manager/programs/syncthing.nix rename to home-manager/services/syncthing.nix