diff options
| author | talha <talha@talhaamir.xyz> | 2025-12-06 15:08:59 +0500 |
|---|---|---|
| committer | talha <talha@talhaamir.xyz> | 2025-12-06 15:08:59 +0500 |
| commit | 75b48fc3247b412bb1580c47e96022cffdc8ba9a (patch) | |
| tree | 20f615aae971834ebc1490b41cecdc3d0e9c4a7d /lua/talha/plugins | |
| parent | 26161cefcda38711c7c8e166ccca7478bcaf18f4 (diff) | |
Diffstat (limited to 'lua/talha/plugins')
| -rw-r--r-- | lua/talha/plugins/harpoon.lua | 17 | ||||
| -rw-r--r-- | lua/talha/plugins/lsp.lua | 122 | ||||
| -rw-r--r-- | lua/talha/plugins/telescope.lua | 13 | ||||
| -rw-r--r-- | lua/talha/plugins/treesitter.lua | 21 | ||||
| -rw-r--r-- | lua/talha/plugins/vimFugitive.lua | 12 |
5 files changed, 185 insertions, 0 deletions
diff --git a/lua/talha/plugins/harpoon.lua b/lua/talha/plugins/harpoon.lua new file mode 100644 index 0000000..96bbbcd --- /dev/null +++ b/lua/talha/plugins/harpoon.lua @@ -0,0 +1,17 @@ +return { + { + "theprimeagen/harpoon", + config = function() + local mark = require("harpoon.mark") + local ui = require("harpoon.ui") + + vim.keymap.set("n", "<leader>a", mark.add_file) + vim.keymap.set("n", "<C-e>", ui.toggle_quick_menu) + + vim.keymap.set("n", "<C-f>1", function() ui.nav_file(1) end) + vim.keymap.set("n", "<C-f>2", function() ui.nav_file(2) end) + vim.keymap.set("n", "<C-f>3", function() ui.nav_file(3) end) + vim.keymap.set("n", "<C-f>4", function() ui.nav_file(4) end) + end + } +} diff --git a/lua/talha/plugins/lsp.lua b/lua/talha/plugins/lsp.lua new file mode 100644 index 0000000..2ceebde --- /dev/null +++ b/lua/talha/plugins/lsp.lua @@ -0,0 +1,122 @@ +return { + { + "VonHeikemen/lsp-zero.nvim", + branch = 'v2.x', + dependencies = { + -- LSP Support + {'neovim/nvim-lspconfig'}, -- Required + {'williamboman/mason.nvim'}, -- Optional + {'williamboman/mason-lspconfig.nvim'}, -- Optional + + -- Autocompletion + {'hrsh7th/nvim-cmp'}, -- Required + {'hrsh7th/cmp-nvim-lsp'}, -- Required + {'hrsh7th/cmp-buffer'}, -- Required + {'hrsh7th/cmp-nvim-lua'}, + {'L3MON4D3/LuaSnip'}, -- Required + }, + config = function() + +local lsp = require('lsp-zero').preset({}) +-- @notes on Lsp and Cmp configs here: +--[[ + +# LSP +1. Renamed the keymaps to what I use +2. Added a custom handler for formatting files. + It checks the explicitly defined language servers passed and if they allow formatting, only then will it attempt + to format the buffer + +# Complete +Completion is done by nvim-cmp. The setup for that does a few things. +1. Defines the sources to use for autocompletion: + a. LSP server + b. nvim-lua: only active in lua file I think + c. buffer: uses the current file for auto-completion (similar to default nvim behavior) +2. By default it pops up a list for auto-completion, we have that disabled. +3. When having auto-complete disabled, it takes extra steps to trigger autocomplete, due + to this we need to have it preselect the first item upon triggering autocomplete. +4. We define some custom mappings +--]] + + local function allow_format(servers) + return function(client) return vim.tbl_contains(servers, client.name) end + end + + + lsp.on_attach(function(client, bufnr) + -- see :help lsp-zero-keybindings + -- to learn the available actions + local opts = {buffer = bufnr, remap = false} + vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) + vim.keymap.set("n", "gD", function() vim.lsp.buf.declaration() end, opts) + vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) + vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts) + vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts) + vim.keymap.set("n", "[d", function() vim.diagnostic.goto_prev() end, opts) + vim.keymap.set("n", "]d", function() vim.diagnostic.goto_next() end, opts) + vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts) + vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts) + vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts) + vim.keymap.set("i", "<C-s>", function() vim.lsp.buf.signature_help() end, opts) + vim.keymap.set("n", "<leader>vlf", function() + vim.lsp.buf.format({ + async = false, + timeout_ms = 10000, + filter = allow_format({'rust_analyzer', 'tsserver', 'gopls', 'clangd', 'html-lsp'}), + }) + end, opts) + end) + + require('lspconfig').lua_ls.setup({ + settings = { + Lua = { + diagnostics = { + globals = { 'vim' } + } + } + } + }) + + lsp.setup() + + -- @todo: Look at luasnip and why I would require it + + + local cmp = require('cmp') + local cmp_action = require('lsp-zero').cmp_action() + + + cmp.setup({ + sources = { + { name = 'nvim_lsp' }, + { name = 'nvim_lua' }, + { name = 'buffer' }, + }, + preselect = 'item', + completion = { + autocomplete = false, + completeopt = 'menu,menuone,noinsert' + }, + mapping = cmp.mapping.preset.insert({ + -- Ctrl+Space to trigger completion menu + ['<C-Space>'] = cmp.mapping.complete(), + + -- Navigate between snippet placeholder + -- @note: don't know what this is + ['<C-f>'] = cmp_action.luasnip_jump_forward(), + ['<C-b>'] = cmp_action.luasnip_jump_backward(), + + -- Scroll up and down in the completion documentation + ['<C-u>'] = cmp.mapping.scroll_docs(-4), + ['<C-d>'] = cmp.mapping.scroll_docs(4), + }), + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) + end, + }, + }) + end + }, +} diff --git a/lua/talha/plugins/telescope.lua b/lua/talha/plugins/telescope.lua new file mode 100644 index 0000000..c380c79 --- /dev/null +++ b/lua/talha/plugins/telescope.lua @@ -0,0 +1,13 @@ +return { + { + "nvim-telescope/telescope.nvim", version = "0.1.2", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + local builtin = require('telescope.builtin') + vim.keymap.set('n', '<leader>pf', builtin.find_files) + vim.keymap.set('n', '<C-p>', builtin.git_files) + vim.keymap.set('n', '<leader>ps', builtin.live_grep) + vim.keymap.set('n', '<leader>gw', builtin.grep_string) + end + } +} diff --git a/lua/talha/plugins/treesitter.lua b/lua/talha/plugins/treesitter.lua new file mode 100644 index 0000000..3f1efc7 --- /dev/null +++ b/lua/talha/plugins/treesitter.lua @@ -0,0 +1,21 @@ +return { + { + "nvim-treesitter/nvim-treesitter",build = ":TSUpdate", + config = function () + local configs = require("nvim-treesitter.configs") + + configs.setup({ + ensure_installed = { + "c", "cpp", "python", + "vim", "vimdoc", "query", + }, + sync_install = false, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + indent = { enable = false }, + }) + end + } +} diff --git a/lua/talha/plugins/vimFugitive.lua b/lua/talha/plugins/vimFugitive.lua new file mode 100644 index 0000000..32563ab --- /dev/null +++ b/lua/talha/plugins/vimFugitive.lua @@ -0,0 +1,12 @@ +return { + { + "tpope/vim-fugitive", + config = function() + vim.keymap.set("n", "<leader>gs", vim.cmd.Git) + vim.keymap.set("n", "<leader>gb", ":Git blame<CR>") + -- see docs for more details + vim.keymap.set("n", "<leader>gk", ":diffget //3<CR>") -- get diff from upstream (merge) + vim.keymap.set("n", "<leader>gj", ":diffget //2<CR>") -- get diff from downstream (target) + end, + } +} |
