mirror of
https://github.com/nmasur/dotfiles
synced 2024-12-27 08:44:52 +00:00
221 lines
7.0 KiB
Nix
221 lines
7.0 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
{
|
|
|
|
options.mail.aerc.enable = lib.mkEnableOption "Aerc email.";
|
|
|
|
config = lib.mkIf config.mail.aerc.enable {
|
|
|
|
home-manager.users.${config.user} = {
|
|
|
|
home.packages = with pkgs; [
|
|
w3m # Render HTML
|
|
dante # Socksify for rendering HTML
|
|
];
|
|
|
|
programs.aerc = {
|
|
enable = true;
|
|
extraBinds = {
|
|
# Binds are of the form <key sequence> = <command to run>
|
|
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
|
|
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
|
|
global = {
|
|
"<C-p>" = ":prev-tab<Enter>";
|
|
"<C-n>" = ":next-tab <Enter>";
|
|
"<C-t>" = ":term<Enter>";
|
|
"?" = ":help keys<Enter>";
|
|
};
|
|
|
|
messages = {
|
|
q = ":quit<Enter>";
|
|
|
|
j = ":next <Enter>";
|
|
"<Down>" = ":next<Enter>";
|
|
"<C-d>" = ":next 50%<Enter>";
|
|
"<C-f>" = ":next 100%<Enter>";
|
|
"<PgDn>" = ":next 100%<Enter>";
|
|
|
|
k = ":prev <Enter>";
|
|
"<Up>" = ":prev<Enter>";
|
|
"<C-u>" = ":prev 50%<Enter>";
|
|
"<C-b>" = ":prev 100%<Enter>";
|
|
"<PgUp>" = ":prev 100%<Enter>";
|
|
g = ":select 0 <Enter>";
|
|
G = ":select -1<Enter>";
|
|
|
|
J = ":next-folder <Enter>";
|
|
K = ":prev-folder<Enter>";
|
|
H = ":collapse-folder<Enter>";
|
|
L = ":expand-folder<Enter>";
|
|
|
|
v = ":mark -t<Enter>";
|
|
V = ":mark -v<Enter>";
|
|
|
|
T = ":toggle-threads<Enter>";
|
|
|
|
"<Enter>" = ":view<Enter>";
|
|
d = ":prompt 'Really delete this message?' 'delete-message'<Enter>";
|
|
D = ":move Trash<Enter>";
|
|
A = ":archive flat<Enter>";
|
|
|
|
C = ":compose<Enter>";
|
|
|
|
rr = ":reply -a<Enter>";
|
|
rq = ":reply -aq<Enter>";
|
|
Rr = ":reply<Enter>";
|
|
Rq = ":reply -q<Enter>";
|
|
|
|
c = ":cf<space>";
|
|
"$" = ":term<space>";
|
|
"!" = ":term<space>";
|
|
"|" = ":pipe<space>";
|
|
|
|
"/" = ":search<space>-a<space>";
|
|
"\\" = ":filter <space>";
|
|
n = ":next-result<Enter>";
|
|
N = ":prev-result<Enter>";
|
|
"<Esc>" = ":clear<Enter>";
|
|
};
|
|
|
|
"messages:folder=Drafts" = {
|
|
"<Enter>" = ":recall<Enter>";
|
|
};
|
|
|
|
view = {
|
|
"/" = ":toggle-key-passthrough <Enter> /";
|
|
q = ":close<Enter>";
|
|
O = ":open<Enter>";
|
|
S = ":save<space>";
|
|
"|" = ":pipe<space>";
|
|
D = ":move Trash<Enter>";
|
|
A = ":archive flat<Enter>";
|
|
|
|
"<C-l>" = ":open-link <space>";
|
|
|
|
f = ":forward <Enter>";
|
|
rr = ":reply -a<Enter>";
|
|
rq = ":reply -aq<Enter>";
|
|
Rr = ":reply<Enter>";
|
|
Rq = ":reply -q<Enter>";
|
|
|
|
H = ":toggle-headers<Enter>";
|
|
"<C-k>" = ":prev-part<Enter>";
|
|
"<C-j>" = ":next-part<Enter>";
|
|
J = ":next <Enter>";
|
|
K = ":prev<Enter>";
|
|
};
|
|
|
|
"view::passthrough" = {
|
|
"$noinherit" = "true";
|
|
"$ex" = "<C-x>";
|
|
"<Esc>" = ":toggle-key-passthrough<Enter>";
|
|
};
|
|
|
|
compose = {
|
|
# Keybindings used when the embedded terminal is not selected in the compose
|
|
# view
|
|
"$noinherit" = "true";
|
|
"$ex" = "<C-x>";
|
|
"<C-k>" = ":prev-field<Enter>";
|
|
"<C-j>" = ":next-field<Enter>";
|
|
"<A-p>" = ":switch-account -p<Enter>";
|
|
"<A-n>" = ":switch-account -n<Enter>";
|
|
"<tab>" = ":next-field<Enter>";
|
|
"<C-p>" = ":prev-tab<Enter>";
|
|
"<C-n>" = ":next-tab<Enter>";
|
|
};
|
|
|
|
"compose::editor" = {
|
|
# Keybindings used when the embedded terminal is selected in the compose view
|
|
"$noinherit" = "true";
|
|
"$ex" = "<C-x>";
|
|
"<C-k>" = ":prev-field<Enter>";
|
|
"<C-j>" = ":next-field<Enter>";
|
|
"<C-p>" = ":prev-tab<Enter>";
|
|
"<C-n>" = ":next-tab<Enter>";
|
|
};
|
|
|
|
"compose::review" = {
|
|
# Keybindings used when reviewing a message to be sent
|
|
y = ":send <Enter>";
|
|
n = ":abort<Enter>";
|
|
p = ":postpone<Enter>";
|
|
q = ":choose -o d discard abort -o p postpone postpone<Enter>";
|
|
e = ":edit<Enter>";
|
|
a = ":attach<space>";
|
|
d = ":detach<space>";
|
|
};
|
|
|
|
terminal = {
|
|
"$noinherit" = "true";
|
|
"$ex" = "<C-x>";
|
|
"<C-p>" = ":prev-tab<Enter>";
|
|
"<C-n>" = ":next-tab<Enter>";
|
|
};
|
|
};
|
|
extraConfig = {
|
|
general = {
|
|
unsafe-accounts-conf = true;
|
|
# log-file = "~/.cache/aerc.log";
|
|
# log-level = "debug";
|
|
};
|
|
viewer = {
|
|
pager = "${pkgs.less}/bin/less -R";
|
|
};
|
|
filters = {
|
|
"text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
|
|
"text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/libexec/aerc/filters/calendar";
|
|
"text/html" =
|
|
"${pkgs.aerc}/libexec/aerc/filters/html | ${pkgs.aerc}/libexec/aerc/filters/colorize"; # Requires w3m, dante
|
|
# "text/*" =
|
|
# ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
|
|
"message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
|
|
"message/rfc822" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
|
|
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";
|
|
"application/pdf" = "${pkgs.zathura}/bin/zathura -";
|
|
"audio/*" = "${pkgs.mpv}/bin/mpv -";
|
|
"image/*" = "${pkgs.feh}/bin/feh -";
|
|
};
|
|
};
|
|
};
|
|
accounts.email.accounts.home.aerc = {
|
|
enable = true;
|
|
extraAccounts = {
|
|
check-mail = "5m";
|
|
check-mail-cmd = "${pkgs.isync}/bin/mbsync -a";
|
|
check-mail-timeout = "15s";
|
|
};
|
|
};
|
|
|
|
xdg.desktopEntries.aerc = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) {
|
|
name = "aerc";
|
|
exec = "${config.terminalLaunchCommand} aerc %u";
|
|
};
|
|
xsession.windowManager.i3.config.keybindings = lib.mkIf pkgs.stdenv.isLinux {
|
|
"${config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier}+Shift+e" =
|
|
"exec ${
|
|
# Don't name the script `aerc` or it will affect grep
|
|
builtins.toString (
|
|
pkgs.writeShellScript "focus-mail.sh" ''
|
|
count=$(ps aux | grep -c aerc)
|
|
if [ "$count" -eq 1 ]; then
|
|
i3-msg "exec --no-startup-id ${config.terminal} start --class aerc -- aerc"
|
|
sleep 0.25
|
|
fi
|
|
i3-msg "[class=aerc] focus"
|
|
''
|
|
)
|
|
}";
|
|
};
|
|
|
|
programs.fish.shellAbbrs = {
|
|
ae = "aerc";
|
|
};
|
|
};
|
|
};
|
|
}
|