Use home-manager account data structures
This commit is contained in:
parent
0d125352a3
commit
6d061fa210
74
users/simon/modules/mail/accounts.nix
Normal file
74
users/simon/modules/mail/accounts.nix
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
signaturePersonal = ''
|
||||||
|
--
|
||||||
|
Simon Bruder
|
||||||
|
Wallmersbach 42
|
||||||
|
97215 Uffenheim
|
||||||
|
|
||||||
|
🔑 (GPG): 47E7 559E 037A 3565 2DBB F8AA 8D3C 82F9 F309 F8EC
|
||||||
|
📧 (e-mail): simon@sbruder.de
|
||||||
|
📱 (mobile): +49 152 56561414
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
accounts.email = {
|
||||||
|
accounts = {
|
||||||
|
personal = rec {
|
||||||
|
primary = true;
|
||||||
|
|
||||||
|
realName = "Simon Bruder";
|
||||||
|
address = "simon@sbruder.de";
|
||||||
|
aliases = [ ]; # FIXME!?
|
||||||
|
|
||||||
|
userName = address;
|
||||||
|
passwordCommand = "pass sbruder.de/mail";
|
||||||
|
|
||||||
|
imap = {
|
||||||
|
host = "vueko.sbruder.de";
|
||||||
|
tls.useStartTls = true;
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
host = "vueko.sbruder.de";
|
||||||
|
tls.useStartTls = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpg = {
|
||||||
|
key = config.programs.gpg.settings.default-key;
|
||||||
|
signByDefault = true;
|
||||||
|
encryptByDefault = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
signature.text = signaturePersonal;
|
||||||
|
|
||||||
|
aerc.enable = true;
|
||||||
|
};
|
||||||
|
riseup = rec {
|
||||||
|
realName = "Simon Bruder";
|
||||||
|
address = "sbruder@riseup.net";
|
||||||
|
|
||||||
|
userName = address;
|
||||||
|
passwordCommand = "pass web/riseup.net | head -n 1";
|
||||||
|
|
||||||
|
imap = {
|
||||||
|
host = "mail.riseup.net";
|
||||||
|
tls.useStartTls = true;
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
host = "mail.riseup.net";
|
||||||
|
tls.useStartTls = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpg = {
|
||||||
|
key = config.programs.gpg.settings.default-key;
|
||||||
|
signByDefault = true;
|
||||||
|
encryptByDefault = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
signature.text = signaturePersonal;
|
||||||
|
|
||||||
|
aerc.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,278 +1,273 @@
|
||||||
{ lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
package = pkgs.aerc;
|
package = pkgs.aerc;
|
||||||
|
|
||||||
accountDefaults = {
|
|
||||||
smtp-starttls = "yes";
|
|
||||||
copy-to = "Sent";
|
|
||||||
signature-file = pkgs.writeText "signature" ''
|
|
||||||
--
|
|
||||||
Simon Bruder
|
|
||||||
Wallmersbach 42
|
|
||||||
97215 Uffenheim
|
|
||||||
|
|
||||||
🔑 (GPG): 47E7 559E 037A 3565 2DBB F8AA 8D3C 82F9 F309 F8EC
|
|
||||||
📧 (E-Mail): simon@sbruder.de
|
|
||||||
📱 (mobile): +49 152 56561414
|
|
||||||
'';
|
|
||||||
pgp-auto-sign = true;
|
|
||||||
pgp-key-id = "47E7559E037A35652DBBF8AA8D3C82F9F309F8EC";
|
|
||||||
pgp-opportunistic-encrypt = true;
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
home.packages = [
|
options = {
|
||||||
package
|
accounts.email.accounts = lib.mkOption {
|
||||||
];
|
type = lib.types.attrsOf (lib.types.submodule {
|
||||||
|
options.aerc.enable = lib.mkEnableOption "aerc";
|
||||||
xdg.configFile = {
|
});
|
||||||
"aerc/accounts.conf".text = lib.generators.toINI { } {
|
|
||||||
Personal = accountDefaults // {
|
|
||||||
source = "`imap://simon%40sbruder.de@vueko.sbruder.de`";
|
|
||||||
source-cred-cmd = "`pass sbruder.de/mail`";
|
|
||||||
outgoing = "`smtp+plain://simon%40sbruder.de@vueko.sbruder.de`";
|
|
||||||
outgoing-cred-cmd = "`pass sbruder.de/mail`";
|
|
||||||
from = "Simon Bruder <simon@sbruder.de>";
|
|
||||||
};
|
|
||||||
|
|
||||||
Riseup = accountDefaults // {
|
|
||||||
source = "`imap://sbruder@mail.riseup.net`";
|
|
||||||
source-cred-cmd = "`pass web/riseup.net | head -n 1`";
|
|
||||||
outgoing = "`smtp+plain://sbruder@mail.riseup.net`";
|
|
||||||
outgoing-cred-cmd = "`pass web/riseup.net | head -n 1`";
|
|
||||||
from = "Simon Bruder <sbruder@riseup.net>";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
home.packages = [
|
||||||
|
package
|
||||||
|
];
|
||||||
|
|
||||||
"aerc/aerc.conf".text = lib.generators.toINI { } {
|
xdg.configFile = {
|
||||||
general = {
|
"aerc/accounts.conf".text = lib.generators.toINI { } (lib.mapAttrs
|
||||||
pgp-provider = "gpg"; # internal does not work
|
# incomplete support for all configuration options!
|
||||||
|
(name: config: with config; let
|
||||||
# Allow world-readable accounts.conf (passwords are not stored in it, so it is ok)
|
quoteMailAddress = lib.replaceChars [ "@" ] [ "%40" ];
|
||||||
unsafe-accounts-conf = true;
|
in
|
||||||
};
|
|
||||||
|
|
||||||
ui = {
|
|
||||||
index-format = "%-17.17D %-20.20n %Z %s";
|
|
||||||
|
|
||||||
# See https://godoc.org/time#Time.Format
|
|
||||||
timestamp-format = "2006-01-02 15:04 MST";
|
|
||||||
this-day-time-format = "15:04";
|
|
||||||
this-week-time-format = "Monday 15:04";
|
|
||||||
this-year-time-format = "02 January";
|
|
||||||
|
|
||||||
pinned-tab-marker = "車";
|
|
||||||
|
|
||||||
border-char-vertical = "│";
|
|
||||||
border-char-horizontal = "─";
|
|
||||||
|
|
||||||
fuzzy-complete = true;
|
|
||||||
|
|
||||||
threading-enabled = true;
|
|
||||||
|
|
||||||
new-message-bell = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
statusline = {
|
|
||||||
display-mode = "icon";
|
|
||||||
};
|
|
||||||
|
|
||||||
viewer = {
|
|
||||||
header-layout = lib.concatStringsSep "," [
|
|
||||||
"From|To"
|
|
||||||
"Cc|Bcc"
|
|
||||||
"Subject"
|
|
||||||
"Date"
|
|
||||||
"Reply-To"
|
|
||||||
"X-Mailer"
|
|
||||||
"User-Agent"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
compose = {
|
|
||||||
editor = "nvim";
|
|
||||||
|
|
||||||
header-layout = lib.concatStringsSep "," [
|
|
||||||
"To|From"
|
|
||||||
"Subject"
|
|
||||||
];
|
|
||||||
|
|
||||||
address-book-cmd = "khard email --parsable --remove-first-line %s";
|
|
||||||
};
|
|
||||||
|
|
||||||
filters = {
|
|
||||||
"subject,~^\\[PATCH" = "awk -f ${package}/share/aerc/filters/hldiff";
|
|
||||||
"text/plain" = "${./colorize}"; # taken from upstream and patched
|
|
||||||
"text/html" = "html"; # internal filter
|
|
||||||
"text/calendar" = "${pkgs.python3.withPackages (ps: with ps; [ vobject ])}/bin/python ${package}/share/aerc/filters/show-ics-details.py"; # hacky fix for broken nix support
|
|
||||||
};
|
|
||||||
|
|
||||||
triggers = {
|
|
||||||
new-email = "exec notify-send -i mail-unread-symbolic 'New e-mail from %n' '%s'";
|
|
||||||
};
|
|
||||||
|
|
||||||
templates = { };
|
|
||||||
};
|
|
||||||
|
|
||||||
"aerc/binds.conf".text = lib.generators.toINIWithGlobalSection { } {
|
|
||||||
globalSection = {
|
|
||||||
# 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
|
|
||||||
"<C-p>" = ":prev-tab<Enter>";
|
|
||||||
"<C-n>" = ":next-tab<Enter>";
|
|
||||||
"<C-t>" = ":term<Enter>";
|
|
||||||
};
|
|
||||||
|
|
||||||
sections = {
|
|
||||||
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" = ":delete<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>";
|
|
||||||
"\\" = ":filter<space>";
|
|
||||||
"n" = ":next-result<Enter>";
|
|
||||||
"N" = ":prev-result<Enter>";
|
|
||||||
"<Esc>" = ":clear<Enter>";
|
|
||||||
};
|
|
||||||
|
|
||||||
view = {
|
|
||||||
"/" = ":toggle-key-passthrough<Enter>/";
|
|
||||||
"q" = ":close<Enter>";
|
|
||||||
"O" = ":open<Enter>";
|
|
||||||
"S" = ":save<space>";
|
|
||||||
"|" = ":pipe<space>";
|
|
||||||
"D" = ":delete<Enter>";
|
|
||||||
"A" = ":archive flat<Enter>";
|
|
||||||
|
|
||||||
"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>";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Keybindings used when the embedded terminal is not selected in the compose view"
|
|
||||||
compose = {
|
|
||||||
"$ex" = "<C-x>";
|
|
||||||
"<C-k>" = ":prev-field<Enter>";
|
|
||||||
"<C-j>" = ":next-field<Enter>";
|
|
||||||
"<tab>" = ":next-field<Enter>";
|
|
||||||
"<backtab>" = ":prev-field<Enter>";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Keybindings used when the embedded terminal is selected in the compose view
|
|
||||||
"compose::editor" = {
|
|
||||||
"$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>";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Keybindings used when reviewing a message to be sent
|
|
||||||
"compose::review" = {
|
|
||||||
"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>";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"aerc/stylesets/default".text = lib.concatStrings
|
|
||||||
(lib.mapAttrsToList
|
|
||||||
(k: v: "${k} = ${if lib.isBool v then (if v then "true" else "false") else toString v}\n")
|
|
||||||
{
|
{
|
||||||
"*.selected.reverse" = true;
|
source = "`imap://${quoteMailAddress address}@${imap.host}`";
|
||||||
|
source-cred-cmd = "`${lib.concatStringsSep " " passwordCommand}`";
|
||||||
|
outgoing = "`smtp+plain://${quoteMailAddress address}@${smtp.host}`";
|
||||||
|
outgoing-cred-cmd = "`${lib.concatStringsSep " " passwordCommand}`";
|
||||||
|
from = "${realName} <${address}>";
|
||||||
|
smtp-starttls = if smtp.tls.useStartTls then "yes" else "no";
|
||||||
|
copy-to = "Sent";
|
||||||
|
signature-file = pkgs.writeText "signature-${name}" signature.text;
|
||||||
|
pgp-key-id = gpg.key;
|
||||||
|
pgp-auto-sign = gpg.signByDefault;
|
||||||
|
pgp-opportunistic-encrypt = gpg.encryptByDefault;
|
||||||
|
})
|
||||||
|
(lib.filterAttrs
|
||||||
|
(_: config: config.aerc.enable)
|
||||||
|
config.accounts.email.accounts));
|
||||||
|
|
||||||
"title.reverse" = true;
|
"aerc/aerc.conf".text = lib.generators.toINI { } {
|
||||||
"header.bold" = true;
|
general = {
|
||||||
|
pgp-provider = "gpg"; # internal does not work
|
||||||
|
|
||||||
"*error.bold" = true;
|
# Allow world-readable accounts.conf (passwords are not stored in it, so it is ok)
|
||||||
"error.fg" = 1;
|
unsafe-accounts-conf = true;
|
||||||
"warning.fg" = 3;
|
};
|
||||||
"success.fg" = 2;
|
|
||||||
|
|
||||||
"statusline_default.bg" = 0;
|
ui = {
|
||||||
"statusline_error.fg" = 1;
|
index-format = "%-17.17D %-20.20n %Z %s";
|
||||||
"statusline_error.reverse" = true;
|
|
||||||
"statusline_success.fg" = 2;
|
|
||||||
"statusline_success.reverse" = true;
|
|
||||||
|
|
||||||
"msglist_unread.bold" = true;
|
# See https://godoc.org/time#Time.Format
|
||||||
"msglist_deleted.fg" = 10;
|
timestamp-format = "2006-01-02 15:04 MST";
|
||||||
|
this-day-time-format = "15:04";
|
||||||
|
this-week-time-format = "Monday 15:04";
|
||||||
|
this-year-time-format = "02 January";
|
||||||
|
|
||||||
"tab.bg" = 11;
|
pinned-tab-marker = "車";
|
||||||
"tab.selected.reverse" = false;
|
|
||||||
"tab.selected.bg" = 12;
|
|
||||||
"tab.fg" = 0;
|
|
||||||
|
|
||||||
"completion_default.bg" = 0;
|
border-char-vertical = "│";
|
||||||
});
|
border-char-horizontal = "─";
|
||||||
|
|
||||||
|
fuzzy-complete = true;
|
||||||
|
|
||||||
|
threading-enabled = true;
|
||||||
|
|
||||||
|
new-message-bell = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
statusline = {
|
||||||
|
display-mode = "icon";
|
||||||
|
};
|
||||||
|
|
||||||
|
viewer = {
|
||||||
|
header-layout = lib.concatStringsSep "," [
|
||||||
|
"From|To"
|
||||||
|
"Cc|Bcc"
|
||||||
|
"Subject"
|
||||||
|
"Date"
|
||||||
|
"Reply-To"
|
||||||
|
"X-Mailer"
|
||||||
|
"User-Agent"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
compose = {
|
||||||
|
editor = "nvim";
|
||||||
|
|
||||||
|
header-layout = lib.concatStringsSep "," [
|
||||||
|
"To|From"
|
||||||
|
"Subject"
|
||||||
|
];
|
||||||
|
|
||||||
|
address-book-cmd = "khard email --parsable --remove-first-line %s";
|
||||||
|
};
|
||||||
|
|
||||||
|
filters = {
|
||||||
|
"subject,~^\\[PATCH" = "awk -f ${package}/share/aerc/filters/hldiff";
|
||||||
|
"text/plain" = "${./colorize}"; # taken from upstream and patched
|
||||||
|
"text/html" = "html"; # internal filter
|
||||||
|
"text/calendar" = "${pkgs.python3.withPackages (ps: with ps; [ vobject ])}/bin/python ${package}/share/aerc/filters/show-ics-details.py"; # hacky fix for broken nix support
|
||||||
|
};
|
||||||
|
|
||||||
|
triggers = {
|
||||||
|
new-email = "exec notify-send -i mail-unread-symbolic 'New e-mail from %n' '%s'";
|
||||||
|
};
|
||||||
|
|
||||||
|
templates = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
"aerc/binds.conf".text = lib.generators.toINIWithGlobalSection { } {
|
||||||
|
globalSection = {
|
||||||
|
# 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
|
||||||
|
"<C-p>" = ":prev-tab<Enter>";
|
||||||
|
"<C-n>" = ":next-tab<Enter>";
|
||||||
|
"<C-t>" = ":term<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
sections = {
|
||||||
|
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" = ":delete<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>";
|
||||||
|
"\\" = ":filter<space>";
|
||||||
|
"n" = ":next-result<Enter>";
|
||||||
|
"N" = ":prev-result<Enter>";
|
||||||
|
"<Esc>" = ":clear<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
view = {
|
||||||
|
"/" = ":toggle-key-passthrough<Enter>/";
|
||||||
|
"q" = ":close<Enter>";
|
||||||
|
"O" = ":open<Enter>";
|
||||||
|
"S" = ":save<space>";
|
||||||
|
"|" = ":pipe<space>";
|
||||||
|
"D" = ":delete<Enter>";
|
||||||
|
"A" = ":archive flat<Enter>";
|
||||||
|
|
||||||
|
"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>";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keybindings used when the embedded terminal is not selected in the compose view"
|
||||||
|
compose = {
|
||||||
|
"$ex" = "<C-x>";
|
||||||
|
"<C-k>" = ":prev-field<Enter>";
|
||||||
|
"<C-j>" = ":next-field<Enter>";
|
||||||
|
"<tab>" = ":next-field<Enter>";
|
||||||
|
"<backtab>" = ":prev-field<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keybindings used when the embedded terminal is selected in the compose view
|
||||||
|
"compose::editor" = {
|
||||||
|
"$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>";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keybindings used when reviewing a message to be sent
|
||||||
|
"compose::review" = {
|
||||||
|
"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>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"aerc/stylesets/default".text = lib.concatStrings
|
||||||
|
(lib.mapAttrsToList
|
||||||
|
(k: v: "${k} = ${if lib.isBool v then (if v then "true" else "false") else toString v}\n")
|
||||||
|
{
|
||||||
|
"*.selected.reverse" = true;
|
||||||
|
|
||||||
|
"title.reverse" = true;
|
||||||
|
"header.bold" = true;
|
||||||
|
|
||||||
|
"*error.bold" = true;
|
||||||
|
"error.fg" = 1;
|
||||||
|
"warning.fg" = 3;
|
||||||
|
"success.fg" = 2;
|
||||||
|
|
||||||
|
"statusline_default.bg" = 0;
|
||||||
|
"statusline_error.fg" = 1;
|
||||||
|
"statusline_error.reverse" = true;
|
||||||
|
"statusline_success.fg" = 2;
|
||||||
|
"statusline_success.reverse" = true;
|
||||||
|
|
||||||
|
"msglist_unread.bold" = true;
|
||||||
|
"msglist_deleted.fg" = 10;
|
||||||
|
|
||||||
|
"tab.bg" = 11;
|
||||||
|
"tab.selected.reverse" = false;
|
||||||
|
"tab.selected.bg" = 12;
|
||||||
|
"tab.fg" = 0;
|
||||||
|
|
||||||
|
"completion_default.bg" = 0;
|
||||||
|
});
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./accounts.nix
|
||||||
./aerc
|
./aerc
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue