This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

superconfig / tools / mutt / flake-module.nix
8.1 kB 212 lines
1{ self, ... }: 2{ 3 perSystem = 4 { 5 pkgs, 6 lib, 7 system, 8 ... 9 }: 10 { 11 packages.mutt = 12 let 13 # Mailboxes configuration from mail.nix 14 mailboxes = self.packages.${system}.notmuch.mailboxes; 15 notmuchConfig = self.packages.${system}.notmuch.passthru.config.configFile.path; 16 17 mailcap = pkgs.writeText "mailcap" '' 18 text/html; ${pkgs.elinks}/bin/elinks -dump ; copiousoutput; 19 ''; 20 21 msmtprc = pkgs.writeText "msmtprc" '' 22 defaults 23 logfile ~/.msmtp.log 24 account prism 25 host prism.r 26 account c-base 27 from lassulus@c-base.org 28 host c-mail.c-base.org 29 port 465 30 tls on 31 tls_starttls off 32 auth on 33 user lassulus 34 passwordeval pass show c-base/pass 35 account default: prism 36 ''; 37 38 msmtp = pkgs.writeShellScriptBin "msmtp" '' 39 # Check if prism.r is reachable, fallback to Tor if not 40 if ping -W2 -c1 prism.r >/dev/null 2>&1; then 41 ${pkgs.coreutils}/bin/tee >(${pkgs.notmuch}/bin/notmuch insert +sent) | \ 42 ${pkgs.msmtp}/bin/msmtp -C ${msmtprc} "$@" 43 else 44 # Build dependencies lazily for Tor fallback 45 echo "Building tornade and clan-cli for Tor fallback..." >&2 46 tornade_path=$(nix build --no-link --print-out-paths "${self}#tornade") 47 clan_path=$(nix build --no-link --print-out-paths "${self}#clan-cli") 48 49 # Get tor hostname using clan CLI 50 tor_hostname=$(CLAN_DIR="${self}" "$clan_path/bin/clan" vars get prism tor-ssh/tor-hostname) 51 52 # Use tornade to send via Tor 53 ${pkgs.coreutils}/bin/tee >(${pkgs.notmuch}/bin/notmuch insert +sent) | \ 54 "$tornade_path/bin/tornade" ssh -T lass@"$tor_hostname" "cat | msmtp -C /etc/msmtprc $*" 55 fi 56 ''; 57 58 muttrc = pkgs.writeText "muttrc" '' 59 # read html mails 60 auto_view text/html 61 set mailcap_path = ${mailcap} 62 63 # notmuch 64 set folder="$HOME/Maildir" 65 set nm_default_uri = "notmuch://$HOME/Maildir" 66 set nm_record = yes 67 set nm_record_tags = "-inbox me archive" 68 set spoolfile = +Inbox 69 set virtual_spoolfile = yes 70 71 set sendmail="${msmtp}/bin/msmtp" 72 set from="lassulus@lassul.us" 73 alternates ^.*@lassul\.us$ ^.*@.*\.r$ 74 unset envelope_from_address 75 set use_envelope_from 76 set reverse_name 77 set markers=no 78 79 set sort=threads 80 81 set index_format="%4C %Z %?GI?%GI& ? %[%y-%m-%d] %-20.20a %?M?(%3M)& ? %s %> %r %g" 82 83 virtual-mailboxes "Unread" "notmuch://?query=tag:unread" 84 virtual-mailboxes "INBOX" "notmuch://?query=tag:inbox" 85 ${lib.concatMapStringsSep "\n" ( 86 i: ''${" "}virtual-mailboxes "${i.name}" "notmuch://?query=tag:${i.name}"'' 87 ) (lib.mapAttrsToList lib.nameValuePair mailboxes)} 88 virtual-mailboxes "TODO" "notmuch://?query=tag:TODO" 89 virtual-mailboxes "Starred" "notmuch://?query=tag:*" 90 virtual-mailboxes "Archive" "notmuch://?query=tag:archive" 91 virtual-mailboxes "Sent" "notmuch://?query=tag:sent" 92 virtual-mailboxes "Junk" "notmuch://?query=tag:junk" 93 virtual-mailboxes "All" "notmuch://?query=*" 94 95 tag-transforms "junk" "k" \ 96 "unread" "u" \ 97 "replied" "↻" \ 98 "TODO" "T" \ 99 100 # notmuch bindings 101 macro index \\\\ "<vfolder-from-query>" 102 macro index + "<modify-labels>+*\n<sync-mailbox>" 103 macro index - "<modify-labels>-*\n<sync-mailbox>" 104 105 # muchsync 106 bind index \Cr noop 107 macro index \Cr \ 108 "<enter-command>unset wait_key<enter> \ 109 <sync-mailbox> \ 110 <shell-escape>${self.packages.${pkgs.system}.muchsync}/bin/muchsync -vv<enter> \ 111 <sync-mailbox> 112 113 #killed 114 bind index d noop 115 bind pager d noop 116 117 bind index S noop 118 bind index s noop 119 bind pager S noop 120 bind pager s noop 121 macro index S "<modify-labels-then-hide>-inbox -unread +junk\n" 122 macro index s "<modify-labels>-junk\n" 123 macro pager S "<modify-labels-then-hide>-inbox -unread +junk\n" 124 macro pager s "<modify-labels>-junk\n" 125 126 bind index A noop 127 bind index a noop 128 bind pager A noop 129 bind pager a noop 130 macro index A "<modify-labels>+archive -unread -inbox\n" 131 macro index a "<modify-labels>-archive\n" 132 macro pager A "<modify-labels>+archive -unread -inbox\n" 133 macro pager a "<modify-labels>-archive\n" 134 135 bind index U noop 136 bind index u noop 137 bind pager U noop 138 bind pager u noop 139 macro index U "<modify-labels>+unread\n" 140 macro index u "<modify-labels>-unread\n" 141 macro pager U "<modify-labels>+unread\n" 142 macro pager u "<modify-labels>-unread\n" 143 144 bind index t noop 145 bind pager t noop 146 macro index t "<modify-labels>" 147 148 # top index bar in email view 149 set pager_index_lines=7 150 # top_index_bar toggle 151 macro pager ,@1 "<enter-command> set pager_index_lines=0; macro pager ] ,@2 'Toggle indexbar<Enter>" 152 macro pager ,@2 "<enter-command> set pager_index_lines=3; macro pager ] ,@3 'Toggle indexbar<Enter>" 153 macro pager ,@3 "<enter-command> set pager_index_lines=7; macro pager ] ,@1 'Toggle indexbar<Enter>" 154 macro pager ] ,@1 'Toggle indexbar 155 156 # scan urls from emails 157 macro index,pager \cb "<pipe-message> ${lib.getExe pkgs.urlscan}<Enter>" 158 macro attach,compose \cb "<pipe-entry> ${lib.getExe pkgs.urlscan}<Enter>" 159 160 # sidebar 161 set sidebar_divider_char = '│' 162 set sidebar_delim_chars = "/" 163 set sidebar_short_path 164 set sidebar_folder_indent 165 set sidebar_visible = yes 166 set sidebar_format = '%D%?F? [%F]?%* %?N?%N/? %?S?%S?' 167 set sidebar_width = 20 168 color sidebar_new yellow red 169 170 # sidebar bindings 171 bind index <left> sidebar-prev 172 bind index <right> sidebar-next 173 bind index <space> sidebar-open 174 # sidebar toggle 175 macro index,pager ,@) "<enter-command> set sidebar_visible=no; macro index,pager [ ,@( 'Toggle sidebar'<Enter>" 176 macro index,pager ,@( "<enter-command> set sidebar_visible=yes; macro index,pager [ ,@) 'Toggle sidebar'<Enter>" 177 macro index,pager [ ,@( 'Toggle sidebar' 178 179 # forward with attachment 180 set mime_forward = no 181 set forward_attachments = yes 182 183 # better handling of long URLs 184 set wrap = 0 # don't wrap lines in the pager 185 set markers = no # don't show + markers for wrapped lines 186 set smart_wrap = yes # wrap at word boundaries when displaying 187 set pager_stop = yes # don't jump to next message at end of pager 188 ''; 189 190 in 191 self.wrapLib.makeWrapper { 192 pkgs = pkgs; 193 package = pkgs.neomutt; 194 aliases = [ "mutt" ]; 195 runtimeInputs = [ 196 pkgs.elinks 197 pkgs.msmtp 198 pkgs.notmuch 199 pkgs.urlscan 200 ] 201 ++ lib.optionals pkgs.stdenv.isLinux [ 202 pkgs.iputils 203 ]; 204 env = { 205 NOTMUCH_CONFIG = notmuchConfig; 206 }; 207 flags = { 208 "-F" = "${muttrc}"; 209 }; 210 }; 211 }; 212}