284 lines
11 KiB
Nix
284 lines
11 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
|
|
makeConfig = accountName:
|
|
''
|
|
unset reverse_name
|
|
unset smime_is_default
|
|
set my_account='${ accountName }'
|
|
macro index,pager / "<vfolder-from-query>tag:${ accountName } "
|
|
unalternates *
|
|
set nm_record_tags = "+sent -inbox -unread +${ accountName }";
|
|
set my_signature = ${ pkgs.writeText "signature.txt" config.accounts.email.accounts.${accountName}.signature.text }
|
|
set status_format = "— [ %r ] $my_account %f (%lB) %>— %m messages%?n? [ %n new ]?%?d? [ %d to delete ]?%?t? [ %t tagged ]? —"
|
|
source colors.neomuttrc
|
|
'';
|
|
|
|
makeAccount = accountName: {
|
|
signature.showSignature = "append";
|
|
smtp.tls.useStartTls = true;
|
|
msmtp.enable = true;
|
|
|
|
mbsync = {
|
|
enable = true;
|
|
create = "maildir";
|
|
expunge = "both";
|
|
};
|
|
|
|
neomutt = {
|
|
enable = true;
|
|
sendMailCommand = "${lib.getExe pkgs.msmtp} -a ${ accountName }";
|
|
};
|
|
|
|
notmuch = {
|
|
enable = true;
|
|
neomutt = {
|
|
virtualMailboxes = [
|
|
{ name = "Inbox"; query = "tag:${ accountName } and tag:inbox"; }
|
|
{ name = "Archive"; query = "tag:${ accountName } and not tag:sent and not tag:draft"; }
|
|
{ name = "Sent"; query = "tag:${ accountName } and tag:sent"; }
|
|
{ name = "Drafts"; query = "tag:${ accountName } and tag:draft"; }
|
|
{ name = "Spam"; query = "tag:${ accountName } and tag:spam"; }
|
|
{ name = "Trash"; query = "tag:${ accountName } and tag:trash"; }
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
mailcap_path = pkgs.writeText "neomutt_mailcap" ''
|
|
application/pdf; zathura %s
|
|
multipart; xdg-open %s
|
|
text/html; firefox %s; description=HTML Text; nametemplate=%s.html; needsterminal
|
|
text/html; w3m -v -F -T text/html -dump %s; copiousoutput
|
|
text/calendar; khal import %s
|
|
text; neomutt %s
|
|
application; xdg-open %s
|
|
image; xdg-open %s
|
|
video; xdg-open %s
|
|
audio; xdg-open %s
|
|
message; xdg-open %s
|
|
model; xdg-open %s
|
|
'';
|
|
|
|
in
|
|
|
|
{
|
|
programs.mu.enable = true;
|
|
|
|
accounts.email = {
|
|
maildirBasePath = "${config.xdg.dataHome}/mail";
|
|
accounts = {
|
|
gu = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
|
|
primary = true;
|
|
address = "straube@geo.uni-frankfurt.de";
|
|
realName = "Till Straube";
|
|
imap.host = "imap.server.uni-frankfurt.de";
|
|
smtp.host = "smtpauth.rz.uni-frankfurt.de";
|
|
userName = "tstraube";
|
|
passwordCommand = "pass uni/hrz";
|
|
signature = {
|
|
text = ''
|
|
Dr. Till Straube (he/him)
|
|
Dept. of Human Geography
|
|
Goethe University Frankfurt
|
|
'';
|
|
};
|
|
neomutt = {
|
|
extraConfig = makeConfig name + ''
|
|
color status blue default
|
|
color index blue default '~N'
|
|
alternates ^tstraube@(em|rz)?.uni-frankfurt.de$
|
|
set smime_is_default
|
|
'';
|
|
};
|
|
};
|
|
|
|
t9e = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
|
|
address = "till.straube@t9e.me";
|
|
realName = "Till Straube";
|
|
imap.host = "arielle.ktiu.net";
|
|
smtp.host = "arielle.ktiu.net";
|
|
userName = "till.straube@t9e.me";
|
|
signature.text = ''
|
|
Till Straube (he/him)
|
|
PGP key: https://keys.openpgp.org/search?q=till.straube@t9e.me
|
|
'';
|
|
neomutt = {
|
|
extraConfig = makeConfig name + ''
|
|
color status green default
|
|
color index green default '~N'
|
|
alternates @t9e.me$ @ktiu.net$ ^(tillkowski|till.straube)@gmail.com$
|
|
set reverse_name
|
|
'';
|
|
};
|
|
msmtp.extraConfig.port = "587";
|
|
passwordCommand = "pass accounts/ktiu-imap";
|
|
};
|
|
|
|
ksh = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
|
|
address = "kein_schlussstrich_hessen@systemli.org";
|
|
realName = "Kein Schlussstrich Hessen";
|
|
imap.host = "mail.systemli.org";
|
|
smtp.host = "mail.systemli.org";
|
|
userName = "kein_schlussstrich_hessen@systemli.org";
|
|
signature.text = ''
|
|
Kein Schlussstrich Hessen
|
|
PGP Key: https://keys.openpgp.org/search?q=kein_schlussstrich_hessen@systemli.org
|
|
'';
|
|
neomutt = {
|
|
extraConfig = makeConfig name + ''
|
|
color status red default
|
|
color index red default '~N'
|
|
'';
|
|
};
|
|
passwordCommand = "pass ksh/systemli";
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.msmtp.enable = true;
|
|
|
|
programs.mbsync.enable = true;
|
|
|
|
programs.notmuch = {
|
|
enable = true;
|
|
search.excludeTags = [ "trash" "spam" ];
|
|
new.tags = [ "new" "unread" ];
|
|
hooks = {
|
|
preNew = ''
|
|
notmuch tag +draft -- 'folder:"/\/Drafts$/"'
|
|
mbsync --all
|
|
'';
|
|
postNew = ''
|
|
notmuch tag +gu -- tag:new path:gu/**
|
|
notmuch tag +t9e -- tag:new path:t9e/**
|
|
notmuch tag +ksh -- tag:new path:ksh/**
|
|
notmuch tag +inbox -- tag:new 'folder:"/\/Inbox$/"'
|
|
notmuch tag +sent -unread -- tag:new 'folder:"/\/Sent$/"'
|
|
notmuch tag +trash -unread -- tag:new 'folder:"/\/Trash$/"'
|
|
notmuch tag +draft -unread -- tag:new 'folder:"/\/Drafts$/"'
|
|
notmuch tag +spam -- tag:new 'folder:"/\/Spam$/"'
|
|
notmuch tag +spam -- tag:new 'folder:"/\/Junk$/"'
|
|
notmuch tag -new -- tag:new
|
|
'';
|
|
};
|
|
};
|
|
|
|
programs.neomutt = {
|
|
enable = true;
|
|
|
|
vimKeys = true;
|
|
changeFolderWhenSourcingAccount = true;
|
|
editor = "nvim -c 'call woof#init#Init()'";
|
|
sort = "reverse-date-received";
|
|
unmailboxes = true;
|
|
|
|
settings = {
|
|
abort_noattach = "ask-yes";
|
|
abort_noattach_regex = "\"(attach|enclosed|anbei|anhängen|angehängt|anhang|anhänge|hängt an)\"";
|
|
auto_edit = "no";
|
|
beep = "no";
|
|
confirm_append = "no";
|
|
crypt_auto_sign = "yes";
|
|
crypt_replyencrypt = "yes";
|
|
crypt_replysign = "yes";
|
|
crypt_replysignencrypted = "yes";
|
|
crypt_verify_sig = "yes";
|
|
edit_headers = "yes";
|
|
forward_attachments = "yes";
|
|
forward_format = "\"Fwd: %s\"";
|
|
forward_quote = "yes";
|
|
help = "no";
|
|
include = "yes";
|
|
mail_check_stats = "yes";
|
|
mailcap_path = "${ mailcap_path }";
|
|
mark_old = "no";
|
|
markers = "no";
|
|
mbox_type = "Maildir";
|
|
menu_scroll = "yes";
|
|
mime_type_query_command = "\"file -b --mime-type %s\"";
|
|
nm_record = "yes";
|
|
pager_context = "3";
|
|
pager_index_lines = "5";
|
|
pager_stop = "yes";
|
|
query_command= "\"khard email --parsable '%s'\"";
|
|
recall = "no";
|
|
resume_draft_files = "yes";
|
|
reverse_real_name = "no";
|
|
shell = "/bin/sh";
|
|
sleep_time = "0";
|
|
smart_wrap = "yes";
|
|
status_chars = "✔↻٪A";
|
|
tilde = "yes";
|
|
use_envelope_from = "yes";
|
|
virtual_spool_file = "yes";
|
|
wait_key = "no";
|
|
};
|
|
|
|
binds = [
|
|
{ key = "m"; map = [ "index" "pager" ]; action = "noop"; }
|
|
{ key = "k"; map = [ "pager" ]; action = "previous-entry"; }
|
|
{ key = "j"; map = [ "pager" ]; action = "next-entry"; }
|
|
{ key = "<return>"; map = [ "index" ]; action = "display-message"; }
|
|
{ key = "<space>"; map = [ "index" ]; action = "entire-thread"; }
|
|
{ key = "gf"; map = [ "index" "pager" ]; action = "change-folder"; }
|
|
{ key = "<Tab>"; map = [ "editor" ]; action = "complete-query"; }
|
|
{ key = "P"; map = [ "compose" ]; action = "pgp-menu"; }
|
|
{ key = "p"; map = [ "compose" ]; action = "postpone-message"; }
|
|
];
|
|
|
|
macros = [
|
|
{ key = "gu"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/gu<enter>g!"; }
|
|
{ key = "gm"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/t9e<enter>g!"; }
|
|
{ key = "gk"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/ksh<enter>g!"; }
|
|
|
|
{ key = "Y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>"; }
|
|
{ key = "y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>-inbox -unread -spam -trash<enter><sync-mailbox>"; }
|
|
{ key = "J"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+spam -inbox -unread -trash<enter><sync-mailbox>"; }
|
|
{ key = "I"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+inbox -old -spam -trash<enter><sync-mailbox>"; }
|
|
{ key = "Y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>"; }
|
|
{ key = "dd"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+trash -inbox -unread -spam<enter><sync-mailbox>"; }
|
|
|
|
{ key = "g!"; map = [ "index" "pager" ]; action = "<change-vfolder>Inbox<enter>"; }
|
|
{ key = "g<"; map = [ "index" "pager" ]; action = "<change-vfolder>Sent<enter>"; }
|
|
{ key = "g>"; map = [ "index" "pager" ]; action = "<change-vfolder>Archive<enter>"; }
|
|
{ key = "gj"; map = [ "index" "pager" ]; action = "<change-vfolder>Spam<enter>"; }
|
|
{ key = "gd"; map = [ "index" "pager" ]; action = "<change-vfolder>Drafts<enter>"; }
|
|
{ key = "gt"; map = [ "index" "pager" ]; action = "<change-vfolder>Trash<enter>"; }
|
|
|
|
{ key = "go"; map = [ "index" "pager" ]; action = "<shell-escape>notmuch new<enter>"; }
|
|
{ key = "V"; map = ["index" "pager"]; action = "<view-attachments><search>html<enter><view-mailcap><exit>"; }
|
|
{ key = "mar"; map = [ "index" "pager" ]; action = "<tag-pattern>new<enter><tag-prefix-cond><clear-flag>n<enter><tag-prefix-cond><clear-flag>*<enter>"; }
|
|
{ key = "A"; map = [ "index" "pager" ]; action = "<pipe-message>khard add-email --vcard-version=4.0<return>"; }
|
|
{ key = "S"; map = [ "index" "pager" ]; action = "<pipe-message>ripmime -i - -d ~/tmp && rm ~/tmp/textfile*"; }
|
|
{ key = "gb"; map = [ "index" "pager" ]; action = "<pipe-message>urlscan<enter>"; }
|
|
{ key = "I"; map = [ "compose" ]; action = "<attach-file>`tmpfile=$(mktemp -u --suffix .png -t XXXXXXXXXXXX -p ~/tmp) && wl-paste -t image/png > \"$tmpfile\" && echo \"$tmpfile\"`<enter>"; }
|
|
{ key = "p"; map = [ "compose" ]; action = "<postpone-message>"; }
|
|
|
|
{ key = "c"; map = [ "index" "pager" ]; action = "<enter-command>set signature=$my_signature<enter><mail>"; }
|
|
{ key = "r"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><reply>"; }
|
|
{ key = "a"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><group-reply>"; }
|
|
{ key = "f"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><forward-message>"; }
|
|
{ key = "l"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><list-reply>"; }
|
|
];
|
|
|
|
extraConfig = builtins.readFile ../../dotfiles/neomutt/config.neomuttrc;
|
|
};
|
|
|
|
xdg.configFile."neomutt/colors.neomuttrc".source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/dotfiles/neomutt/colors.neomuttrc";
|
|
xdg.configFile."neomutt/bindings.neomuttrc".source = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/dotfiles/neomutt/bindings.neomuttrc";
|
|
programs.neovim.plugins = with pkgs.vimPlugins; [
|
|
{
|
|
plugin = vim-pathogen;
|
|
type = "viml";
|
|
config = "execute pathogen#infect()";
|
|
}
|
|
];
|
|
|
|
xdg.configFile."nvim/bundle/woof-vim" = {
|
|
source = config.lib.file.mkOutOfStoreSymlink "/home/till/devel/woof-vim";
|
|
recursive = true;
|
|
};
|
|
|
|
}
|