381 lines
14 KiB
Nix
381 lines
14 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
let
|
|
passcmd = id: "${pkgs.pass}/bin/pass ${id}";
|
|
ticks = "''";
|
|
|
|
in {
|
|
# Maildir <-> Server communication
|
|
# --------------------------------
|
|
# mbsync: MailDir <-> IMAP
|
|
# msmtp: sendmail interface sending mails through your provider.
|
|
|
|
# client backend
|
|
# --------------
|
|
# notmuch: Tagdatabase for Emails
|
|
# muchsync: notmuch database synctool
|
|
|
|
# clients
|
|
# -------
|
|
# neomutt
|
|
|
|
home-manager.users.mainUser.accounts.email.accounts = {
|
|
palo_van_dalo-gmx = {
|
|
primary = false;
|
|
address = "palo_van_dalo@gmx.de";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "palo_van_dalo@gmx.de";
|
|
passwordCommand = passcmd "mail/gmx/palo_van_dalo@gmx.de";
|
|
smtp = {
|
|
host = "smtp.gmx.net";
|
|
port = 465;
|
|
};
|
|
notmuch.enable = true;
|
|
msmtp = { enable = true; };
|
|
};
|
|
ingolf-wagner-gmx = {
|
|
primary = false;
|
|
address = "ingolf.wagner@gmx.de";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "ingolf.wagner@gmx.de";
|
|
passwordCommand = passcmd "mail/gmx/ingolf.wagner@gmx.de";
|
|
smtp = {
|
|
host = "smtp.gmx.net";
|
|
port = 465;
|
|
};
|
|
notmuch.enable = true;
|
|
msmtp = { enable = true; };
|
|
};
|
|
pali_palo = {
|
|
primary = false;
|
|
address = "pali_palo@web.de";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "pali_palo@web.de";
|
|
passwordCommand = passcmd "mail/web.de/pali_palo@web.de";
|
|
smtp = {
|
|
host = "smtp.web.de";
|
|
port = 465;
|
|
};
|
|
notmuch.enable = true;
|
|
msmtp = {
|
|
enable = true;
|
|
# msmtp --serverinfo --tls --tls-certcheck=off -a gmail
|
|
# tls.fingerprint = "77:2F:E1:F0:1C:9C:00:45:36:D5:0B:25:17:76:AC:7F:0E:79:68:27:8C:E9:E1:F6:BD:DF:F1:6F:1E:8C:85:18";
|
|
# tls.fingerprint = "3F:B7:F9:7A:AC:9C:D7:C4:2E:8A:C1:F9:90:B5:D7:D1:8E:E2:F7:7D:9D:DB:FA:01:55:27:D2:79:5F:F8:C1:64";
|
|
};
|
|
};
|
|
gmail = {
|
|
# for google accounts you have to allow 'less secure apps' in accounts.google.com
|
|
primary = true;
|
|
address = "palipalo9@googlemail.com";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "palipalo9@googlemail.com";
|
|
passwordCommand = passcmd "mail/gmail/palipalo9@googlemail.com";
|
|
smtp = {
|
|
host = "smtp.gmail.com";
|
|
port = 465;
|
|
};
|
|
notmuch.enable = true;
|
|
msmtp = {
|
|
enable = true;
|
|
# msmtp --serverinfo --tls --tls-certcheck=off -a gmail
|
|
# tls.fingerprint = "77:2F:E1:F0:1C:9C:00:45:36:D5:0B:25:17:76:AC:7F:0E:79:68:27:8C:E9:E1:F6:BD:DF:F1:6F:1E:8C:85:18";
|
|
# tls.fingerprint = "3F:B7:F9:7A:AC:9C:D7:C4:2E:8A:C1:F9:90:B5:D7:D1:8E:E2:F7:7D:9D:DB:FA:01:55:27:D2:79:5F:F8:C1:64";
|
|
};
|
|
gpg = {
|
|
encryptByDefault = true;
|
|
signByDefault = true;
|
|
key = "42AC51C9482D0834CF488AF1389EC2D64AC71EAC";
|
|
};
|
|
};
|
|
ingolf-wagner = {
|
|
primary = false;
|
|
address = "contact@ingolf-wagner.de";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "contact@ingolf-wagner.de";
|
|
passwordCommand = passcmd "mail/siteground/contact@ingolf-wagner.de";
|
|
notmuch.enable = true;
|
|
smtp = {
|
|
host = "securees5.sgcpanel.com";
|
|
port = 587;
|
|
tls.useStartTls = true;
|
|
};
|
|
msmtp = {
|
|
enable = true;
|
|
# msmtp --serverinfo --tls --tls-certcheck=off -a ingolf-wagner
|
|
tls.fingerprint =
|
|
"79:7C:A8:AB:B9:70:02:DC:18:A5:25:10:BC:0B:8D:84:01:9F:57:D3:1C:FE:4C:7D:8B:54:00:7A:94:C7:D2:46";
|
|
};
|
|
gpg = {
|
|
encryptByDefault = true;
|
|
signByDefault = true;
|
|
key = "42AC51C9482D0834CF488AF1389EC2D64AC71EAC";
|
|
};
|
|
};
|
|
gaykraft = {
|
|
primary = false;
|
|
address = "root@gaykraft.com";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "root@gaykraft.com";
|
|
passwordCommand = "mail/gaykraft.com/root@gaykraft.com";
|
|
mbsync = {
|
|
enable = true;
|
|
create = "both";
|
|
};
|
|
smtp = {
|
|
host = "mail.gaykraft.com";
|
|
port = 587;
|
|
tls.useStartTls = true;
|
|
};
|
|
msmtp = {
|
|
enable = true;
|
|
# msmtp --serverinfo --tls --tls-certcheck=off -a gaykraft
|
|
tls.fingerprint =
|
|
"08:42:73:72:3E:68:7D:55:89:7A:30:02:4B:CD:30:35:F1:6D:3E:7A:DD:A8:B6:84:67:25:37:F0:4F:7F:86:FE";
|
|
};
|
|
notmuch.enable = true;
|
|
};
|
|
c-base = {
|
|
primary = false;
|
|
address = "palo@c-base.org";
|
|
aliases = [ ];
|
|
realName = "Ingolf Wagner";
|
|
userName = "palo";
|
|
passwordCommand = passcmd "mail/c-base/palo@c-base.org";
|
|
smtp = {
|
|
host = "c-mail.c-base.org";
|
|
port = 465;
|
|
};
|
|
notmuch.enable = true;
|
|
msmtp = {
|
|
enable = true;
|
|
# msmtp --serverinfo --tls --tls-certcheck=off -a c-base
|
|
tls.fingerprint =
|
|
"9C:82:3B:0F:31:CE:1B:8E:96:00:CC:C9:FF:E7:BE:66:95:92:4F:22:DD:D6:2E:0E:1D:90:76:BE:8E:9E:8E:16";
|
|
};
|
|
gpg = {
|
|
encryptByDefault = true;
|
|
signByDefault = true;
|
|
key = "42AC51C9482D0834CF488AF1389EC2D64AC71EAC";
|
|
};
|
|
};
|
|
};
|
|
|
|
# install mail programs
|
|
home-manager.users.mainUser.programs.msmtp.enable = true;
|
|
home-manager.users.mainUser.programs.notmuch.enable = true;
|
|
|
|
# enable html emails
|
|
home-manager.users.mainUser.home.file.".mailcap".text = ''
|
|
text/html; ${pkgs.elinks}/bin/elinks -dump ; copiousoutput;
|
|
'';
|
|
|
|
home-manager.users.mainUser.home.file.".muttrc".text = let
|
|
|
|
index_format = pkgs.writers.writeDash "index_format" ''
|
|
# http://www.mutt.org/doc/manual/#formatstrings
|
|
recipent="$(echo $1 | sed 's/[^,]*<\([^>]*\)[^,]*/ \1/g')"
|
|
echo "%4C %Z %?GI?%GI& ? %[%y-%m-%d %H:%M] %-20.20a %?M?(%3M)& ? %s %> $recipent %?g?%g?%"
|
|
'';
|
|
in ''
|
|
# gpg
|
|
set crypt_use_gpgme=yes
|
|
set crypt_autosign=yes
|
|
set crypt_verify_sig=yes
|
|
set crypt_replysign=yes
|
|
set crypt_replyencrypt=yes
|
|
set crypt_replysignencrypted=yes
|
|
|
|
# mutt is not smart enough to see if I have a key or not
|
|
#set crypt_autoencrypt = yes
|
|
|
|
set pgp_check_gpg_decrypt_status_fd
|
|
set pgp_use_gpg_agent = yes
|
|
set pgp_self_encrypt = yes # needs default key
|
|
set pgp_default_key = 42AC51C9482D0834CF488AF1389EC2D64AC71EAC
|
|
|
|
# read html mails
|
|
auto_view text/html
|
|
set mailcap_path = ~/.mailcap
|
|
|
|
# notmuch
|
|
set nm_default_uri="notmuch://$HOME/Maildir" # path to the maildir
|
|
set nm_record = yes
|
|
set nm_record_tags = "-inbox me archive"
|
|
set virtual_spoolfile=yes # enable virtual folders
|
|
|
|
set sendmail=${
|
|
pkgs.writers.writeBash "msmtp" ''
|
|
${pkgs.coreutils}/bin/tee >(${pkgs.notmuch}/bin/notmuch insert --create-folder +sent) | \
|
|
${pkgs.msmtp}/bin/msmtpq "$@"
|
|
''
|
|
}
|
|
|
|
set from="contact@ingolf-wagner.de"
|
|
#alternates ^.*@ingolf-wagner\.de$ ^.*@.*\.r$
|
|
set use_from=yes
|
|
set envelope_from=yes
|
|
set reverse_name
|
|
|
|
set sort=threads
|
|
|
|
set index_format="${index_format} %r |"
|
|
|
|
virtual-mailboxes "INBOX" "notmuch://?query=(tag:inbox or (tag:sent and not tag:archive)) AND NOT tag:discourse AND NOT tag:muted AND NOT tag:list AND NOT tag:spam AND NOT tag:fraud"
|
|
virtual-mailboxes "Unread" "notmuch://?query=(tag:unread AND NOT tag:muted)"
|
|
virtual-mailboxes "Space left" "notmuch://?query=((tag:spaceleft OR tag:space-lef) AND NOT tag:muted)"
|
|
virtual-mailboxes "Sononym" "notmuch://?query=(tag:sononym AND NOT tag:muted)"
|
|
virtual-mailboxes "c-base" "notmuch://?query=(tag:cbase AND NOT tag:muted)"
|
|
virtual-mailboxes "shopping" "notmuch://?query=((tag:billing OR tag:shopping) AND NOT tag:muted)"
|
|
virtual-mailboxes "Immobilien" "notmuch://?query=(tag:immobilien AND NOT tag:muted)"
|
|
virtual-mailboxes "NixOS Github" "notmuch://?query=(tag:github AND tag:nixos AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.all" "notmuch://?query=(tag:discourse AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.development" "notmuch://?query=(tag:discourse AND tag:development AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.announcements" "notmuch://?query=(tag:discourse AND tag:announcements AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.links" "notmuch://?query=(tag:discourse AND tag:links AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.games" "notmuch://?query=(tag:discourse AND tag:games AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.meta" "notmuch://?query=(tag:discourse AND tag:meta AND NOT tag:muted)"
|
|
virtual-mailboxes "Discourse.events" "notmuch://?query=(tag:discourse AND tag:events AND NOT tag:muted)"
|
|
virtual-mailboxes "Flagged" "notmuch://?query=tag:flagged"
|
|
virtual-mailboxes "Archive" "notmuch://?query=tag:archive"
|
|
virtual-mailboxes "Sent" "notmuch://?query=tag:sent"
|
|
virtual-mailboxes "Fraud" "notmuch://?query=(tag:fraud)"
|
|
virtual-mailboxes "Junk" "notmuch://?query=(tag:junk OR tag:spam OR tag:fraud)"
|
|
virtual-mailboxes "All" "notmuch://?query=*"
|
|
|
|
tag-transforms "junk" "k" \
|
|
"unread" "u" \
|
|
"replied" "↻" \
|
|
"TODO" "T"
|
|
|
|
# notmuch bindings
|
|
bind index \\\\ noop
|
|
bind pager \\ noop
|
|
bind pager \\\\ noop
|
|
macro index \\\\ "<vfolder-from-query>" # looks up a hand made query
|
|
macro pager \\\\ "<vfolder-from-query>" # looks up a hand made query
|
|
|
|
macro index + "<modify-labels>+flagged\n<sync-mailbox>" # tag as starred
|
|
macro pager + "<modify-labels>+flagged\n<sync-mailbox>" # tag as starred
|
|
macro index ! "<modify-labels>+flagged\n<sync-mailbox>" # tag as starred
|
|
macro pager ! "<modify-labels>+flagged\n<sync-mailbox>" # tag as starred
|
|
macro index - "<modify-labels>-flagged\n<sync-mailbox>" # tag as unstarred
|
|
macro pager - "<modify-labels>-flagged\n<sync-mailbox>" # tag as unstarred
|
|
|
|
# Address Book
|
|
# ------------
|
|
set query_command="${pkgs.notmuch-addrlookup}/bin/notmuch-addrlookup --mutt '%s'"
|
|
|
|
# keys bindings
|
|
# -------------
|
|
#killed
|
|
bind index d noop
|
|
bind pager d noop
|
|
|
|
bind index S noop
|
|
bind index s noop
|
|
bind pager S noop
|
|
bind pager s noop
|
|
macro index S "<modify-labels-then-hide>-inbox -unread +junk\n" # tag as Junk mail
|
|
macro index s "<modify-labels>-junk\n" # tag as Junk mail
|
|
macro pager S "<modify-labels-then-hide>-inbox -unread +junk\n" # tag as Junk mail
|
|
macro pager s "<modify-labels>-junk\n" # tag as Junk mail
|
|
|
|
|
|
bind index A noop
|
|
bind index a noop
|
|
bind pager A noop
|
|
bind pager a noop
|
|
macro index A "<modify-labels>+archive -unread -inbox\n" # tag as Archived
|
|
macro index a "<modify-labels>-archive\n" # tag as Archived
|
|
macro pager A "<modify-labels>+archive -unread -inbox\n" # tag as Archived
|
|
macro pager a "<modify-labels>-archive\n" # tag as Archived
|
|
|
|
bind index U noop
|
|
bind index u noop
|
|
bind pager U noop
|
|
bind pager u noop
|
|
macro index u "<modify-labels>+unread\n"
|
|
macro index U "<modify-labels>-unread\n"
|
|
macro pager u "<modify-labels>+unread\n"
|
|
macro pager U "<modify-labels>-unread\n"
|
|
|
|
bind index l noop
|
|
bind pager l noop
|
|
macro index l "<modify-labels>" # set tags manual
|
|
macro pager l "<modify-labels>" # set tags manual
|
|
|
|
# taskwarrior
|
|
# -----------
|
|
# from https://www.nixternal.com/mark-e-mails-in-mutt-as-tasks-in-taskwarrior/
|
|
bind index t noop
|
|
bind pager t noop
|
|
bind index T noop
|
|
bind pager T noop
|
|
macro index T "<pipe-message>${
|
|
pkgs.writers.writeDash "mutt2task" ''
|
|
${pkgs.taskwarrior}/bin/task add +email E-mail: $( ${pkgs.gnugrep}/bin/grep 'Subject' $* | awk -F: '{print $2}' )
|
|
''
|
|
}<enter>"
|
|
|
|
# top index bar in email view
|
|
set pager_index_lines=7
|
|
# top_index_bar toggle
|
|
macro pager ,@1 "<enter-command> set pager_index_lines=0; macro pager ] ,@2 'Toggle indexbar<Enter>"
|
|
macro pager ,@2 "<enter-command> set pager_index_lines=3; macro pager ] ,@3 'Toggle indexbar<Enter>"
|
|
macro pager ,@3 "<enter-command> set pager_index_lines=7; macro pager ] ,@1 'Toggle indexbar<Enter>"
|
|
macro pager ] ,@1 'Toggle indexbar
|
|
|
|
# sidebar
|
|
# -------
|
|
set sidebar_width = 20
|
|
set sidebar_visible = yes # set to "no" to disable sidebar view at startup
|
|
color sidebar_new yellow default
|
|
# sidebar bindings
|
|
bind index <left> sidebar-prev # got to previous folder in sidebar
|
|
bind index <right> sidebar-next # got to next folder in sidebar
|
|
bind index <space> sidebar-open # open selected folder from sidebar
|
|
|
|
# sidebar toggle
|
|
#macro index,pager ,@) "<enter-command> set sidebar_visible=no; macro index,pager [ ,@( 'Toggle sidebar'<Enter>"
|
|
#macro index,pager ,@( "<enter-command> set sidebar_visible=yes; macro index,pager [ ,@) 'Toggle sidebar'<Enter>"
|
|
#macro index,pager [ ,@( 'Toggle sidebar' # toggle the sidebar
|
|
'';
|
|
|
|
environment.systemPackages = let
|
|
|
|
mailSync = pkgs.writers.writeDashBin "mail-sync" ''
|
|
${pkgs.muchsync}/bin/muchsync mailfetcher@workhorse.private --nonew
|
|
'';
|
|
mailSend = pkgs.writers.writeDashBin "mail-send" ''
|
|
${pkgs.msmtp}/bin/msmtp-queue -r
|
|
'';
|
|
mailView = pkgs.writers.writeDashBin "mail-view" ''
|
|
${pkgs.neomutt}/bin/neomutt"$@"
|
|
'';
|
|
mutt = pkgs.writers.writeDashBin "mutt" ''
|
|
${pkgs.neomutt}/bin/neomutt"$@"
|
|
'';
|
|
mail = pkgs.writers.writeDashBin "mail" ''
|
|
${mailSync}/bin/mail-sync
|
|
${mailView}/bin/mail-view
|
|
${mailSend}/bin/mail-send
|
|
${mailSync}/bin/mail-sync
|
|
'';
|
|
in [
|
|
pkgs.notmuch
|
|
pkgs.muchsync
|
|
mail
|
|
mailSync
|
|
mailView
|
|
mailSend
|
|
pkgs.neomutt
|
|
mutt
|
|
];
|
|
|
|
}
|