From 887eb639e849966e64d57a4eda521b6c21e11f7a Mon Sep 17 00:00:00 2001 From: fschildt Date: Tue, 30 Sep 2025 15:16:00 +0200 Subject: add neovim config --- .config/nvim/lua/plugins/cmp.lua | 93 +++++++++++++++++++++++++++ .config/nvim/lua/plugins/gruvbox_material.lua | 15 +++++ .config/nvim/lua/plugins/lspconfig.lua | 5 ++ .config/nvim/lua/plugins/lualine.lua | 9 +++ .config/nvim/lua/plugins/treesitter.lua | 13 ++++ .config/nvim/lua/plugins/vimtex.lua | 10 +++ 6 files changed, 145 insertions(+) create mode 100644 .config/nvim/lua/plugins/cmp.lua create mode 100644 .config/nvim/lua/plugins/gruvbox_material.lua create mode 100644 .config/nvim/lua/plugins/lspconfig.lua create mode 100644 .config/nvim/lua/plugins/lualine.lua create mode 100644 .config/nvim/lua/plugins/treesitter.lua create mode 100644 .config/nvim/lua/plugins/vimtex.lua (limited to '.config/nvim/lua/plugins') diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..7126173 --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,93 @@ +return { + { + "hrsh7th/nvim-cmp", + event = { "InsertEnter", "CmdlineEnter" }, -- Load on insert or cmdline mode + dependencies = { + "hrsh7th/cmp-nvim-lsp", -- LSP completion source + "hrsh7th/cmp-buffer", -- Buffer completion source + "hrsh7th/cmp-path", -- Path completion source + "hrsh7th/cmp-cmdline", -- Cmdline completion source + "L3MON4D3/LuaSnip", -- Snippet engine + "saadparwaiz1/cmp_luasnip", -- LuaSnip completion source + "rafamadriz/friendly-snippets", -- Predefined snippets + "onsails/lspkind.nvim", -- Icons for completion items + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspkind = require("lspkind") + + -- Load friendly-snippets + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), -- Scroll up docs + [""] = cmp.mapping.scroll_docs(4), -- Scroll down docs + [""] = cmp.mapping.complete(), -- Trigger completion + [""] = cmp.mapping.confirm({ select = true }), -- Accept selection + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, -- LSP completions + { name = "luasnip" }, -- Snippet completions + { name = "buffer" }, -- Buffer completions + { name = "path" }, -- Path completions + }), + formatting = { + format = lspkind.cmp_format({ + mode = "symbol_text", -- Show symbol and text + maxwidth = 50, -- Limit width + ellipsis_char = "...", -- Truncation character + }), + }, + window = { + completion = cmp.config.window.bordered(), -- Bordered completion menu + documentation = cmp.config.window.bordered(), -- Bordered documentation window + }, + experimental = { + ghost_text = true, -- Show ghost text for inline completion + }, + } + + -- Command-line completion for `/` and `?` + cmp.setup.cmdline({ "/", "?" }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = "buffer" }, + }, + }) + + -- Command-line completion for `:` + cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = "path" }, + { name = "cmdline" }, + }), + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/gruvbox_material.lua b/.config/nvim/lua/plugins/gruvbox_material.lua new file mode 100644 index 0000000..7858be6 --- /dev/null +++ b/.config/nvim/lua/plugins/gruvbox_material.lua @@ -0,0 +1,15 @@ +return { + { + 'sainnhe/gruvbox-material', + lazy = false, + priority = 1000, + config = function() + vim.g.gruvbox_material_background = "hard" -- hard/medium/soft + vim.g.gruvbox_material_foreground = "material" -- material/mix/original + vim.g.gruvbox_material_enable_italic = true + vim.g.gruvbox_material_disable_italic_comment = 0 + vim.g.gruvbox_material_better_performance = 1 + vim.cmd.colorscheme('gruvbox-material') + end + } +} diff --git a/.config/nvim/lua/plugins/lspconfig.lua b/.config/nvim/lua/plugins/lspconfig.lua new file mode 100644 index 0000000..4742835 --- /dev/null +++ b/.config/nvim/lua/plugins/lspconfig.lua @@ -0,0 +1,5 @@ +return { + { + "neovim/nvim-lspconfig" + } +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..26e0f4b --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,9 @@ +return { + { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons' }, + config = function() + require('lualine').setup() + end + } +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..a6ffac9 --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,13 @@ +return { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + local configs = require("nvim-treesitter.configs") + configs.setup({ + ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "elixir", "heex", "javascript", "html" }, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true }, + }) + end +} diff --git a/.config/nvim/lua/plugins/vimtex.lua b/.config/nvim/lua/plugins/vimtex.lua new file mode 100644 index 0000000..f14d0ea --- /dev/null +++ b/.config/nvim/lua/plugins/vimtex.lua @@ -0,0 +1,10 @@ +return { + { + "lervag/vimtex", + ft = { "tex", "bib" }, + dependencies = { "nvim-treesitter/nvim-treesitter" }, + config = function() + vim.g.vimtex_view_method = "mupdf" + end + } +} -- cgit v1.2.3