{ config, lib, pkgs, this, ... }: with lib; let cfg = config.nixfiles.modules.profiles.email; in { options.nixfiles.modules.profiles.email.enable = mkEnableOption "Local Email management" // {default = this.isHeadful;}; config = mkIf cfg.enable { hm = { accounts.email = { maildirBasePath = "${config.my.home}/doc/mail"; accounts = let mkAccount = attrs: mkMerge [ { mbsync = { enable = true; create = "both"; expunge = "both"; patterns = ["*"]; }; msmtp.enable = true; mu.enable = true; thunderbird = { enable = hasSuffix "linux" this.system; settings = id: { "mail.identity.id_${id}.compose_html" = false; "mail.identity.id_${id}.reply_on_top" = 0; }; }; } attrs ]; getPassword = { path, line ? 0, }: assert (builtins.isInt line); concatStringsSep " " ( [ (getExe config.hm.programs.password-store.package) "show" path ] ++ optionals (line > 0) [ "|" (getExe pkgs.gnused) "-e" "'${toString line}!d'" ] ); in { shire = mkAccount rec { address = my.email; aliases = [address "frodo@rohan.net" "azahi@shire.net"]; realName = my.fullname; gpg = { inherit (my.pgp) key; signByDefault = true; encryptByDefault = false; }; primary = true; imap = { host = "shire.net"; port = 993; tls.enable = true; }; smtp = { host = "shire.net"; port = 465; tls.enable = true; }; userName = "azahi@shire.net"; passwordCommand = getPassword { path = "email/shire.net/azahi"; }; }; yahoo = mkAccount rec { address = "admin@yahoo.com"; aliases = [address "admin@yahoo.com"]; realName = "Firstname Lastname"; flavor = "yahoo.com"; userName = "admin@yahoo.com"; passwordCommand = getPassword { path = "email/yahoo.com/admin"; line = 2; }; }; }; }; programs = { mbsync.enable = true; msmtp.enable = true; mu.enable = true; }; }; }; }