From ec01a19180f30f3b48e923b6c0704c299c13778c Mon Sep 17 00:00:00 2001 From: pks Date: Wed, 10 Dec 2025 20:59:09 +0100 Subject: add neovim config --- neovim/.config/nvim/init.lua | 220 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 neovim/.config/nvim/init.lua diff --git a/neovim/.config/nvim/init.lua b/neovim/.config/nvim/init.lua new file mode 100644 index 0000000..1a7ffa3 --- /dev/null +++ b/neovim/.config/nvim/init.lua @@ -0,0 +1,220 @@ +-------------------------------------------------------------------------------- +-- Neovim Configuration +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Options +-------------------------------------------------------------------------------- + +-- UI +vim.opt.cursorline = true +vim.opt.number = true +vim.opt.scrolloff = 8 +vim.opt.signcolumn = "yes" +vim.opt.termguicolors = true + +-- Tabs & Indentation +vim.opt.expandtab = true +vim.opt.shiftwidth = 4 +vim.opt.tabstop = 4 + +-- Search +vim.opt.ignorecase = true +vim.opt.smartcase = true + +-- Splits +vim.opt.splitbelow = true +vim.opt.splitright = true + +-- Folding (treesitter-based) +vim.opt.foldmethod = "expr" +vim.opt.foldexpr = "nvim_treesitter#foldexpr()" +vim.opt.foldenable = false + +-- Misc +vim.opt.clipboard = "unnamedplus" +vim.opt.undofile = true +vim.opt.updatetime = 250 + +-------------------------------------------------------------------------------- +-- Bootstrap lazy.nvim +-------------------------------------------------------------------------------- +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.uv.fs_stat(lazypath) then + vim.fn.system({ + "git", "clone", "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-------------------------------------------------------------------------------- +-- Plugins +-------------------------------------------------------------------------------- +require("lazy").setup({ + + -- Colorscheme --------------------------------------------------------------- + { + "Shadorain/shadotheme", + lazy = false, + priority = 1000, + config = function() vim.cmd.colorscheme("shado") end, + }, + + -- Treesitter ---------------------------------------------------------------- + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + dependencies = { "nvim-treesitter/nvim-treesitter-textobjects" }, + config = function() + require("nvim-treesitter.configs").setup({ + ensure_installed = { "bash", "lua", "python", "ruby" }, + auto_install = true, + highlight = { enable = true }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + node_decremental = "", + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + ["af"] = "@function.outer", ["if"] = "@function.inner", + ["ac"] = "@class.outer", ["ic"] = "@class.inner", + ["aa"] = "@parameter.outer", ["ia"] = "@parameter.inner", + }, + }, + move = { + enable = true, + set_jumps = true, + goto_next_start = { ["]m"] = "@function.outer", ["]]"] = "@class.outer" }, + goto_prev_start = { ["[m"] = "@function.outer", ["[["] = "@class.outer" }, + }, + }, + }) + end, + }, + + -- Completion ---------------------------------------------------------------- + { + "saghen/blink.cmp", + version = "1.*", + opts = { + keymap = { + preset = "default", + [""] = { "accept", "fallback" }, + [""] = { "select_next", "fallback" }, + [""] = { "select_prev", "fallback" }, + }, + sources = { + default = { "lsp", "path", "buffer" }, + providers = { lsp = { timeout_ms = 2000 } }, + }, + completion = { + trigger = { show_in_snippet = false }, + menu = { auto_show = true }, + documentation = { auto_show = true, auto_show_delay_ms = 200 }, + }, + }, + }, + + -- Auto-pairs & Tags --------------------------------------------------------- + { "windwp/nvim-autopairs", event = "InsertEnter", opts = {} }, + { "windwp/nvim-ts-autotag", opts = {} }, + { "tpope/vim-endwise" }, + + -- UI ------------------------------------------------------------------------ + { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, opts = {} }, + { "lewis6991/gitsigns.nvim", opts = {} }, + { "folke/which-key.nvim", event = "VeryLazy", opts = {} }, + + -- Navigation ---------------------------------------------------------------- + { + "nvim-tree/nvim-tree.lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + opts = {}, + keys = { { "e", "NvimTreeToggle", desc = "File tree" } }, + }, + { + "hedyhli/outline.nvim", + opts = {}, + keys = { { "o", "Outline", desc = "Code outline" } }, + }, + { "junegunn/fzf", build = "./install --bin" }, + { + "junegunn/fzf.vim", + keys = { + { "ff", "Files", desc = "Find files" }, + { "fg", "Rg", desc = "Live grep" }, + { "fb", "Buffers", desc = "Buffers" }, + }, + }, + + -- Editing ------------------------------------------------------------------- + { + "numToStr/Comment.nvim", + opts = {}, + keys = { + { "gcc", mode = "n", desc = "Comment line" }, + { "gc", mode = "v", desc = "Comment selection" }, + }, + }, + + -- Notes --------------------------------------------------------------------- + { "vimwiki/vimwiki" }, + +}) + +-------------------------------------------------------------------------------- +-- LSP Configuration +-------------------------------------------------------------------------------- +vim.lsp.config.pyright = { + cmd = { "pyright-langserver", "--stdio" }, + filetypes = { "python" }, + root_markers = { "pyproject.toml", "setup.py", "setup.cfg", "requirements.txt", ".git" }, + single_file_support = true, + settings = { + python = { + analysis = { + typeCheckingMode = "basic", + autoSearchPaths = false, + diagnosticMode = "openFilesOnly", + useLibraryCodeForTypes = false, + }, + }, + }, +} + +vim.lsp.config.solargraph = { + cmd = { "solargraph", "stdio" }, + filetypes = { "ruby" }, + root_markers = { "Gemfile", ".git" }, + single_file_support = true, +} + +vim.lsp.enable("pyright") +vim.lsp.enable("solargraph") + +-------------------------------------------------------------------------------- +-- Keymaps +-------------------------------------------------------------------------------- +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + local map = function(key, fn, desc) + vim.keymap.set("n", key, fn, { buffer = args.buf, desc = desc }) + end + map("gd", vim.lsp.buf.definition, "Go to definition") + map("gr", vim.lsp.buf.references, "References") + map("K", vim.lsp.buf.hover, "Hover docs") + map("rn", vim.lsp.buf.rename, "Rename symbol") + map("ca", vim.lsp.buf.code_action, "Code action") + map("ds", vim.lsp.buf.document_symbol, "Document symbols") + end, +}) -- cgit v1.2.3