(let [mod {} keymap vim.keymap legendary (require :legendary) substitute (require :substitute) telescope (require :telescope) telescope-builtin (require :telescope.builtin) telescope-themes (require :telescope.themes) telescope-nifoc (require :nifoc.telescope) telescope-ivy (telescope-themes.get_ivy) telescope-dropdown (telescope-themes.get_dropdown) npairs (require :nvim-autopairs) gitsigns (require :gitsigns)] (fn map-entry [key cmd opts] (vim.tbl_extend :keep {1 key 2 cmd} opts)) (fn mod.setup [] (keymap.set :n : : {:noremap true}) (set vim.g.mapleader " ") (set vim.opt.timeoutlen 500) (legendary.bind_keymaps [(map-entry :o telescope-nifoc.project-files {:description "Find Files"}) (map-entry :s #(telescope-builtin.live_grep telescope-ivy) {:description "Live Grep"}) (map-entry :fn :enew {:description "New File"}) (map-entry :ut :UndotreeToggle {:description "Toggle Undotree"}) ;; Buffer (map-entry :bl #(telescope-builtin.buffers telescope-dropdown) {:description "List Buffers"}) (map-entry :bn :BufferLineCycleNext {:description "Next Buffer"}) (map-entry :bp :BufferLineCyclePrev {:description "Previous Buffer"}) (map-entry :bf #(telescope-builtin.current_buffer_fuzzy_find telescope-dropdown) {:description "Find In Buffer"}) (map-entry :bt #(telescope-builtin.treesitter telescope-dropdown) {:description "Find Via Treesitter"}) ;; Project (map-entry :pt :TodoTelescope {:description "TODO Comments"}) ;; VCS (map-entry :vs #(telescope-builtin.git_status telescope-ivy) {:description "VCS Status"}) (map-entry :vb #(telescope-builtin.git_branches telescope-dropdown) {:description "List VCS Branches"}) (map-entry :vl gitsigns.blame_line {:description "Blame Line"}) (map-entry :vn :Neogit {:description "Open Neogit"}) (map-entry :vc "Neogit commit" {:description "Neogit Commit"}) (map-entry :vp "Neogit pull" {:description "Neogit Pull"}) (map-entry :vP "Neogit push" {:description "Neogit Push"}) ;; Legendary (map-entry :lk #(legendary.find :keymaps) {:description "Legendary Keymaps"}) (map-entry :lc #(legendary.find :commands) {:description "Legendary Commands"}) (map-entry :la #(legendary.find :autocmds) {:description "Legendary Autocmds"}) ;; Debug (map-entry :dli :LspInfo {:description "LSP Info"}) (map-entry :dln :NullLsInfo {:description "null-ls Info"}) (map-entry :dlr :LspRestart {:description "LSP Restart"}) (map-entry :dt :TSPlaygroundToggle {:description "Toggle Treetsitter Playground"}) (map-entry :dn telescope.extensions.notify.notify {:description "Display Notifications"})]) ;; Other Mappings (keymap.set :n : ":nohlsearch" {:noremap true :silent true}) (keymap.set :i : npairs.autopairs_cr {:noremap true :expr true :silent true}) (keymap.set :n : :b {:noremap true}) (keymap.set :n : :w {:noremap true}) (keymap.set :n : "^" {:noremap true}) (keymap.set :n : "$" {:noremap true}) (keymap.set :i : :b {:noremap true}) (keymap.set :i : :w {:noremap true}) (keymap.set :i : :^ {:noremap true}) (keymap.set :i : :$ {:noremap true}) (keymap.set :n :p "(YankyPutAfter)") (keymap.set :n :P "(YankyPutBefore)") (keymap.set :x :p substitute.visual) (keymap.set :x :P "(YankyPutBefore)") (keymap.set :n :gp "(YankyGPutAfter)") (keymap.set :n :gP "(YankyGPutBefore)") (keymap.set :x :gp "(YankyGPutAfter)") (keymap.set :x :gP "(YankyGPutBefore)") (keymap.set :n :y "(YankyYank)") (keymap.set :x :y "(YankyYank)")) (fn mod.lsp-attach [client bufnr] (legendary.bind_keymaps [(map-entry :t #(telescope-builtin.lsp_document_symbols telescope-dropdown) {:description "LSP Document Symbols" :opts {:buffer bufnr}}) (map-entry :ld #(telescope-builtin.diagnostics (vim.tbl_extend :keep telescope-ivy {:bufnr 0})) {:description "LSP Document Diagnostics" :opts {:buffer bufnr}}) (map-entry :lca #(telescope-builtin.lsp_code_actions telescope-dropdown) {:description "LSP Code Action" :opts {:buffer bufnr}}) (map-entry :lfr #(telescope-builtin.lsp_references telescope-dropdown) {:description "Find References" :opts {:buffer bufnr}}) (map-entry :lfd #(telescope-builtin.lsp_definitions telescope-dropdown) {:description "Find Definitions" :opts {:buffer bufnr}}) (map-entry :lfi #(telescope-builtin.lsp_implementations telescope-dropdown) {:description "Find Implementations" :opts {:buffer bufnr}}) (map-entry :K vim.lsp.buf.hover {:description "Show Documentation" :opts {:buffer bufnr}}) (map-entry :F :Format {:description "Format Buffer" :opts {:buffer bufnr}})])) mod)