{ config, lib, ... }: let inherit (lib.modules) mkIf mkMerge; inherit (lib.nvim.binds) mkBinding pushDownDefault; inherit (lib.nvim.dag) entryAnywhere; cfg = config.vim.utility.motion.leap; in { config = mkIf cfg.enable { vim.startPlugins = [ "leap-nvim" "vim-repeat" ]; vim.maps.normal = mkMerge [ (mkBinding cfg.mappings.leapForwardTo "(leap-forward-to)" "Leap forward to") (mkBinding cfg.mappings.leapBackwardTo "(leap-backward-to)" "Leap backward to") (mkBinding cfg.mappings.leapFromWindow "(leap-from-window)" "Leap from window") ]; vim.maps.operator = mkMerge [ (mkBinding cfg.mappings.leapForwardTo "(leap-forward-to)" "Leap forward to") (mkBinding cfg.mappings.leapBackwardTo "(leap-backward-to)" "Leap backward to") (mkBinding cfg.mappings.leapForwardTill "(leap-forward-till)" "Leap forward till") (mkBinding cfg.mappings.leapBackwardTill "(leap-backward-till)" "Leap backward till") (mkBinding cfg.mappings.leapFromWindow "(leap-from-window)" "Leap from window") ]; vim.maps.visualOnly = mkMerge [ (mkBinding cfg.mappings.leapForwardTo "(leap-forward-to)" "Leap forward to") (mkBinding cfg.mappings.leapBackwardTo "(leap-backward-to)" "Leap backward to") (mkBinding cfg.mappings.leapForwardTill "(leap-forward-till)" "Leap forward till") (mkBinding cfg.mappings.leapBackwardTill "(leap-backward-till)" "Leap backward till") (mkBinding cfg.mappings.leapFromWindow "(leap-from-window)" "Leap from window") ]; vim.binds.whichKey.register = pushDownDefault { "s" = "+Leap"; }; vim.pluginRC.leap-nvim = entryAnywhere '' require('leap').opts = { max_phase_one_targets = nil, highlight_unlabeled_phase_one_targets = false, max_highlighted_traversal_targets = 10, case_sensitive = false, equivalence_classes = { ' \t\r\n', }, substitute_chars = {}, safe_labels = { "s", "f", "n", "u", "t", "/", "S", "F", "N", "L", "H", "M", "U", "G", "T", "?", "Z" }, labels = { "s", "f", "n", "j", "k", "l", "h", "o", "d", "w", "e", "m", "b", "u", "y", "v", "r", "g", "t", "c", "x", "/", "z", "S", "F", "N", "J", "K", "L", "H", "O", "D", "W", "E", "M", "B", "U", "Y", "V", "R", "G", "T", "C", "X", "?", "Z" }, special_keys = { repeat_search = '', next_phase_one_target = '', next_target = {'', ';'}, prev_target = {'', ','}, next_group = '', prev_group = '', multi_accept = '', multi_revert = '', }, } ''; }; }