From e5c8f244466ff4da4b12c1bbfd2292a8408ff1d2 Mon Sep 17 00:00:00 2001 From: Sam Nystrom Date: Wed, 5 Jul 2023 21:26:02 -0400 Subject: Add Neovim config --- .config/nvim/.stylua.toml | 3 + .config/nvim/README.md | 7 ++ .config/nvim/init.lua | 18 ++++ .config/nvim/lazy-lock.json | 59 +++++++++++ .config/nvim/lua/options.lua | 12 +++ .config/nvim/lua/plugins/autopairs.lua | 6 ++ .config/nvim/lua/plugins/bufferline.lua | 23 +++++ .config/nvim/lua/plugins/catppuccin.lua | 19 ++++ .config/nvim/lua/plugins/cmp.lua | 132 ++++++++++++++++++++++++ .config/nvim/lua/plugins/colorizer.lua | 20 ++++ .config/nvim/lua/plugins/dap.lua | 51 +++++++++ .config/nvim/lua/plugins/dashboard.lua | 26 +++++ .config/nvim/lua/plugins/editor.lua | 57 ++++++++++ .config/nvim/lua/plugins/git.lua | 92 +++++++++++++++++ .config/nvim/lua/plugins/indent-blankline.lua | 20 ++++ .config/nvim/lua/plugins/leap.lua | 18 ++++ .config/nvim/lua/plugins/lsp.lua | 78 ++++++++++++++ .config/nvim/lua/plugins/lualine.lua | 11 ++ .config/nvim/lua/plugins/neotest.lua | 33 ++++++ .config/nvim/lua/plugins/notify.lua | 19 ++++ .config/nvim/lua/plugins/rainbow-delimiters.lua | 26 +++++ .config/nvim/lua/plugins/spectre.lua | 13 +++ .config/nvim/lua/plugins/telescope.lua | 31 ++++++ .config/nvim/lua/plugins/terminal.lua | 12 +++ .config/nvim/lua/plugins/treesitter.lua | 33 ++++++ .config/nvim/lua/plugins/trouble.lua | 15 +++ .config/nvim/lua/plugins/which-key.lua | 16 +++ .config/nvim/lua/plugins/yanky.lua | 26 +++++ 28 files changed, 876 insertions(+) create mode 100644 .config/nvim/.stylua.toml create mode 100644 .config/nvim/README.md create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lazy-lock.json create mode 100644 .config/nvim/lua/options.lua create mode 100644 .config/nvim/lua/plugins/autopairs.lua create mode 100644 .config/nvim/lua/plugins/bufferline.lua create mode 100644 .config/nvim/lua/plugins/catppuccin.lua create mode 100644 .config/nvim/lua/plugins/cmp.lua create mode 100644 .config/nvim/lua/plugins/colorizer.lua create mode 100644 .config/nvim/lua/plugins/dap.lua create mode 100644 .config/nvim/lua/plugins/dashboard.lua create mode 100644 .config/nvim/lua/plugins/editor.lua create mode 100644 .config/nvim/lua/plugins/git.lua create mode 100644 .config/nvim/lua/plugins/indent-blankline.lua create mode 100644 .config/nvim/lua/plugins/leap.lua create mode 100644 .config/nvim/lua/plugins/lsp.lua create mode 100644 .config/nvim/lua/plugins/lualine.lua create mode 100644 .config/nvim/lua/plugins/neotest.lua create mode 100644 .config/nvim/lua/plugins/notify.lua create mode 100644 .config/nvim/lua/plugins/rainbow-delimiters.lua create mode 100644 .config/nvim/lua/plugins/spectre.lua create mode 100644 .config/nvim/lua/plugins/telescope.lua create mode 100644 .config/nvim/lua/plugins/terminal.lua create mode 100644 .config/nvim/lua/plugins/treesitter.lua create mode 100644 .config/nvim/lua/plugins/trouble.lua create mode 100644 .config/nvim/lua/plugins/which-key.lua create mode 100644 .config/nvim/lua/plugins/yanky.lua diff --git a/.config/nvim/.stylua.toml b/.config/nvim/.stylua.toml new file mode 100644 index 0000000..6cb677e --- /dev/null +++ b/.config/nvim/.stylua.toml @@ -0,0 +1,3 @@ +line_endings = "Unix" +quote_style = "ForceSingle" +call_parentheses = "Always" diff --git a/.config/nvim/README.md b/.config/nvim/README.md new file mode 100644 index 0000000..63f50b4 --- /dev/null +++ b/.config/nvim/README.md @@ -0,0 +1,7 @@ +# Neovim Config + +## Credits + +- [Winston](https://github.com/nekowinston) for his excellent [config](https://github.com/nekowinston/dotfiles/tree/main/home/apps/neovim) +- [Lazyvim](https://lazyvim.org) + diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..f6f4491 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,18 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.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) + +require("options") + +require("lazy").setup("plugins", { + install = { colorscheme = { "catppuccin" } }, +}) diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..7c35e27 --- /dev/null +++ b/.config/nvim/lazy-lock.json @@ -0,0 +1,59 @@ +{ + "FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" }, + "LuaSnip": { "branch": "master", "commit": "db0aba4a39b28ff5564def07c25bb4bd06a78fdc" }, + "bufferline.nvim": { "branch": "main", "commit": "2f391fde91b9c3876eee359ee24cc352050e5e48" }, + "catppuccin": { "branch": "main", "commit": "c75562cbc954136f279ced91661251543b6f2a20" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" }, + "cmp-conjure": { "branch": "master", "commit": "d97816d5007be2b060f3a4e09f5b144d97d96fe8" }, + "cmp-dap": { "branch": "master", "commit": "d16f14a210cd28988b97ca8339d504533b7e09a4" }, + "cmp-git": { "branch": "main", "commit": "f900a4cf117300fdc3ba31d26f8b6223ccd9c574" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, + "comment.nvim": { "branch": "master", "commit": "176e85eeb63f1a5970d6b88f1725039d85ca0055" }, + "conjure": { "branch": "master", "commit": "31a1626273e2bab479b6b8416a137f9edaba7daa" }, + "dashboard-nvim": { "branch": "master", "commit": "ab84915f7cfd7bc7a5bfe7409c3eccf8d09c162a" }, + "diffview.nvim": { "branch": "main", "commit": "766a4f210e67e522659302dc6bd8a8d3b8c08c54" }, + "dressing.nvim": { "branch": "master", "commit": "e6eff7a5a950a853c3903d906dbcea03f778db5f" }, + "flit.nvim": { "branch": "main", "commit": "5c9a78b97f7f4301473ea5e37501b5b1d4da167b" }, + "friendly-snippets": { "branch": "main", "commit": "17245edcd1195ad88d60ae13fb1e90d1df9b2fc9" }, + "gitsigns.nvim": { "branch": "main", "commit": "dc2962f7fce953a2a98e7c6d3d7fc4c1d1f66758" }, + "hlsearch.nvim": { "branch": "main", "commit": "eea3f8010e739c7694ceafe800d60caba0f896c6" }, + "indent-blankline.nvim": { "branch": "master", "commit": "b7aa0aed55887edfaece23f7b46ab22232fc8741" }, + "lazy.nvim": { "branch": "main", "commit": "f8611632d0f9c6818e8eb54f9bcd1dad122b5a7f" }, + "leap.nvim": { "branch": "main", "commit": "8facf2eb6a378fd7691dce8c8a7b2726823e2408" }, + "lualine.nvim": { "branch": "master", "commit": "05d78e9fd0cdfb4545974a5aa14b1be95a86e9c9" }, + "markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" }, + "mini.ai": { "branch": "main", "commit": "5218ea75e635df78a807bc9d5a7162594fb76d02" }, + "neodev.nvim": { "branch": "main", "commit": "a2b1d8fb9fa4daa35d3fd9123bccccccbd4a3520" }, + "neogit": { "branch": "master", "commit": "06113a4eec1a60553b7112934883982fef603aae" }, + "neotest": { "branch": "master", "commit": "e46eae5739c470aa011ee43108ea8a730736174e" }, + "neotest-python": { "branch": "master", "commit": "054f22129405e747adfc2cbeddfcc59537df50ba" }, + "null-ls.nvim": { "branch": "main", "commit": "07897774c3b2f14d71b2ca51f3014d1055da9657" }, + "nvim-autopairs": { "branch": "master", "commit": "e8f7dd7a72de3e7b6626c050a802000e69d53ff0" }, + "nvim-cmp": { "branch": "main", "commit": "2743dd989e9b932e1b4813a4927d7b84272a14e2" }, + "nvim-colorizer.lua": { "branch": "master", "commit": "dde3084106a70b9a79d48f426f6d6fec6fd203f7" }, + "nvim-dap": { "branch": "master", "commit": "bb1ddce6cd951ef3c1319e4fd8596131113163c3" }, + "nvim-dap-go": { "branch": "main", "commit": "cdf604a5703838f65fdee7c198f6cb59b563ef6f" }, + "nvim-dap-python": { "branch": "master", "commit": "37b4cba02e337a95cb62ad1609b3d1dccb2e5d42" }, + "nvim-dap-ui": { "branch": "master", "commit": "c020f660b02772f9f3d11f599fefad3268628a9e" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "57f1dbd0458dd84a286b27768c142e1567f3ce3b" }, + "nvim-lspconfig": { "branch": "master", "commit": "2187f222c37cb5fd7cf96f242e5c8a4a340f2596" }, + "nvim-notify": { "branch": "master", "commit": "ea9c8ce7a37f2238f934e087c255758659948e0f" }, + "nvim-spectre": { "branch": "master", "commit": "dc3f0bd41e09148924ef04a4746cb708539d08db" }, + "nvim-surround": { "branch": "main", "commit": "10b20ca7d9da1ac8df8339e140ffef94f9ab3b18" }, + "nvim-treesitter": { "branch": "master", "commit": "0b81ed9f18333949a74586a1ea0497ae4cbb7cd4" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "52f1f3280d9092bfaee5c45be5962fabee3d9654" }, + "nvim-web-devicons": { "branch": "master", "commit": "9ab9b0b894b2388a9dbcdee5f00ce72e25d85bf9" }, + "plenary.nvim": { "branch": "master", "commit": "102c02903c74b93c705406bf362049383abc87c8" }, + "rainbow-delimiters.nvim": { "branch": "master", "commit": "792e247993b0f8768d23ef302103f6945b92290b" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "e03ff55962417b69c85ef41424079bb0580546ba" }, + "telescope.nvim": { "branch": "master", "commit": "0e0600908d1ad5ac4992fa0ab578e23e9d9d6f37" }, + "todo-comments.nvim": { "branch": "main", "commit": "09b0b17d824d2d56f02ff15967e8a2499a89c731" }, + "toggleterm.nvim": { "branch": "main", "commit": "2249e974faed67e795ffc2ca2be13b93c5d51938" }, + "trouble.nvim": { "branch": "main", "commit": "d99e2abd10808ef91738ce98a5c767e6a51df449" }, + "vim-illuminate": { "branch": "master", "commit": "a2907275a6899c570d16e95b9db5fd921c167502" }, + "which-key.nvim": { "branch": "main", "commit": "d871f2b664afd5aed3dc1d1573bef2fb24ce0484" }, + "yanky.nvim": { "branch": "main", "commit": "b12561386a25645adb7504e0e6a8c5dc8b31e6da" } +} \ No newline at end of file diff --git a/.config/nvim/lua/options.lua b/.config/nvim/lua/options.lua new file mode 100644 index 0000000..c962840 --- /dev/null +++ b/.config/nvim/lua/options.lua @@ -0,0 +1,12 @@ +vim.o.number = true +vim.o.relativenumber = true +vim.o.timeout = true +vim.o.timeoutlen = 300 +vim.o.shiftwidth = 2 +vim.o.tabstop = 2 +vim.o.softtabstop = 0 +vim.o.expandtab = true + +vim.g.mapleader = " " +vim.g.maplocalleader = " " + diff --git a/.config/nvim/lua/plugins/autopairs.lua b/.config/nvim/lua/plugins/autopairs.lua new file mode 100644 index 0000000..a9641f7 --- /dev/null +++ b/.config/nvim/lua/plugins/autopairs.lua @@ -0,0 +1,6 @@ +return { + 'windwp/nvim-autopairs', + event = "InsertEnter", + opts = {}, +} + diff --git a/.config/nvim/lua/plugins/bufferline.lua b/.config/nvim/lua/plugins/bufferline.lua new file mode 100644 index 0000000..b7d9c84 --- /dev/null +++ b/.config/nvim/lua/plugins/bufferline.lua @@ -0,0 +1,23 @@ +return { + { + "akinsho/bufferline.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + event = "BufEnter", + keys = { + { "", "BufferLineCyclePrev", desc = "Previous buffer" }, + { "", "BufferLineCycleNext", desc = "Next buffer" }, + { "", "bdelete", desc = "Delete buffer" }, + { "", "bdelete!", desc = "Force delete buffer" }, + { "", "BufferLinePick", desc = "Pick buffer" }, + }, + config = function() + require("bufferline").setup({ + highlights = require("catppuccin.groups.integrations.bufferline").get(), + options = { + indicator = { icon = " " }, + diagnostics = "nvim_lsp", + }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/catppuccin.lua b/.config/nvim/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..f4c1987 --- /dev/null +++ b/.config/nvim/lua/plugins/catppuccin.lua @@ -0,0 +1,19 @@ +return { + { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + config = function() + require("catppuccin").setup({ + flavour = "macchiato", + integrations = { + leap = true, + neogit = true, + notify = true, + neotest = true, + }, + }) + vim.cmd.colorscheme("catppuccin") + end, + }, +} diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..19b091f --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,132 @@ +return { + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "petertriho/cmp-git", + "nvim-lua/plenary.nvim", + "hrsh7th/cmp-nvim-lsp", + "saadparwaiz1/cmp_luasnip", + { + "L3MON4D3/LuaSnip", + dependencies = { "rafamadriz/friendly-snippets" }, + config = function() + require("luasnip.loaders.from_vscode").lazy_load() + end, + }, + }, + event = "InsertEnter", + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + + cmp.setup({ + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), + [""] = 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" }), + }), + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end + }, + sources = cmp.config.sources({ + { name = "luasnip" }, + { name = "nvim_lsp" }, + { name = "path" }, + { name = "conjure" }, + { name = "git" }, + }, { + { name = "buffer" }, + }), + }) + + require("cmp_git").setup() + end, + }, + { + "hrsh7th/cmp-cmdline", + dependencies = { + "hrsh7th/nvim-cmp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + }, + event = "CmdlineEnter", + config = function() + local cmp = require("cmp") + cmp.setup.cmdline({ "/", "?" }, { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = "buffer" }, + }), + }) + cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = "path" }, + }, { + { + name = "cmdline", + option = { + ignore_cmds = { "Man", "!" }, + }, + }, + }) + }) + end, + }, + { + "PaterJason/cmp-conjure", + dependencies = { "hrsh7th/nvim-cmp" }, + ft = { + "clojure", + "fennel", + "janet", + "racket", + "hy", + "scheme", + "guile", + "commonlisp", + "julia", + "rust", + "lua", + "python", + }, + }, + { + "rcarriga/cmp-dap", + dependencies = { "hrsh7th/nvim-cmp" }, + ft = { "dap-repl", "dapui_watches", "dapui_hover" }, + config = function() + local cmp = require("cmp") + cmp.setup.filetype({ "dap-repl", "dapui_watches", "dapui_hover" }, { + sources = { + { name = "dap" }, + }, + }) + end, + }, +} + diff --git a/.config/nvim/lua/plugins/colorizer.lua b/.config/nvim/lua/plugins/colorizer.lua new file mode 100644 index 0000000..51eb0a5 --- /dev/null +++ b/.config/nvim/lua/plugins/colorizer.lua @@ -0,0 +1,20 @@ +return { + { + "nvchad/nvim-colorizer.lua", + event = { "BufReadPre", "BufNewFile" }, + opts = { + user_default_options = { + names = false, + RRGGBBAA = true, + virtualtext = " ", + }, + buftypes = { + "*", + "!dashboard", + "!lazy", + "!popup", + "!prompt", + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/dap.lua b/.config/nvim/lua/plugins/dap.lua new file mode 100644 index 0000000..040511c --- /dev/null +++ b/.config/nvim/lua/plugins/dap.lua @@ -0,0 +1,51 @@ +return { + { + "mfussenegger/nvim-dap", + dependencies = { + "theHamsta/nvim-dap-virtual-text", + { "leoluz/nvim-dap-go", opts = {} }, + { + "mfussenegger/nvim-dap-python", + config = function() + require("dap-python").setup(vim.fn.exepath("python")) + end, + }, + { + "rcarriga/nvim-dap-ui", + dependencies = { "mfussenegger/nvim-dap" }, + keys = { + { "du", function() require("dapui").toggle() end, desc = "Toggle UI" }, + { "de", function() require("dapui").eval() end, desc = "Eval", mode = { "n", "v" } }, + }, + config = function() + local dapui = require("dapui") + dapui.setup() + + local dap = require("dap") + dap.listeners.after.event_initialized["dapui_config"] = dapui.open + dap.listeners.before.event_terminated["dapui_config"] = dapui.close + dap.listeners.before.event_exited["dapui_config"] = dapui.close + end, + }, + }, + keys = { + { "db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" }, + { "dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" }, + { "dc", function() require("dap").continue() end, desc = "Continue" }, + { "dC", function() require("dap").run_to_cursor() end, desc = "Run to Cursor" }, + { "dg", function() require("dap").goto_() end, desc = "Go to line (no execute)" }, + { "di", function() require("dap").step_into() end, desc = "Step Into" }, + { "dj", function() require("dap").down() end, desc = "Down" }, + { "dk", function() require("dap").up() end, desc = "Up" }, + { "dl", function() require("dap").run_last() end, desc = "Run Last" }, + { "do", function() require("dap").step_out() end, desc = "Step Out" }, + { "dO", function() require("dap").step_over() end, desc = "Step Over" }, + { "dp", function() require("dap").pause() end, desc = "Pause" }, + { "dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" }, + { "ds", function() require("dap").session() end, desc = "Session" }, + { "dt", function() require("dap").terminate() end, desc = "Terminate" }, + { "dw", function() require("dap.ui.widgets").hover() end, desc = "Widgets" }, + }, + }, +} + diff --git a/.config/nvim/lua/plugins/dashboard.lua b/.config/nvim/lua/plugins/dashboard.lua new file mode 100644 index 0000000..ab2fc49 --- /dev/null +++ b/.config/nvim/lua/plugins/dashboard.lua @@ -0,0 +1,26 @@ +return { + { + "nvimdev/dashboard-nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + event = "VimEnter", + opts = { + config = { + header = { + "", + "███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗", + "████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║", + "██╔██╗ ██║█████╗ ██║ ██║╚██╗ ██╔╝██║██╔████╔██║", + "██║╚██╗██║██╔══╝ ██║ ██║ ╚████╔╝ ██║██║╚██╔╝██║", + "██║ ╚████║███████╗╚██████╔╝ ╚██╔╝ ██║██║ ╚═╝ ██║", + "╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝", + "", + }, + shortcut = { + { desc = " New file ", group = "DashboardShortCut", key = "n", action = ":ene" }, + }, + footer = {}, + }, + }, + }, +} + diff --git a/.config/nvim/lua/plugins/editor.lua b/.config/nvim/lua/plugins/editor.lua new file mode 100644 index 0000000..7cc48ea --- /dev/null +++ b/.config/nvim/lua/plugins/editor.lua @@ -0,0 +1,57 @@ +return { + { + "Olical/conjure", + ft = { + "clojure", + "fennel", + "janet", + "racket", + "hy", + "scheme", + "guile", + "commonlisp", + "julia", + "rust", + "lua", + "python", + }, + }, + { "nvimdev/hlsearch.nvim", event = { "BufReadPre", "BufNewFile" }, opts = {} }, + { "folke/todo-comments.nvim", event = { "BufReadPre", "BufNewFile" }, opts = {} }, + { "stevearc/dressing.nvim", event = "VeryLazy", opts = {} }, + { "kylechui/nvim-surround", event = "VeryLazy", opts = {} }, + { "numtostr/comment.nvim", event = "VeryLazy", opts = {} }, + { "folke/neodev.nvim", ft = "lua", opts = {} }, + { + "iamcco/markdown-preview.nvim", + build = "cd app && npm install", + cmd = { "MarkdownPreview", "MarkdownPreviewStop", "MarkdownPreviewToggle" }, + }, + { + "RRethy/vim-illuminate", + event = { "BufReadPre", "BufNewFile" }, + config = function() + require("illuminate").configure({ + providers = { "lsp", "treesitter" }, + }) + vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "illuminatedWord" }) + vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "illuminatedWord" }) + vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "illuminatedWord" }) + end, + }, + { + "echasnovski/mini.ai", + event = "VeryLazy", + config = function() + local ai = require("mini.ai") + ai.setup({ + n_lines = 200, + custom_textobjects = { + F = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }), + c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }), + }, + }) + end + }, +} + diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua new file mode 100644 index 0000000..d94893d --- /dev/null +++ b/.config/nvim/lua/plugins/git.lua @@ -0,0 +1,92 @@ +return { + { + "sindrets/diffview.nvim", + cmd = { + "DiffviewLog", + "DiffviewOpen", + "DiffviewClose", + "DiffviewRefresh", + "DiffviewFocusFiles", + "DiffviewFileHistory", + "DiffviewToggleFiles", + }, + }, + { + "NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", + "sindrets/diffview.nvim", + }, + cmd = "Neogit", + opts = { + integrations = { + diffview = true, + }, + }, + }, + { + "lewis6991/gitsigns.nvim", + dependencies = { "folke/which-key.nvim" }, + event = { "BufReadPre", "BufNewFile" }, + opts = { + on_attach = function(bufnr) + local gs = require("gitsigns") + local wk = require("which-key") + + wk.register({ + ["]c"] = { + function() + if vim.wo.diff then return "]c" end + vim.schedule(gs.next_hunk) + return "" + end, + "Next hunk", + }, + ["[c"] = { + function() + if vim.wo.diff then return "[c" end + vim.schedule(gs.prev_hunk) + return "" + end, + "Previous hunk", + }, + }, {expr=true}) + + wk.register({ + ["h"] = { + name = "+Gitsigns", + s = { gs.stage_hunk, "Stage hunk" }, + r = { gs.reset_hunk, "Reset hunk" }, + S = { gs.stage_buffer, "Stage buffer" }, + u = { gs.undo_stage_hunk, "Undo stage hunk" }, + R = { gs.reset_buffer, "Reset buffer" }, + p = { gs.preview_hunk, "Preview hunk" }, + b = { function() gs.blame_line({full=true}) end, "Blame line" }, + B = { gs.toggle_current_line_blame, "Toggle current line blame" }, + d = { gs.diffthis, "Diff current buffer" }, + D = { function() gs.diffthis("~") end, "TODO" }, + x = { gs.toggle_deleted, "Toggle deleted" }, + }, + }) + + wk.register({ + ["h"] = { + name = "+Gitsigns", + s = { + function() gs.stage_hunk({vim.fn.line("."), vim.fn.line("v")}) end, + "Stage selected lines", + }, + r = { + function() gs.reset_hunk({vim.fn.line("."), vim.fn.line("v")}) end, + "Reset selected lines", + }, + }, + }, {mode="v"}) + + wk.register({ + ["ih"] = { ":Gitsigns select_hunk", "Select hunk" }, + }, {mode={ "o", "x" }}) + end, + }, + }, +} diff --git a/.config/nvim/lua/plugins/indent-blankline.lua b/.config/nvim/lua/plugins/indent-blankline.lua new file mode 100644 index 0000000..b034aed --- /dev/null +++ b/.config/nvim/lua/plugins/indent-blankline.lua @@ -0,0 +1,20 @@ +return { + { + "lukas-reineke/indent-blankline.nvim", + event = { "BufReadPre", "BufNewFile" }, + config = function() + vim.g.indent_blankline_filetype_exclude = { + "alpha", + "fugitive", + "help", + "lazy", + "dashboard", + "NeogitCommitView", + "NeogitConsole", + "NeogitStatus", + "NvimTree", + "TelescopePrompt", + } + end, + }, +} diff --git a/.config/nvim/lua/plugins/leap.lua b/.config/nvim/lua/plugins/leap.lua new file mode 100644 index 0000000..7c755ca --- /dev/null +++ b/.config/nvim/lua/plugins/leap.lua @@ -0,0 +1,18 @@ +return { + { + "ggandor/leap.nvim", + keys = { "s", "S" }, + config = function() + require("leap").add_default_mappings() + end + }, + { + "ggandor/flit.nvim", + dependencies = { "ggandor/leap.nvim" }, + keys = { "f", "F", "t", "T" }, + opts = { + labeled_modes = "nvx", + }, + }, +} + diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..cb4511d --- /dev/null +++ b/.config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,78 @@ +return { + { + "neovim/nvim-lspconfig", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "jose-elias-alvarez/null-ls.nvim", + }, + event = { "BufReadPre", "BufNewFile" }, + config = function() + local lspconfig = require("lspconfig") + local capabilities = require("cmp_nvim_lsp").default_capabilities() + local common = { + capabilities = capabilities, + } + + local lsps = { + "rust_analyzer", + "gopls", + "lua_ls", + "pylsp", + } + + for _, lsp in ipairs(lsps) do + lspconfig[lsp].setup(common) + end + + local wk = require("which-key") + wk.register({ + ["q"] = { vim.diagnostic.open_float, "Show diagnostics in a floating window" }, + ["[d"] = { vim.diagnostic.goto_prev, "Previous diagnostic" }, + ["]d"] = { vim.diagnostic.goto_next, "Next diagnostic" }, + }) + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("UserLspConfig", {}), + callback = function(ev) + wk.register({ + gD = { vim.lsp.buf.declaration, "Go to declaration" }, + gd = { vim.lsp.buf.definition, "Go to definition" }, + gr = { vim.lsp.buf.references, "Go to references" }, + gi = { vim.lsp.buf.implementation, "Go to implementation" }, + K = { vim.lsp.buf.hover, "Show LSP hover info" }, + [""] = { vim.lsp.buf.signature_help, "Show signature help" }, + ["D"] = { vim.lsp.buf.type_definition, "Type definition" }, + ["rn"] = { vim.lsp.buf.rename, "Rename" }, + ["ca"] = { vim.lsp.buf.code_action, "Code action" }, + ["F"] = { + function() + vim.lsp.buf.format({ async = true }) + end, + "Format buffer", + }, + ["w"] = { + name = "+LSP workspace", + a = { vim.lsp.buf.add_workspace_folder, "Add workspace folder" }, + r = { vim.lsp.buf.remove_workspace_folder, "Remove workspace folder" }, + l = { + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + "List workspace folders", + }, + }, + }, {buffer=ev.buf}) + end, + }) + + local nls = require("null-ls") + nls.setup({ + sources = { + nls.builtins.formatting.stylua, + nls.builtins.formatting.shfmt, + nls.builtins.code_actions.gitsigns, + }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..21881b9 --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,11 @@ +return { + { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + opts = { + options = { + theme = "catppuccin", + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/neotest.lua b/.config/nvim/lua/plugins/neotest.lua new file mode 100644 index 0000000..74817a5 --- /dev/null +++ b/.config/nvim/lua/plugins/neotest.lua @@ -0,0 +1,33 @@ +return { + { + "nvim-neotest/neotest", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + "antoinemadec/FixCursorHold.nvim", + + "nvim-neotest/neotest-python", + }, + keys = { + { "tt", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "Run buffer" }, + { "tT", function() require("neotest").run.run(vim.loop.cwd()) end, desc = "Run all files" }, + { "tr", function() require("neotest").run.run() end, desc = "Run nearest test" }, + { "td", function() require("neotest").run.run({strategy="dap"}) end, desc = "Debug nearest test" }, + { "ts", function() require("neotest").summary.toggle() end, desc = "Toggle summary" }, + { "to", function() require("neotest").output.open({enter=true, auto_close=true}) end, desc = "Show output" }, + { "tO", function() require("neotest").output_panel.toggle() end, desc = "Toggle output panel" }, + { "tS", function() require("neotest").run.stop() end, desc = "Stop" }, + { "twt", function() require("neotest").watch.watch(vim.fn.expand("%")) end, desc = "Watch buffer" }, + { "twT", function() require("neotest").watch.watch(vim.loop.cwd()) end, desc = "Watch all files" }, + { "twr", function() require("neotest").watch.watch() end, desc = "Watch nearest test" }, + { "tws", function() require("neotest").watch.stop() end, desc = "Stop watching" }, + }, + config = function() + require("neotest").setup({ + adapters = { + require("neotest-python"), + }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/notify.lua b/.config/nvim/lua/plugins/notify.lua new file mode 100644 index 0000000..68941bb --- /dev/null +++ b/.config/nvim/lua/plugins/notify.lua @@ -0,0 +1,19 @@ +return { + { + "rcarriga/nvim-notify", + event = "VeryLazy", + config = function() + vim.notify = require("notify") + end, + }, + { + "nvim-telescope/telescope.nvim", + dependencies = { "rcarriga/nvim-notify" }, + keys = { + { "fn", "Telescope notify", desc = "Notifications" }, + }, + config = function() + require("telescope").load_extension("notify") + end, + }, +} diff --git a/.config/nvim/lua/plugins/rainbow-delimiters.lua b/.config/nvim/lua/plugins/rainbow-delimiters.lua new file mode 100644 index 0000000..feddc53 --- /dev/null +++ b/.config/nvim/lua/plugins/rainbow-delimiters.lua @@ -0,0 +1,26 @@ +return { + { + "HiPhish/rainbow-delimiters.nvim", + event = { "BufReadPre", "BufNewFile" }, + config = function() + vim.g.rainbow_delimiters = { + strategy = { + [""] = require("rainbow-delimiters").strategy["global"], + }, + query = { + [""] = "rainbow-delimiters", + lua = "rainbow-blocks", + }, + highlight = { + "TSRainbowRed", + "TSRainbowYellow", + "TSRainbowBlue", + "TSRainbowOrange", + "TSRainbowGreen", + "TSRainbowViolet", + "TSRainbowCyan", + }, + } + end, + }, +} diff --git a/.config/nvim/lua/plugins/spectre.lua b/.config/nvim/lua/plugins/spectre.lua new file mode 100644 index 0000000..6b4b50f --- /dev/null +++ b/.config/nvim/lua/plugins/spectre.lua @@ -0,0 +1,13 @@ +return { + { + "nvim-pack/nvim-spectre", + dependencies = { "nvim-lua/plenary.nvim" }, + keys = { + { "S", function() require("spectre").open() end, desc = "Open Spectre" }, + { "sw", function() require("spectre").open_visual({select_word=true}) end, desc = "Search current word" }, + { "sw", function() require("spectre").open_visual() end, desc = "Search current word", mode = "v" }, + { "sp", function() require("spectre").open_file_search({select_word=true}) end, desc = "Search on current file" }, + }, + opts = {}, + }, +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..2353209 --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,31 @@ +return { + { + "nvim-telescope/telescope.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", + }, + keys = { + { "fF", "Telescope find_files", desc = "Find files" }, + { "ff", "Telescope git_files", desc = "Find git files" }, + { "fg", "Telescope live_grep", desc = "Live grep" }, + { "fb", "Telescope buffers", desc = "Buffers" }, + { "fh", "Telescope help_tags", desc = "Help tags" }, + }, + cmd = "Telescope", + }, + { + "nvim-telescope/telescope-file-browser.nvim", + dependencies = { + "nvim-telescope/telescope.nvim", + "nvim-lua/plenary.nvim", + }, + keys = { + { "fd", "Telescope file_browser", desc = "File browser" }, + }, + cmd = "Telescope file_browser", + config = function() + require("telescope").load_extension("file_browser") + end, + }, +} diff --git a/.config/nvim/lua/plugins/terminal.lua b/.config/nvim/lua/plugins/terminal.lua new file mode 100644 index 0000000..ee7f8ae --- /dev/null +++ b/.config/nvim/lua/plugins/terminal.lua @@ -0,0 +1,12 @@ +return { + { + "akinsho/toggleterm.nvim", + keys = "", + opts = { + open_mapping = "", + shade_terminals = false, + direction = "vertical", + size = function() return vim.o.columns * 0.45 end, + }, + }, +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..ba45ada --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,33 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + dependencies = { "nvim-treesitter/nvim-treesitter-textobjects" }, + event = { "BufReadPre", "BufNewFile" }, + config = function() + require("nvim-treesitter.configs").setup({ + auto_install = true, + ensure_installed = { + "lua", + "python", + "rust", + "bash", + "regex", + "json", + "toml", + "yaml", + "ini", + "markdown", + "html", + "css", + "javascript", + "typescript", + "tsx", + "scss", + "clojure", + "sql", + }, + highlight = { enable = true }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/trouble.lua b/.config/nvim/lua/plugins/trouble.lua new file mode 100644 index 0000000..6678356 --- /dev/null +++ b/.config/nvim/lua/plugins/trouble.lua @@ -0,0 +1,15 @@ +return { + { + "folke/trouble.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + keys = { + { "xx", "TroubleToggle", desc = "Toggle trouble", silent = true }, + { "xw", "TroubleToggle workspace_diagnostics", desc = "Toggle workspace diagnostics", silent = true }, + { "xd", "TroubleToggle document_diagnostics", desc = "Toggle document diagnostics", silent = true }, + { "xl", "TroubleToggle loclist", desc = "Toggle loclist", silent = true }, + { "xq", "TroubleToggle quickfix", desc = "Toggle quickfix list", silent = true }, + { "gR", "TroubleToggle lsp_references", desc = "Toggle LSP reference list", silent = true }, + }, + opts = {}, + }, +} diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..104d728 --- /dev/null +++ b/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,16 @@ +return { + "folke/which-key.nvim", + event = "VeryLazy", + config = function() + require("which-key").register({ + ["t"] = { + name = "+test", + w = { name = "+watch" }, + }, + ["f"] = { name = "+Telescope" }, + ["d"] = { name = "+debug" }, + ["s"] = { name = "+Spectre" }, + ["x"] = { name = "+Trouble" }, + }) + end, +} diff --git a/.config/nvim/lua/plugins/yanky.lua b/.config/nvim/lua/plugins/yanky.lua new file mode 100644 index 0000000..be90ccf --- /dev/null +++ b/.config/nvim/lua/plugins/yanky.lua @@ -0,0 +1,26 @@ +return { + { + "gbprod/yanky.nvim", + keys = { + { "p", "(YankyPutAfter)", desc = "Put after cursor", mode = { "n", "x" } }, + { "P", "(YankyPutBefore)", desc = "Put before cursor", mode = { "n", "x" } }, + { "gp", "(YankyGPutAfter)", desc = "Put after cursor", mode = { "n", "x" } }, + { "gP", "(YankyGPutBefore)", desc = "Put before cursor", mode = { "n", "x" } }, + { "", "(YankyCycleForward)", desc = "Next yank" }, + { "", "(YankyCycleBackward)", desc = "Previous yank" }, + }, + opts = {}, + }, + { + "nvim-telescope/telescope.nvim", + dependencies = { "gbprod/yanky.nvim" }, + keys = { + { "fy", "Telescope yank_history", desc = "Yank history" }, + }, + cmd = "Telescope yank_history", + config = function() + require("telescope").load_extension("yank_history") + end, + }, +} + -- cgit v1.2.3