{ config, lib, ... }: with lib.nix2lua; let inherit (lib.mod) Space cmd ctrl leader localLeader; gs = config.plugin.gitsigns-nvim.varName; hop = config.plugin.hop-nvim.varName; in { imports = [ ./base.nix ./recommended-plugins.nix ]; input = { leader = lib.mkDefault ","; localLeader = lib.mkDefault "'"; }; plugins.gitsigns.keymap.set = [ rec { mode = "n"; lhs = "]h"; rhs = lambda0 (ifelse (var "vim.wo.diff") (call1 "vim.cmd.normal" [ lhs (nf "bang" true) ]) (call1 "${gs}.nav_hunk" "next") ); } rec { mode = "n"; lhs = "[h"; rhs = lambda0 (ifelse (var "vim.wo.diff") (call1 "vim.cmd.normal" [ lhs (nf "bang" true) ]) (call1 "${gs}.nav_hunk" "prev") ); } { mode = "n"; lhs = localLeader "gs"; rhs = raw "${gs}.stage_hunk"; } { mode = "n"; lhs = localLeader "gr"; rhs = raw "${gs}.reset_hunk"; } { mode = "n"; lhs = localLeader "gu"; rhs = raw "${gs}.undo_stage_hunk"; } { mode = "n"; lhs = localLeader "gp"; rhs = raw "${gs}.preview_hunk"; } { mode = "n"; lhs = localLeader "gb"; rhs = lambda0 (call "${gs}.blame_line" { full = true; }); } { mode = "n"; lhs = localLeader "gd"; rhs = raw "${gs}.diffthis"; } { mode = "n"; lhs = localLeader "gD"; rhs = lambda0 (call "${gs}.diffthis" "~"); } { mode = "n"; lhs = localLeader "gtb"; rhs = raw "${gs}.toggle_current_line_blame"; } { mode = "n"; lhs = localLeader "gtd"; rhs = raw "${gs}.toggle_deleted"; } ]; plugins.navigation.hop-nvim.keymap.set = { after, before }: [ { lhs = leader "hc"; rhs = cmd "HopChar1"; } { lhs = leader "hf"; rhs = lambda0 (call "${hop}.hint_char1" { direction = after; current_line_only = true; }); } { lhs = leader "hF"; rhs = lambda0 (call "${hop}.hint_char1" { direction = before; current_line_only = true; }); } { lhs = leader "hbc"; rhs = lambda0 (call "${hop}.hint_char1" { direction = after; }); } { lhs = leader "htc"; rhs = lambda0 (call "${hop}.hint_char1" { direction = before; }); } { lhs = leader "hw"; rhs = cmd "HopWord"; } { lhs = leader "hbw"; rhs = lambda0 (call "${hop}.hint_words" { direction = after; }); } { lhs = leader "htw"; rhs = lambda0 (call "${hop}.hint_words" { direction = before; }); } { lhs = leader "hp"; rhs = cmd "HopPattern"; } { lhs = leader "hbp"; rhs = lambda0 (call "${hop}.hint_patterns" { direction = after; }); } { lhs = leader "htp"; rhs = lambda0 (call "${hop}.hint_patterns" { direction = before; }); } { lhs = leader "hbv"; rhs = lambda0 (call "${hop}.hint_vertical" { direction = after; }); } { lhs = leader "htv"; rhs = lambda0 (call "${hop}.hint_vertical" { direction = before; }); } ]; plugins.language-server.lspconfig.keymap.set = [ { mode = "n"; lhs = "gD"; rhs = raw "vim.lsp.buf.declaration"; } { mode = "n"; lhs = "gd"; rhs = raw "vim.lsp.buf.definition"; } { mode = "n"; lhs = "K"; rhs = raw "vim.lsp.buf.hover"; } { mode = "n"; lhs = "gi"; rhs = raw "vim.lsp.buf.implementation"; } { mode = "n"; lhs = "gr"; rhs = raw "vim.lsp.buf.references"; } { mode = "n"; lhs = "gy"; rhs = raw "vim.lsp.buf.type_definition"; } { mode = "n"; lhs = localLeader "sh"; rhs = raw "vim.lsp.buf.signature_help"; } { mode = "n"; lhs = localLeader "n"; rhs = raw "vim.lsp.buf.rename"; } { mode = [ "n" "v" ]; lhs = localLeader "a"; rhs = raw "vim.lsp.buf.code_action"; } ]; vim.keymap.set = lib.optionals config.plugins.language-server.lspconfig.enable [ { mode = "n"; lhs = "${Space}e"; rhs = raw "vim.diagnostic.open_float"; } { mode = "n"; lhs = "[d"; rhs = raw "vim.diagnostic.goto_prev"; } { mode = "n"; lhs = "]d"; rhs = raw "vim.diagnostic.goto_next"; } { mode = "n"; lhs = "${Space}q"; rhs = raw "vim.diagnostic.setloclist"; } ] ++ lib.optionals config.plugins.navigation.telescope.enable ( [ { mode = "n"; lhs = leader "ff"; rhs = cmd "Telescope find_files"; } { mode = "n"; lhs = leader "fb"; rhs = cmd "Telescope buffers"; } { mode = "n"; lhs = leader "fh"; rhs = cmd "Telescope help_tags"; } ] ++ lib.optionals (config.plugins.navigation.telescope.extensions ? telescope-live-grep-args-nvim) [ { mode = "n"; lhs = leader "fg"; rhs = lambda0 (call0 "telescope.extensions.live_grep_args.live_grep_args"); } ] ); }