binds.nix (5080B)
1 { 2 lib, 3 config, 4 pkgs, 5 6 user, 7 ... 8 }: 9 { 10 home-manager.users.${user}.programs.aerc.extraBinds = lib.mkMerge [ 11 { 12 global = { 13 "<C-p>" = ":prev-tab<Enter>"; 14 "<C-n>" = ":next-tab<Enter>"; 15 "?" = ":help keys<Enter>"; 16 "<C-t>" = ":term<Enter>"; 17 }; 18 19 # Actions 20 messages = { 21 a = ":read<Enter>,:archive flat<Enter>"; 22 d = ":read<Enter>,:move Spam<Enter>"; 23 f = ":move Important<Enter>"; 24 "<space>" = ":read -t<Enter>"; 25 26 e = ":envelope -h -s '%s: %s'<Enter>"; 27 E = ":pipe -m -s -- vi - -R -c 'set filetype=mail'<Enter>"; 28 29 m = ":compose<Enter>"; 30 b = ":bounce<space>"; 31 rr = ":reply -a<Enter>"; 32 rq = ":reply -aq<Enter>"; 33 Rr = ":reply<Enter>"; 34 Rq = ":reply -q<Enter>"; 35 F = ":forward<Enter>"; 36 37 v = ":mark -t<Enter>"; 38 39 V = ":mark -v<Enter>"; 40 "<Esc>" = [ ":unmark -a<Enter>" ]; 41 }; 42 } 43 { 44 # Navigation 45 messages = { 46 "<Enter>" = ":view<Enter>"; 47 48 j = ":next<Enter>"; 49 k = ":prev<Enter>"; 50 51 "<C-d>" = ":next 50%<Enter>"; 52 "<C-u>" = ":prev 50%<Enter>"; 53 54 "<C-f>" = ":next 100%<Enter>"; 55 "<C-b>" = ":prev 100%<Enter>"; 56 57 G = ":select -1<Enter>"; 58 gg = ":select 0<Enter>"; 59 60 H = ":collapse-folder<Enter>"; 61 J = ":next-folder<Enter>"; 62 K = ":prev-folder<Enter>"; 63 L = ":expand-folder<Enter>"; 64 65 zz = ":align center<Enter>"; 66 zt = ":align top<Enter>"; 67 zb = ":align bottom<Enter>"; 68 }; 69 70 # Search 71 messages = { 72 "/" = ":search<space>"; 73 "\\" = ":filter<space>"; 74 n = ":next-result<Enter>"; 75 N = ":prev-result<Enter>"; 76 77 "<Esc>" = [ ":clear<Enter>" ]; 78 }; 79 80 messages = { 81 T = ":toggle-threads<Enter>"; 82 zc = ":fold<Enter>"; 83 zo = ":unfold<Enter>"; 84 za = ":fold -t<Enter>"; 85 zM = ":fold -a<Enter>"; 86 zR = ":unfold -a<Enter>"; 87 88 c = ":cf<space>"; 89 90 s = ":hsplit<Enter>"; 91 S = ":vsplit<Enter>"; 92 h = ":split -1<Enter>"; 93 l = ":split +1<Enter>"; 94 95 "|" = ":pipe<space>"; 96 pl = ":patch list<Enter>"; 97 pa = ":patch apply <Tab>"; 98 pd = ":patch drop <Tab>"; 99 pb = ":patch rebase <Tab>"; 100 pt = ":patch term<Enter>"; 101 ps = ":patch switch <Tab>"; 102 }; 103 104 "messages:folder=Drafts" = { 105 "<Enter>" = ":recall<Enter>"; 106 }; 107 108 view = { 109 "/" = ":toggle-key-passthrough<Enter>/"; 110 q = ":close<Enter>"; 111 o = ":open<Enter>"; 112 S = ":save<space>"; 113 "|" = ":pipe<space>"; 114 D = ":delete<Enter>"; 115 A = ":archive flat<Enter>"; 116 117 "<C-y>" = ":copy-link <space>"; 118 "<C-l>" = ":open-link <space>"; 119 120 r = ":reply -a<Enter>"; 121 rq = ":reply -aq<Enter>"; 122 Rr = ":reply<Enter>"; 123 Rq = ":reply -q<Enter>"; 124 F = ":forward<Enter>"; 125 126 H = ":toggle-headers<Enter>"; 127 "<C-k>" = ":prev-part<Enter>"; 128 "<C-j>" = ":next-part<Enter>"; 129 J = ":next<Enter>"; 130 K = ":prev<Enter>"; 131 }; 132 133 "view::passthrough" = { 134 "$noinherit" = true; 135 "$ex" = "<C-x>"; 136 "<Esc>" = ":toggle-key-passthrough<Enter>"; 137 }; 138 139 compose = { 140 "$noinherit" = true; 141 "$ex" = "<C-x>"; 142 "$complete" = "<C-o>"; 143 144 "<C-k>" = ":prev-field<Enter>"; 145 "<C-j>" = ":next-field<Enter>"; 146 "<A-p>" = ":switch-account -p<Enter>"; 147 "<A-n>" = ":switch-account -n<Enter>"; 148 "<C-p>" = ":prev-tab<Enter>"; 149 "<C-n>" = ":next-tab<Enter>"; 150 }; 151 152 "compose::editor" = { 153 "$noinherit" = true; 154 "$ex" = "<C-x>"; 155 "<C-k>" = ":prev-field<Enter>"; 156 "<C-j>" = ":next-field<Enter>"; 157 "<C-p>" = ":prev-tab<Enter>"; 158 "<C-n>" = ":next-tab<Enter>"; 159 }; 160 161 "compose::review" = { 162 y = ":send<Enter>"; 163 s = ":sign<Enter>"; 164 x = ":encrypt<Enter>"; 165 v = ":preview<Enter>"; 166 p = ":postpone<Enter>"; 167 q = ":choose -o d discard abort -o p postpone postpone<Enter>"; 168 Q = ":abort<Enter>"; 169 e = ":edit<Enter>"; 170 a = ":attach<space>"; 171 d = ":detach<space>"; 172 }; 173 174 terminal = { 175 "$noinherit" = true; 176 "$ex" = "<C-x>"; 177 178 "<C-p>" = ":prev-tab<Enter>"; 179 "<C-n>" = ":next-tab<Enter>"; 180 }; 181 } 182 183 (lib.mapAttrs' ( 184 name: account: 185 let 186 passwordCmd = lib.concatStringsSep " " account.passwordCommand; 187 in 188 lib.nameValuePair "messages:account=${name}" { 189 "gs" = ":term ${pkgs.writeShellScript "sieve-edit" '' 190 printf "\033]0;%s\a" "Sieve: ${name}" 191 "${lib.getExe pkgs.sieve-connect}" \ 192 --user "${account.userName}" \ 193 --server "${account.imap.host}" \ 194 --passwordfd 5 \ 195 5<<<"$(${passwordCmd})" 196 ''}<Enter>"; 197 } 198 ) config.home-manager.users.${user}.accounts.email.accounts) 199 ]; 200 }