dot

NixOS dotfiles
git clone https://git.echoz.io/dot.git
Log | Files | Refs

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 }