local wk = require('which-key') local npairs = require('nvim-autopairs') local telescope = require('telescope') local telescope_builtin = require('telescope.builtin') local telescope_themes = require('telescope.themes') -- Global key function _G.nifoc_keymap_cr_complete = function() return npairs.autopairs_cr() end local M = {} function M.setup() vim.api.nvim_set_keymap('n', '', '', {noremap = true}) vim.g.mapleader = ' ' vim.opt.timeoutlen = 500 -- mappings local leader = { n = { "NvimTreeToggle", "Toggle nvim-tree" }, o = { function() require('nifoc.utils.telescope').project_files() end, "Find Files" }, s = { function() telescope_builtin.live_grep(telescope_themes.get_ivy()) end, "Live Grep" }, ["ut"] = { "UndotreeToggle", "Undotree" }, f = { name = "file", n = { "enew", "New File" }, }, b = { name = "buffer", l = { function() telescope_builtin.buffers(telescope_themes.get_dropdown()) end, "List Buffers" }, n = { "BufferLineCycleNext", "Next Buffer" }, p = { "BufferLineCyclePrev", "Previous Buffer" }, f = { function() telescope_builtin.current_buffer_fuzzy_find(telescope_themes.get_dropdown()) end, "Find In Buffer" }, t = { function() telescope_builtin.treesitter(telescope_themes.get_dropdown()) end, "Find Via Treesitter" }, }, p = { name = "project", t = { "TodoTelescope", "TODO Comments" }, }, v = { name = "vcs", s = { function() telescope_builtin.git_status(telescope_themes.get_ivy()) end, "Status" }, b = { function() telescope_builtin.git_branches(telescope_themes.get_ivy()) end, "List Branches" }, l = { function() require('gitsigns').blame_line() end, "Blame Line" }, }, d = { name = "debug", l = { name = "lsp", i = { "LspInfo", "Info" }, r = { "LspRestart", "Restart" } }, t = { "TSPlaygroundToggle", "TS Playground" }, n = { function() telescope.extensions.notify.notify() end, "Notifications" }, } } -- Register which-key mappings wk.register(leader, {prefix = "", noremap = false, silent = true}) -- Other mappings vim.api.nvim_set_keymap('n', '', ':noh', {noremap = true, silent = true}) vim.api.nvim_set_keymap('i', '', 'v:lua.nifoc_keymap_cr_complete()', {noremap = true, expr = true, silent = true}) vim.api.nvim_set_keymap('n', '', 'b', {noremap = true}) vim.api.nvim_set_keymap('n', '', 'w', {noremap = true}) vim.api.nvim_set_keymap('n', '', '^', {noremap = true}) vim.api.nvim_set_keymap('n', '', '$', {noremap = true}) vim.api.nvim_set_keymap('i', '', 'b', {noremap = true}) vim.api.nvim_set_keymap('i', '', 'w', {noremap = true}) vim.api.nvim_set_keymap('i', '', '^', {noremap = true}) vim.api.nvim_set_keymap('i', '', '$', {noremap = true}) -- vim-yoink vim.api.nvim_set_keymap('n', 'p', '(YoinkPaste_p)', {noremap = false}) vim.api.nvim_set_keymap('n', 'P', '(YoinkPaste_P)', {noremap = false}) vim.api.nvim_set_keymap('x', 'p', '(SubversiveSubstitute)', {noremap = false}) vim.api.nvim_set_keymap('x', 'P', '(SubversiveSubstitute)', {noremap = false}) vim.api.nvim_set_keymap('n', 'gp', '(YoinkPaste_gp)', {noremap = false}) vim.api.nvim_set_keymap('n', 'gP', '(YoinkPaste_gP)', {noremap = false}) vim.api.nvim_set_keymap('n', 'y', '(YoinkYankPreserveCursorPosition)', {noremap = false}) vim.api.nvim_set_keymap('x', 'y', '(YoinkYankPreserveCursorPosition)', {noremap = false}) vim.api.nvim_set_keymap('n', '', 'lua require("FTerm").toggle()', {noremap = true, silent = true}) vim.api.nvim_set_keymap('t', '', 'lua require("FTerm").toggle()', {noremap = true, silent = true}) end function M.lsp_attach(client, bufnr) -- mappings local leader = { t = { "Telescope lsp_document_symbols theme=get_dropdown", "LSP Document Tags" }, l = { name = "lsp", d = { name = "diagnostics", d = { "TroubleToggle document_diagnostics", "Document Diagnostics" }, w = { "TroubleToggle workspace_diagnostics", "Workspace Diagnostics" }, }, c = { name = "code action", a = { "Telescope lsp_code_actions theme=get_dropdown", "Code Action" }, }, f = { name = "find", r = { "TroubleToggle lsp_references", "References" }, d = { "TroubleToggle lsp_definitions", "Definitions" }, }, }, } -- Top-level mappings local top = { K = { "lua vim.lsp.buf.hover()", "Show Documentation" }, } -- Register which-key mappings wk.register(leader, {prefix = "", noremap = true, silent = true, buffer = bufnr}) wk.register(top, {noremap = true, silent = true, buffer = bufnr}) end return M