273 lines
9 KiB
Nix
273 lines
9 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
msmtprc = pkgs.writeText "msmtprc" ''
|
|
defaults
|
|
logfile ~/.msmtp.log
|
|
account prism
|
|
host prism.r
|
|
account c-base
|
|
from lassulus@c-base.org
|
|
host c-mail.c-base.org
|
|
port 465
|
|
tls on
|
|
tls_starttls off
|
|
auth on
|
|
user lassulus
|
|
passwordeval pass show c-base/pass
|
|
account default: prism
|
|
'';
|
|
|
|
notmuch-config = pkgs.writeText "notmuch-config" ''
|
|
[database]
|
|
path=/home/lass/Maildir
|
|
mail_root=/home/lass/Maildir
|
|
|
|
[user]
|
|
name=lassulus
|
|
primary_email=lassulus@lassul.us
|
|
other_email=lass@mors.r;${lib.concatStringsSep ";" (lib.flatten (lib.attrValues mailboxes))}
|
|
|
|
[new]
|
|
tags=unread;inbox;
|
|
ignore=
|
|
|
|
[search]
|
|
exclude_tags=deleted;spam;
|
|
|
|
[maildir]
|
|
synchronize_flags=true
|
|
'';
|
|
|
|
msmtp = pkgs.writeBashBin "msmtp" ''
|
|
${pkgs.coreutils}/bin/tee >(${pkgs.notmuch}/bin/notmuch insert +sent) | \
|
|
${pkgs.msmtp}/bin/msmtp -C ${msmtprc} "$@"
|
|
'';
|
|
|
|
mailcap = pkgs.writeText "mailcap" ''
|
|
text/html; ${pkgs.elinks}/bin/elinks -dump ; copiousoutput;
|
|
'';
|
|
|
|
mailboxes = {
|
|
afra = [ "to:afra@afra-berlin.de" ];
|
|
c-base = [ "to:c-base.org" ];
|
|
coins = [
|
|
"to:btce@lassul.us"
|
|
"to:coinbase@lassul.us"
|
|
"to:polo@lassul.us"
|
|
"to:bitwala@lassul.us"
|
|
"to:payeer@lassul.us"
|
|
"to:gatehub@lassul.us"
|
|
"to:bitfinex@lassul.us"
|
|
"to:binance@lassul.us"
|
|
"to:bitcoin.de@lassul.us"
|
|
"to:robinhood@lassul.us"
|
|
];
|
|
dezentrale = [ "to:dezentrale.space" ];
|
|
dhl = [ "to:dhl@lassul.us" ];
|
|
dn42 = [ "to:dn42@lists.nox.tf" ];
|
|
eloop = [ "to:eloop.org" ];
|
|
github = [ "to:github@lassul.us" ];
|
|
gmail = [ "to:gmail@lassul.us" "to:lassulus@gmail.com" "lassulus@googlemail.com" ];
|
|
india = [ "to:hillhackers@lists.hillhacks.in" "to:hackbeach@lists.hackbeach.in" "to:hackbeach@mail.hackbeach.in" ];
|
|
kaosstuff = [ "to:gearbest@lassul.us" "to:banggood@lassul.us" "to:tomtop@lassul.us" ];
|
|
lugs = [ "to:lugs@lug-s.org" ];
|
|
meetup = [ "to:meetup@lassul.us" ];
|
|
nix = [ "to:nix-devel@googlegroups.com" "to:nix@lassul.us" ];
|
|
patreon = [ "to:patreon@lassul.us" ];
|
|
paypal = [ "to:paypal@lassul.us" ];
|
|
ptl = [ "to:ptl@posttenebraslab.ch" ];
|
|
retiolum = [ "to:lass@mors.r" ];
|
|
security = [
|
|
"to:seclists.org" "to:bugtraq" "to:securityfocus@lassul.us"
|
|
"to:security-announce@lists.apple.com"
|
|
];
|
|
shack = [ "to:shackspace.de" ];
|
|
steam = [ "to:steam@lassul.us" ];
|
|
tinc = [ "to:tinc@tinc-vpn.org" "to:tinc-devel@tinc-vpn.org" ];
|
|
wireguard = [ "to:wireguard@lists.zx2c4" ];
|
|
zzz = [ "to:pizza@lassul.us" "to:spam@krebsco.de" ];
|
|
};
|
|
|
|
tag-new-mails = pkgs.writeDashBin "nm-tag-init" ''
|
|
${pkgs.notmuch}/bin/notmuch new
|
|
${lib.concatMapStringsSep "\n" (i: ''
|
|
mkdir -p "$HOME/Maildir/.${i.name}/cur"
|
|
for mail in $(${pkgs.notmuch}/bin/notmuch search --output=files 'tag:inbox and (${lib.concatMapStringsSep " or " (f: "${f}") i.value})'); do
|
|
if test -e "$mail"; then
|
|
mv "$mail" "$HOME/Maildir/.${i.name}/cur/"
|
|
else
|
|
echo "$mail does not exist"
|
|
fi
|
|
done
|
|
${pkgs.notmuch}/bin/notmuch tag -inbox +${i.name} -- tag:inbox ${lib.concatMapStringsSep " or " (f: "${f}") i.value}
|
|
'') (lib.mapAttrsToList lib.nameValuePair mailboxes)}
|
|
${pkgs.notmuch}/bin/notmuch new
|
|
${pkgs.notmuch}/bin/notmuch dump > "$HOME/Maildir/notmuch.backup"
|
|
'';
|
|
|
|
tag-old-mails = pkgs.writeDashBin "nm-tag-old" ''
|
|
set -efux
|
|
${lib.concatMapStringsSep "\n" (i: ''
|
|
${pkgs.notmuch}/bin/notmuch tag -inbox -archive +${i.name} -- ${lib.concatMapStringsSep " or " (f: "${f}") i.value}
|
|
mkdir -p "$HOME/Maildir/.${i.name}/cur"
|
|
for mail in $(${pkgs.notmuch}/bin/notmuch search --output=files ${lib.concatMapStringsSep " or " (f: "${f}") i.value}); do
|
|
if test -e "$mail"; then
|
|
mv "$mail" "$HOME/Maildir/.${i.name}/cur/"
|
|
else
|
|
echo "$mail does not exist"
|
|
fi
|
|
done
|
|
'') (lib.mapAttrsToList lib.nameValuePair mailboxes)}
|
|
${pkgs.notmuch}/bin/notmuch new --no-hooks
|
|
'';
|
|
|
|
muttrc = pkgs.writeText "muttrc" ''
|
|
|
|
# read html mails
|
|
auto_view text/html
|
|
set mailcap_path = ${mailcap}
|
|
|
|
# notmuch
|
|
set folder="$HOME/Maildir"
|
|
set nm_default_uri = "notmuch://$HOME/Maildir"
|
|
set nm_record = yes
|
|
set nm_record_tags = "-inbox me archive"
|
|
set spoolfile = +Inbox
|
|
set virtual_spoolfile = yes
|
|
|
|
|
|
set sendmail="${msmtp}/bin/msmtp" # enables parsing of outgoing mail
|
|
set from="lassulus@lassul.us"
|
|
alternates ^.*@lassul\.us$ ^.*@.*\.r$
|
|
unset envelope_from_address
|
|
set use_envelope_from
|
|
set reverse_name
|
|
|
|
set sort=threads
|
|
|
|
set index_format="%4C %Z %?GI?%GI& ? %[%y-%m-%d] %-20.20a %?M?(%3M)& ? %s %> %r %g"
|
|
|
|
virtual-mailboxes "Unread" "notmuch://?query=tag:unread"
|
|
virtual-mailboxes "INBOX" "notmuch://?query=tag:inbox"
|
|
${lib.concatMapStringsSep "\n" (i: ''${" "}virtual-mailboxes "${i.name}" "notmuch://?query=tag:${i.name}"'') (lib.mapAttrsToList lib.nameValuePair mailboxes)}
|
|
virtual-mailboxes "TODO" "notmuch://?query=tag:TODO"
|
|
virtual-mailboxes "Starred" "notmuch://?query=tag:*"
|
|
virtual-mailboxes "Archive" "notmuch://?query=tag:archive"
|
|
virtual-mailboxes "Sent" "notmuch://?query=tag:sent"
|
|
virtual-mailboxes "Junk" "notmuch://?query=tag:junk"
|
|
virtual-mailboxes "All" "notmuch://?query=*"
|
|
|
|
tag-transforms "junk" "k" \
|
|
"unread" "u" \
|
|
"replied" "↻" \
|
|
"TODO" "T" \
|
|
|
|
# notmuch bindings
|
|
macro index \\\\ "<vfolder-from-query>" # looks up a hand made query
|
|
macro index + "<modify-labels>+*\n<sync-mailbox>" # tag as starred
|
|
macro index - "<modify-labels>-*\n<sync-mailbox>" # tag as unstarred
|
|
|
|
# muchsync
|
|
bind index \Cr noop
|
|
macro index \Cr \
|
|
"<enter-command>unset wait_key<enter> \
|
|
<shell-escape>${pkgs.writeDash "muchsync" ''
|
|
set -efu
|
|
until ${pkgs.muchsync}/bin/muchsync -F lass@green.r; do
|
|
sleep 1
|
|
done
|
|
''}<enter>
|
|
|
|
#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 t noop
|
|
bind pager t noop
|
|
macro index t "<modify-labels>" # tag as Archived
|
|
|
|
# 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
|
|
|
|
# urlview
|
|
macro pager \cb <pipe-entry>'${pkgs.urlview}/bin/urlview'<enter> 'Follow links with urlview'
|
|
|
|
# sidebar
|
|
set sidebar_divider_char = '│'
|
|
set sidebar_delim_chars = "/"
|
|
set sidebar_short_path
|
|
set sidebar_folder_indent
|
|
set sidebar_visible = yes
|
|
set sidebar_format = '%D%?F? [%F]?%* %?N?%N/? %?S?%S?'
|
|
set sidebar_width = 20
|
|
color sidebar_new yellow red
|
|
|
|
# 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
|
|
'';
|
|
|
|
mutt = pkgs.symlinkJoin {
|
|
name = "mutt";
|
|
paths = [
|
|
(pkgs.writeDashBin "mutt" ''
|
|
exec ${pkgs.neomutt}/bin/neomutt -F ${muttrc} "$@"
|
|
'')
|
|
pkgs.neomutt
|
|
];
|
|
};
|
|
|
|
in {
|
|
environment.variables.NOTMUCH_CONFIG = toString notmuch-config;
|
|
environment.systemPackages = [
|
|
msmtp
|
|
mutt
|
|
pkgs.notmuch
|
|
pkgs.muchsync
|
|
tag-new-mails
|
|
tag-old-mails
|
|
];
|
|
}
|