{ cfg, lib, }: { caret = { "" = "mode-leave"; H = "scroll left"; T = "scroll down"; N = "scroll up"; S = "scroll right"; h = "move-to-prev-char"; t = "move-to-next-line"; n = "move-to-prev-line"; s = "move-to-next-char"; "$" = "move-to-end-of-line"; "0" = "move-to-start-of-line"; G = "move-to-end-of-document"; gg = "move-to-start-of-document"; b = "move-to-prev-word"; c = "mode-enter normal"; e = "move-to-end-of-word"; w = "move-to-next-word"; "{" = "move-to-end-of-prev-block"; "}" = "move-to-end-of-next-block"; "[" = "move-to-start-of-prev-block"; "]" = "move-to-start-of-next-block"; y = "yank selection"; Y = "yank selection -s"; V = "selection-toggle --line"; v = "selection-toggle"; "" = "selection-drop"; "" = "yank selection"; "" = "selection-toggle"; o = "selection-reverse"; }; command = { "" = "rl-backward-word"; "" = "rl-backward-kill-word"; "" = "rl-kill-word"; "" = "rl-forward-word"; "" = "rl-delete-char"; "" = "rl-beginning-of-line"; "" = "rl-backward-char"; "" = "completion-item-yank"; "" = "completion-item-del"; "" = "rl-end-of-line"; "" = "rl-forward-char"; "" = "rl-backward-delete-char"; "" = "rl-kill-line"; "" = "command-history-next"; "" = "command-history-prev"; "" = "command-accept --rapid"; "" = "completion-item-yank --sel"; "" = "completion-item-focus prev-category"; "" = "rl-filename-rubout"; "" = "completion-item-focus next-category"; "" = "rl-unix-line-discard"; "" = "rl-rubout \" \""; "" = "rl-yank"; "" = "completion-item-focus --history next"; "" = "mode-leave"; "" = "completion-item-focus next-page"; "" = "completion-item-focus prev-page"; "" = "command-accept"; "" = "completion-item-del"; "" = "completion-item-focus prev"; "" = "completion-item-focus next"; "" = "completion-item-focus --history prev"; }; hint = { "" = "hint all tab-bg"; "" = "hint links"; "" = "hint --rapid links tab-bg"; "" = "mode-leave"; "" = "hint-follow"; }; insert = { "" = "edit-text"; "" = "mode-leave"; "" = "fake-key "; "" = "insert-text -- {primary}"; "" = "spawn --userscript qute-keepassxc --key ${lib.escapeShellArg cfg.key}"; }; normal = { # a # b # c # d -> download management # e -> [e]merge tab # f -> `hint all` # g -> tabs [g]oing # h -> `back` # i -> `mode-enter insert` # j -> inputs # k # l -> `search-next` # m -> in page movement # n -> `scroll up` # o # p # q -> `macro-record` # r # s -> `forward` # t -> `scroll down` # u -> `undo` # v -> `mode-enter caret` # w -> theme switching # x -> hinting # y -> yanking # z # Theme switching wd = "set --temp colors.webpage.darkmode.enabled true"; wl = "set --temp colors.webpage.darkmode.enabled false"; # Tab [g]oing "g$" = "tab-focus -1"; g0 = "tab-focus 1"; gh = "home"; gH = "history"; gs = "cmd-set-text --space :open"; gP = "open -- {primary}"; gp = "open -- {clipboard}"; go = "cmd-set-text :open {url:pretty}"; gt = "cmd-set-text --space :tab-select"; # TODO(@bpeetz): Make this to a lf tab listing. <2025-05-31> "\\f" = "cmd-set-text --space --relative :tab-focus"; eP = "open --tab -- {primary}"; ep = "open --tab -- {clipboard}"; ea = "open --tab"; es = "cmd-set-text --space :open --tab"; eo = "cmd-set-text :open --tab --related {url:pretty}"; eh = "back --tab"; en = "forward --tab"; ec = "tab-clone"; em = "tab-move"; ed = "tab-close"; eR = "reload --force"; er = "reload"; # Download management dm = "download"; dc = "download-cancel"; dp = "download-clear"; do = "download-open"; dr = "download-retry"; # In page hierarchy [m]ovement mi = "navigate increment"; md = "navigate increment"; mp = "navigate prev"; mn = "navigate next"; mu = "navigate up"; mh = "navigate strip"; # Page movement H = "scroll left"; t = "scroll down"; n = "scroll up"; S = "scroll right"; h = "back"; T = "tab-prev"; N = "tab-next"; s = "forward"; G = "scroll-to-perc"; gg = "scroll-to-perc 0"; l = "search-next"; L = "search-prev"; "+" = "zoom-in"; "-" = "zoom-out"; "=" = "zoom"; "." = "cmd-repeat-last"; "/" = "cmd-set-text /"; "?" = "cmd-set-text ?"; ":" = "cmd-set-text :"; # Hinting xI = "hint images tab"; xi = "hint images"; xO = "hint links fill :open --tab --related {hint-url}"; xo = "hint links fill :open {hint-url}"; xY = "hint links yank-primary"; xy = "hint links yank"; xb = "hint all tab-bg"; xf = "hint all tab-fg"; xd = "hint links download"; xh = "hint all hover"; xr = "hint --rapid links tab-bg"; xt = "hint inputs"; f = "hint all"; # Inputs jf = "hint inputs --first"; jk = "spawn --userscript qute-keepassxc --key ${lib.escapeShellArg cfg.key}"; # Yanking yD = "yank domain --sel"; yM = "yank inline [{title}]({url:yank}) --sel"; yP = "yank pretty-url --sel"; yT = "yank title --sel"; yY = "yank --sel"; yd = "yank domain"; ym = "yank inline [{title}]({url:yank})"; yp = "yank pretty-url"; yt = "yank title"; yy = "yank"; "" = "clear-keychain ;; search ;; fullscreen --leave ;; clear-messages"; "" = "scroll-page 0 -1"; "" = "scroll-page 0 1"; "" = "selection-follow --tab"; "" = "selection-follow"; "" = "back"; "" = "forward"; i = "mode-enter insert"; "'" = "mode-enter jump_mark"; "`" = "mode-enter set_mark"; v = "mode-enter caret"; V = "mode-enter caret ;; selection-toggle --line"; "" = "mode-enter passthrough"; q = "macro-record"; "@" = "macro-run"; u = "undo"; U = "undo --window"; }; passthrough = { "" = "mode-leave"; }; prompt = { "" = "rl-backward-word"; "" = "rl-backward-kill-word"; "" = "rl-kill-word"; "" = "prompt-fileselect-external"; "" = "rl-forward-word"; "" = "prompt-yank --sel"; "" = "prompt-yank"; "" = "rl-delete-char"; "" = "rl-beginning-of-line"; "" = "rl-backward-char"; "" = "rl-end-of-line"; "" = "rl-forward-char"; "" = "rl-backward-delete-char"; "" = "rl-kill-line"; "" = "prompt-open-download --pdfjs"; "" = "rl-filename-rubout"; "" = "rl-unix-line-discard"; "" = "rl-rubout \" \""; "" = "prompt-open-download"; "" = "rl-yank"; "" = "prompt-item-focus next"; "" = "mode-leave"; "" = "prompt-accept"; "" = "prompt-item-focus prev"; "" = "prompt-item-focus next"; "" = "prompt-item-focus prev"; }; register = { "" = "mode-leave"; }; yesno = { "" = "prompt-yank --sel"; "" = "prompt-yank"; "" = "mode-leave"; "" = "prompt-accept"; N = "prompt-accept --save no"; Y = "prompt-accept --save yes"; n = "prompt-accept no"; y = "prompt-accept yes"; }; }