feat(accounts): add emails workflow serttings
This commit is contained in:
parent
0cd88af42b
commit
fdb39267a6
7 changed files with 279 additions and 184 deletions
6
flake.lock
generated
6
flake.lock
generated
|
@ -61,10 +61,10 @@
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753832018,
|
"lastModified": 1754263742,
|
||||||
"narHash": "sha256-5Bzgfzy6PNppiZC9TmunBVyxZYh4pbctHyizxyNgiq8=",
|
"narHash": "sha256-oPaO7L/lVAVHxdj7Yk6aAutj5mog4oTG+3Phib9gZ4s=",
|
||||||
"ref": "main",
|
"ref": "main",
|
||||||
"rev": "a87fde2a8776983419bf8828dcde50835e094798",
|
"rev": "b37522e97284a35423d15bd627f3ebdcc4327870",
|
||||||
"shallow": true,
|
"shallow": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://git@git.epha.se:24422/ephase/nix-private.git"
|
"url": "ssh://git@git.epha.se:24422/ephase/nix-private.git"
|
||||||
|
|
|
@ -4,8 +4,9 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
accountConfigs = {
|
accountConfigs = {
|
||||||
ubordeaux = inputs.nix-private.mail.ubordeaux;
|
ubordeaux = inputs.nix-private.mail.ubordeaux;
|
||||||
|
xiemeart = inputs.nix-private.mail.xiemeart;
|
||||||
};
|
};
|
||||||
primary = "ubordeaux";
|
primary = "xiemeart";
|
||||||
};
|
};
|
||||||
application = {
|
application = {
|
||||||
gnupg = {
|
gnupg = {
|
||||||
|
|
|
@ -30,4 +30,5 @@
|
||||||
scale = "1.3";
|
scale = "1.3";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
sops.age.keyFile = "/home/ephase/.config/sops/age/keys.txt";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, inputs, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.email;
|
cfg = config.modules.email;
|
||||||
|
secretsDirectory = "${(builtins.toString inputs.nix-private)}/secrets";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.email = {
|
options.modules.email = {
|
||||||
|
@ -21,6 +22,15 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
sops = let
|
||||||
|
secretList = lib.mapAttrs' ( name: value:
|
||||||
|
nameValuePair ( value.secret.key ) ({
|
||||||
|
sopsFile = "${secretsDirectory}/${value.secret.file}";
|
||||||
|
})
|
||||||
|
) cfg.accountConfigs;
|
||||||
|
in {
|
||||||
|
secrets = secretList;
|
||||||
|
};
|
||||||
accounts.email = let
|
accounts.email = let
|
||||||
defaultSetting = {
|
defaultSetting = {
|
||||||
mbsync = {
|
mbsync = {
|
||||||
|
@ -28,20 +38,16 @@ in
|
||||||
create = "maildir";
|
create = "maildir";
|
||||||
expunge = "both";
|
expunge = "both";
|
||||||
};
|
};
|
||||||
aerc = {
|
msmtp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraAccounts ={
|
|
||||||
source = "notmuch://~/mail";
|
|
||||||
maildir-store = "~/mail";
|
|
||||||
default = "Inbox";
|
|
||||||
postpone = "Drafts";
|
|
||||||
copy-to = "Sent";
|
|
||||||
use-envelope-from = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
notmuch = {
|
notmuch = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
neomutt = {
|
||||||
|
enable = true;
|
||||||
|
showDefaultMailbox = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
accountsList = lib.mapAttrs ( name: value: lib.recursiveUpdate defaultSetting value.config ) cfg.accountConfigs;
|
accountsList = lib.mapAttrs ( name: value: lib.recursiveUpdate defaultSetting value.config ) cfg.accountConfigs;
|
||||||
in {
|
in {
|
||||||
|
@ -49,16 +55,15 @@ in
|
||||||
accounts = lib.recursiveUpdate accountsList { "${cfg.primary}".primary = true; };
|
accounts = lib.recursiveUpdate accountsList { "${cfg.primary}".primary = true; };
|
||||||
};
|
};
|
||||||
|
|
||||||
# programs.notmuch = {
|
programs.afew = let
|
||||||
# enable = true;
|
mailMoverRules = lib.mergeAttrsList (
|
||||||
# new.tags = [ "new" ];
|
lib.attrsets.mapAttrsToList (
|
||||||
# hooks.postNew = ''
|
n: v:
|
||||||
# ${pkgs.afew}/bin/afew -t -n
|
if lib.hasAttrByPath ["afew" "mailMover"] v then
|
||||||
# ${pkgs.afew}/bin/afew -w -n
|
v.afew.mailMover
|
||||||
# '';
|
else {}
|
||||||
# };
|
) cfg.accountConfigs);
|
||||||
|
in {
|
||||||
programs.afew = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
[FolderNameFilter]
|
[FolderNameFilter]
|
||||||
|
@ -66,6 +71,9 @@ in
|
||||||
folder_transforms = archives:archive
|
folder_transforms = archives:archive
|
||||||
maildir_separator = /
|
maildir_separator = /
|
||||||
[MailMover]
|
[MailMover]
|
||||||
|
folders = ${lib.concatStringsSep " " (lib.unique (lib.mapAttrsToList (n: v: "${n}") mailMoverRules))}
|
||||||
|
rename = True
|
||||||
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n} = ${toString v}") mailMoverRules)}
|
||||||
[SpamFilter]
|
[SpamFilter]
|
||||||
[KillThreadsFilter]
|
[KillThreadsFilter]
|
||||||
[ArchiveSentMailsFilter]
|
[ArchiveSentMailsFilter]
|
||||||
|
@ -73,73 +81,124 @@ in
|
||||||
[InboxFilter]
|
[InboxFilter]
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
programs.aerc = {
|
programs.neomutt = let
|
||||||
|
accountMacros = lib.imap1 (
|
||||||
|
i:
|
||||||
|
elem: elem // {
|
||||||
|
map = ["index" "pager"];
|
||||||
|
key = "<F${(toString (i + 1))}>";
|
||||||
|
}) (
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
n: _:
|
||||||
|
{ "action" = "<sync-mailbox><refresh><enter-command>source ~/.config/neomutt/${n}<enter><change-folder>=Inbox<enter><change-vfolder>Unread<enter>";}
|
||||||
|
) inputs.nix-private.mail);
|
||||||
|
in {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraConfig = {
|
unmailboxes = true;
|
||||||
general = {
|
editor = "nvim +/^$/ +':nohl'";
|
||||||
unsafe-accounts-conf = true;
|
settings = {
|
||||||
};
|
sleep_time = "1";
|
||||||
ui = {
|
mbox_type = "Maildir";
|
||||||
column-subject = ''
|
header_color_partial = "yes";
|
||||||
{{if .ThreadPrefix}}{{.Style (printf "%s " .ThreadPrefix) "thread"}}{{- end }}{{.Subject}}
|
duplicate_threads = "yes";
|
||||||
'';
|
index_format = "'%4C| %24.24?GS?%F %GS &%F? %?GR?%GR &%?GU?%GU & ??%?GA?%GA & ?%?GE?%GE & ?%?M? %s&%s? %* %?g? %g? %<[y?%<[m?%<[d?%9[%H:%M ]&%9[%a %d ]>&%9[%b %d ]>&%9[%m/%y ]>'";
|
||||||
column-flags = ''
|
sort_aux = "last-date-sent";
|
||||||
{{.Flags | join " "}}
|
mail_check = "120";
|
||||||
'';
|
hidden_tags = "inbox,unread,draft,flagged,passed,replied,signed,encrypted,attachment,sent";
|
||||||
index-columns = ''
|
markers = "no";
|
||||||
flags:5,name<20%,subject,date>=
|
wrap = "90";
|
||||||
'';
|
smart_wrap = "yes";
|
||||||
thread-prefix-tip = "╼ ";
|
reflow_text = "yes";
|
||||||
thread-prefix-indent = "";
|
reflow_wrap = "90";
|
||||||
thread-prefix-stem = "│";
|
text_flowed = "yes";
|
||||||
thread-prefix-limb = "─";
|
search_context = "3";
|
||||||
thread-prefix-folded = "+";
|
pager_context = "5";
|
||||||
thread-prefix-unfolded = "";
|
pager_index_lines = "10";
|
||||||
thread-prefix-first-child = "┬";
|
rfc2047_parameters = "yes";
|
||||||
thread-prefix-has-siblings = "├";
|
edit_headers = "yes";
|
||||||
thread-prefix-orphan = "┬╼ ";
|
send_charset = "utf-8";
|
||||||
thread-prefix-dummy = "┬";
|
envelope_from = "yes";
|
||||||
thread-prefix-lone = " ";
|
my_status = "' %o/%m | %l | %f %* Sort: %s-%S Pos: %P '";
|
||||||
thread-prefix-last-sibling = "╰";
|
my_pager = "' %F | %s %* Pos: %P '";
|
||||||
completion-popovers = true;
|
compose_format = "' COMPOSE %a | %l'";
|
||||||
icon-attachment = "";
|
query_command = "'${pkgs.khard}/bin/khard email --parsable --search-in-source-files %s'";
|
||||||
icon-replied = "";
|
|
||||||
icon-forwarded = "";
|
|
||||||
icon-new = "";
|
|
||||||
icon-old = "";
|
|
||||||
icon-unencrypted = "";
|
|
||||||
icon-encrypted = "";
|
|
||||||
icon-signed = "";
|
|
||||||
icon-signed-encrypted = "";
|
|
||||||
icon-invalid = "";
|
|
||||||
icon-unknown = "";
|
|
||||||
threading-enabled = true;
|
|
||||||
};
|
|
||||||
statusline = {
|
|
||||||
status-columns=''
|
|
||||||
left<*,right>*
|
|
||||||
'';
|
|
||||||
column-left = ''
|
|
||||||
{{.Style (printf " %s " (toUpper .Account)) "statusline_account" }}\
|
|
||||||
{{.Style (printf " %s | %s " .Folder (humanReadable .Size)) "statusline_folder"}}\
|
|
||||||
{{ if .ContentInfo }}{{.Style (printf " %s " .ContentInfo) "statusline_contentinfo"}}{{- end }}
|
|
||||||
'';
|
|
||||||
column-center = ''
|
|
||||||
{{.Style .PendingKeys "statusline_center"}}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
filters = {
|
|
||||||
"text/plain" = " wrap -w 100 | colorize";
|
|
||||||
"text/html" = "! html";
|
|
||||||
"text/calendar" = "calendar";
|
|
||||||
"message/delivery-status" = "colorize";
|
|
||||||
"message/rfc822" = "colorize";
|
|
||||||
".headers" = "colorize";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
stylesets = {
|
|
||||||
default = (builtins.readFile ./files/default.theme);
|
|
||||||
};
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
${(builtins.readFile ./files/theme.muttrc)}
|
||||||
|
charset-hook ^iso-8859-1$ cp1252
|
||||||
|
ignore *
|
||||||
|
unignore from date subject to cc bcc tags user-agent x-mailer
|
||||||
|
auto_view text/x-vcard text/html text/enriched text/calendar
|
||||||
|
alternative_order text/html text/enriched text/plain text/*
|
||||||
|
tag-transforms "attachment" "" \
|
||||||
|
"encrypted" "" \
|
||||||
|
"signed" "" \
|
||||||
|
"unread" "" \
|
||||||
|
"replied" ""
|
||||||
|
tag-formats "attachment" "GA" \
|
||||||
|
"encrypted" "GE" \
|
||||||
|
"signed" "GS" \
|
||||||
|
"unread" "GU" \
|
||||||
|
"replied" "GR"
|
||||||
|
'';
|
||||||
|
binds = [
|
||||||
|
{ map = [ "attach" "browser" "index" "pager" ]; key = "g"; action = "noop"; }
|
||||||
|
{ map = [ "attach" "browser" "index" "pager" ]; key = "G"; action = "noop"; }
|
||||||
|
{ map = [ "index" ]; key = "q"; action = "noop";}
|
||||||
|
{ map = [ "pager" ]; key = "Q"; action = "noop";}
|
||||||
|
{ map = [ "attach" "browser" "index" ]; key = "gg"; action = "first-entry";}
|
||||||
|
{ map = [ "attach" "browser" "index" ]; key = "G"; action = "last-entry";}
|
||||||
|
{ map = [ "pager" ]; key = "gg"; action = "top"; }
|
||||||
|
{ map = [ "pager" ]; key = "G"; action = "bottom"; }
|
||||||
|
{ map = [ "pager" ]; key = "k"; action = "previous-line"; }
|
||||||
|
{ map = [ "pager" ]; key = "j"; action = "next-line"; }
|
||||||
|
|
||||||
|
# Scrolling
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\CF"; action = "next-page";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\CB"; action = "previous-page";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\Cu"; action = "half-up";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\Cd"; action = "half-down";}
|
||||||
|
{ map = [ "browser" "pager" ]; key = "\\Ce"; action = "next-line";}
|
||||||
|
{ map = [ "browser" "pager" ]; key = "\\Cy"; action = "previous-line";}
|
||||||
|
{ map = [ "index" ]; key = "\\Ce"; action = "next-line";}
|
||||||
|
{ map = [ "index" ]; key = "\\Cy"; action = "previous-line";}
|
||||||
|
|
||||||
|
# Delete
|
||||||
|
{ map = [ "pager" "index" ]; key = "d "; action = "noop";}
|
||||||
|
{ map = [ "pager" "index" ]; key = "dd "; action = "delete-message";}
|
||||||
|
|
||||||
|
# Reply
|
||||||
|
{ map =[ "pager" "index" ]; key = "R "; action = "group-reply";}
|
||||||
|
|
||||||
|
# sidebar
|
||||||
|
{ map = [ "index" "pager" ]; key = "<f12>"; action = "sidebar-toggle-visible";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "{"; action = "sidebar-prev";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "}"; action = "sidebar-next";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "|"; action = "sidebar-open";}
|
||||||
|
|
||||||
|
# open virtual folder
|
||||||
|
{ map = [ "index" "pager" ]; key = "X"; action = "noop";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "X"; action = "change-vfolder";}
|
||||||
|
|
||||||
|
# read entire thread of the current message
|
||||||
|
{ map = [ "index" "pager" ]; key = "+"; action = "entire-thread";}
|
||||||
|
|
||||||
|
# generate virtual folder from query
|
||||||
|
{ map = [ "index" "pager" ]; key = "\\eX"; action = "vfolder-from-query";}
|
||||||
|
|
||||||
|
# generate virtual folder from query with time window
|
||||||
|
{ map = [ "index" ]; key = "<"; action = "vfolder-window-backward";}
|
||||||
|
{ map = [ "index" ]; key = ">"; action = "vfolder-window-forward";}
|
||||||
|
|
||||||
|
{ map = [ "index" "pager" ]; key = "\\CD"; action = "modify-tags";}
|
||||||
|
|
||||||
|
# Editor
|
||||||
|
{ map = [ "editor" ]; key = "<Tab>"; action = "complete-query";}
|
||||||
|
{ map = [ "editor" ]; key = "^T "; action = "complete";}
|
||||||
|
];
|
||||||
|
macros = [
|
||||||
|
#Define some macros here
|
||||||
|
] ++ accountMacros;
|
||||||
};
|
};
|
||||||
programs.mbsync = {
|
programs.mbsync = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -147,7 +206,17 @@ in
|
||||||
services.mbsync = {
|
services.mbsync = {
|
||||||
enable = true;
|
enable = true;
|
||||||
postExec = "${pkgs.notmuch}/bin/notmuch new";
|
postExec = "${pkgs.notmuch}/bin/notmuch new";
|
||||||
package = config.programs.mbsync.package;
|
};
|
||||||
|
programs.notmuch = {
|
||||||
|
enable = true;
|
||||||
|
new.tags = [ "new" ];
|
||||||
|
hooks.postNew = ''
|
||||||
|
${pkgs.afew}/bin/afew --tag --new
|
||||||
|
${pkgs.afew}/bin/afew --move --all
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
programs.msmtp = {
|
||||||
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
*.default=true
|
|
||||||
*.normal=true
|
|
||||||
border.fg=16
|
|
||||||
|
|
||||||
title.fg=5
|
|
||||||
title.bg=0
|
|
||||||
|
|
||||||
|
|
||||||
msglist_*.selected.bold=true
|
|
||||||
msglist_default.selected.bg=19
|
|
||||||
msglist_default.selected.fg=7
|
|
||||||
|
|
||||||
msglist_flagged.italic=true
|
|
||||||
|
|
||||||
msglist_marked.fg=0
|
|
||||||
msglist_marked.bg=4
|
|
||||||
msglist_marked.selected.fg=4
|
|
||||||
msglist_marked.selected.bg=
|
|
||||||
msglist_marked.italic=true
|
|
||||||
|
|
||||||
msglist_result.fg=0
|
|
||||||
msglist_result.bg=3
|
|
||||||
msglist_result.italic=true
|
|
||||||
msglist_result.selected.fg=3
|
|
||||||
msglist_result.selected.bg=
|
|
||||||
|
|
||||||
msglist_pill.bg=8
|
|
||||||
|
|
||||||
dirlist_*.selected.bold=true
|
|
||||||
dirlist_*.selected.bg=19
|
|
||||||
|
|
||||||
part_switcher.fg=7
|
|
||||||
part_switcher.bg=19
|
|
||||||
part_switcher.selected.bg=18
|
|
||||||
|
|
||||||
part_filename.bg=18
|
|
||||||
part_filename.selected.bg=8
|
|
||||||
|
|
||||||
part_mimetype.bg=18
|
|
||||||
part_mimetype.selected.bg=18
|
|
||||||
part_mimetype.selected.dim=true
|
|
||||||
|
|
||||||
statusline_error.fg=0
|
|
||||||
statusline_error.bg=1
|
|
||||||
statusline_error.bold=true
|
|
||||||
|
|
||||||
statusline_success.fg=0
|
|
||||||
statusline_success.bg=2
|
|
||||||
statusline_success.bold=true
|
|
||||||
|
|
||||||
completion_default.bg=18
|
|
||||||
completion_default.fg=20
|
|
||||||
|
|
||||||
completion_description.bg=18
|
|
||||||
completion_description.fg=20
|
|
||||||
|
|
||||||
completion_default.selected.fg=7
|
|
||||||
completion_default.selected.bg=8
|
|
||||||
|
|
||||||
completion_description.selected.fg=7
|
|
||||||
completion_description.selected.bg=8
|
|
||||||
|
|
||||||
selector_*.bg=18
|
|
||||||
|
|
||||||
tab.fg=15
|
|
||||||
tab.bg=19
|
|
||||||
tab.selected.fg=15
|
|
||||||
tab.selected.bg=0
|
|
||||||
|
|
||||||
[viewer]
|
|
||||||
url.fg=4
|
|
||||||
url.underline=true
|
|
||||||
header.fg=1
|
|
||||||
header.bold=true
|
|
||||||
signature.dim=true
|
|
||||||
diff_meta.bold=true
|
|
||||||
diff_chunk.fg=#89b4fa
|
|
||||||
diff_chunk_func.fg=#89b4fa
|
|
||||||
diff_chunk_func.bold=true
|
|
||||||
diff_add.fg=#a6e3a1
|
|
||||||
diff_del.fg=#f38ba8
|
|
||||||
quote_*.fg=8
|
|
||||||
quote_1.fg=17
|
|
||||||
|
|
||||||
[user]
|
|
||||||
thread.fg=1
|
|
||||||
statusline_account.bg=4
|
|
||||||
statusline_account.fg=0
|
|
||||||
statusline_account.bold=true
|
|
||||||
statusline_folder.bg=18
|
|
||||||
statusline_contentinfo.bg=19
|
|
117
modules/home-manager/accounts/email/files/theme.muttrc
Normal file
117
modules/home-manager/accounts/email/files/theme.muttrc
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
# vi: ft=muttrc
|
||||||
|
# base16-mutt: base16-shell support for mutt
|
||||||
|
|
||||||
|
## Base
|
||||||
|
color normal color20 default # softer, bold
|
||||||
|
|
||||||
|
## Weak
|
||||||
|
color tilde color08 default # `~` padding at the end of pager
|
||||||
|
color attachment color08 default
|
||||||
|
color tree color01 default # arrow in threads
|
||||||
|
color signature color08 default
|
||||||
|
color markers color08 default # `+` wrap indicator in pager
|
||||||
|
|
||||||
|
color underline color21 default
|
||||||
|
|
||||||
|
color error color01 default
|
||||||
|
color message color04 default # informational messages
|
||||||
|
color search color08 color03
|
||||||
|
color status color20 color18
|
||||||
|
color indicator color21 color19 # inverse, brighter
|
||||||
|
|
||||||
|
color status color00 color06 ' Pos: ([[:alnum:]]|%)+ '
|
||||||
|
color status color20 color19 ' Sort: ([[:alpha:]]|-)+ '
|
||||||
|
|
||||||
|
# Message Index ----------------------------------------------------------------
|
||||||
|
|
||||||
|
## Index parts
|
||||||
|
color index_number color20 default
|
||||||
|
color index_author color20 default
|
||||||
|
color index_date color20 default
|
||||||
|
color index_flags color20 default
|
||||||
|
color index_tag color20 default
|
||||||
|
color index_tags color20 default
|
||||||
|
|
||||||
|
color index_author italic color06 default "~g !~V"
|
||||||
|
color index_author color04 default "~g ~V"
|
||||||
|
|
||||||
|
color index_subject color04 default "~G"
|
||||||
|
|
||||||
|
color index_date color08 default
|
||||||
|
|
||||||
|
color index_number color08 default
|
||||||
|
color index_subject bold color07 default "(~U|~N|~O)"
|
||||||
|
|
||||||
|
color index_author italic color00 color06 "~T"
|
||||||
|
color index_subject italic color00 color06 "~T"
|
||||||
|
color index_date italic color00 color06 "~T"
|
||||||
|
color index_tags italic color00 color06 "~T"
|
||||||
|
color index_tag italic color00 color06 "~T"
|
||||||
|
|
||||||
|
color index_subject italic bold color00 default "~T (~U|~N|~O)"
|
||||||
|
|
||||||
|
## Weak
|
||||||
|
color index color01 default "~v~(~F)" # collapsed thread with flagged inside
|
||||||
|
|
||||||
|
# Selection
|
||||||
|
color index italic color00 color06 "~T" # tagged messages
|
||||||
|
color index color01 color18 "~D" # deleted messages
|
||||||
|
|
||||||
|
### Message Headers ----------------------------------------------------
|
||||||
|
|
||||||
|
# Base
|
||||||
|
set header_color_partial
|
||||||
|
hdr_order From Date: From: To: Cc: Subject:
|
||||||
|
|
||||||
|
color header color04 default '^[^[:blank:]:]*:'
|
||||||
|
color hdrdefault color20 default
|
||||||
|
color header color17 default "^[Date:] (.*)"
|
||||||
|
color header color04 default "^From:"
|
||||||
|
color header color05 default "^Tags:"
|
||||||
|
color header color16 default "^(To|Cc|CC|BCC):"
|
||||||
|
color header brightcolor07 default "^Subject: (.*)"
|
||||||
|
|
||||||
|
color header color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
|
||||||
|
|
||||||
|
### Message Body -------------------------------------------------------
|
||||||
|
# When possible, these regular expressions attempt to match http://spec.commonmark.org/
|
||||||
|
## Weak
|
||||||
|
# ~~~ Horizontal rules ~~~
|
||||||
|
color body color08 color00 "([[:space:]]*[-+=#*~_]){3,}[[:space:]]*"
|
||||||
|
## Strong
|
||||||
|
# *Bold* span
|
||||||
|
color body brightcolor03 color00 "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
|
||||||
|
# _Underline_ span
|
||||||
|
color body color05 color00 "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
|
||||||
|
# /Italic/ span (Sometimes gets directory names)
|
||||||
|
color body color05 color00 "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
|
||||||
|
# ATX headers
|
||||||
|
color body color04 color00 "^[[:space:]]{0,3}#+[[:space:]].*$"
|
||||||
|
## Highlight
|
||||||
|
# `Code` span
|
||||||
|
color body color02 color00 "(^|[[:space:][:punct:]])\`[^\`]+\`([[:space:][:punct:]]|$)"
|
||||||
|
# Indented code block
|
||||||
|
color body color02 color00 "^[[:space:]]{4,}.*$"
|
||||||
|
# URLs
|
||||||
|
color body italic color04 color00 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
||||||
|
# Email addresses
|
||||||
|
color body color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
|
||||||
|
|
||||||
|
# Emoticons ;-P
|
||||||
|
color body black yellow "[;:][-o]?[})>{(<|P]"
|
||||||
|
|
||||||
|
# PGP
|
||||||
|
color body color02 default "(Good signature)"
|
||||||
|
color body color01 default "(Bad signature)"
|
||||||
|
color body color16 default "(Problem signature)"
|
||||||
|
color body color04 color00 "^gpg: "
|
||||||
|
|
||||||
|
## Quotation blocks
|
||||||
|
color quoted color06 color00
|
||||||
|
color quoted1 color02 color00
|
||||||
|
color quoted2 color03 color00
|
||||||
|
color quoted3 color16 color00
|
||||||
|
color quoted4 color01 color00
|
||||||
|
color quoted5 color17 color00
|
||||||
|
color quoted6 color05 color00
|
||||||
|
color quoted7 color04 color00
|
|
@ -1,2 +0,0 @@
|
||||||
_Inbox=folder:ubordeaux/Inbox
|
|
||||||
_Sent=folder:ubordeaux/Sent
|
|
Loading…
Add table
Add a link
Reference in a new issue