summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins
diff options
context:
space:
mode:
authorSam Nystrom <sam@samnystrom.dev>2023-07-05 21:26:02 -0400
committerSam Nystrom <sam@samnystrom.dev>2023-07-05 21:26:02 -0400
commite5c8f244466ff4da4b12c1bbfd2292a8408ff1d2 (patch)
tree978e99f5e9fdb7877a15ebe54eaa6d06dee71a92 /.config/nvim/lua/plugins
parent22f001c91a158c1bc576a74ecae5a33402f83ab8 (diff)
Add Neovim config
Diffstat (limited to '.config/nvim/lua/plugins')
-rw-r--r--.config/nvim/lua/plugins/autopairs.lua6
-rw-r--r--.config/nvim/lua/plugins/bufferline.lua23
-rw-r--r--.config/nvim/lua/plugins/catppuccin.lua19
-rw-r--r--.config/nvim/lua/plugins/cmp.lua132
-rw-r--r--.config/nvim/lua/plugins/colorizer.lua20
-rw-r--r--.config/nvim/lua/plugins/dap.lua51
-rw-r--r--.config/nvim/lua/plugins/dashboard.lua26
-rw-r--r--.config/nvim/lua/plugins/editor.lua57
-rw-r--r--.config/nvim/lua/plugins/git.lua92
-rw-r--r--.config/nvim/lua/plugins/indent-blankline.lua20
-rw-r--r--.config/nvim/lua/plugins/leap.lua18
-rw-r--r--.config/nvim/lua/plugins/lsp.lua78
-rw-r--r--.config/nvim/lua/plugins/lualine.lua11
-rw-r--r--.config/nvim/lua/plugins/neotest.lua33
-rw-r--r--.config/nvim/lua/plugins/notify.lua19
-rw-r--r--.config/nvim/lua/plugins/rainbow-delimiters.lua26
-rw-r--r--.config/nvim/lua/plugins/spectre.lua13
-rw-r--r--.config/nvim/lua/plugins/telescope.lua31
-rw-r--r--.config/nvim/lua/plugins/terminal.lua12
-rw-r--r--.config/nvim/lua/plugins/treesitter.lua33
-rw-r--r--.config/nvim/lua/plugins/trouble.lua15
-rw-r--r--.config/nvim/lua/plugins/which-key.lua16
-rw-r--r--.config/nvim/lua/plugins/yanky.lua26
23 files changed, 777 insertions, 0 deletions
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 = {
+ { "<A-,>", "<Cmd>BufferLineCyclePrev<CR>", desc = "Previous buffer" },
+ { "<A-.>", "<Cmd>BufferLineCycleNext<CR>", desc = "Next buffer" },
+ { "<A-x>", "<Cmd>bdelete<CR>", desc = "Delete buffer" },
+ { "<A-X>", "<Cmd>bdelete!<CR>", desc = "Force delete buffer" },
+ { "<A-space>", "<Cmd>BufferLinePick<CR>", 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({
+ ["<C-b>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<C-e>"] = cmp.mapping.abort(),
+ ["<CR>"] = cmp.mapping.confirm({ select = true }),
+ ["<Tab>"] = 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" }),
+ ["<S-Tab>"] = 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 = {
+ { "<leader>du", function() require("dapui").toggle() end, desc = "Toggle UI" },
+ { "<leader>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 = {
+ { "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" },
+ { "<leader>dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" },
+ { "<leader>dc", function() require("dap").continue() end, desc = "Continue" },
+ { "<leader>dC", function() require("dap").run_to_cursor() end, desc = "Run to Cursor" },
+ { "<leader>dg", function() require("dap").goto_() end, desc = "Go to line (no execute)" },
+ { "<leader>di", function() require("dap").step_into() end, desc = "Step Into" },
+ { "<leader>dj", function() require("dap").down() end, desc = "Down" },
+ { "<leader>dk", function() require("dap").up() end, desc = "Up" },
+ { "<leader>dl", function() require("dap").run_last() end, desc = "Run Last" },
+ { "<leader>do", function() require("dap").step_out() end, desc = "Step Out" },
+ { "<leader>dO", function() require("dap").step_over() end, desc = "Step Over" },
+ { "<leader>dp", function() require("dap").pause() end, desc = "Pause" },
+ { "<leader>dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" },
+ { "<leader>ds", function() require("dap").session() end, desc = "Session" },
+ { "<leader>dt", function() require("dap").terminate() end, desc = "Terminate" },
+ { "<leader>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 "<Ignore>"
+ end,
+ "Next hunk",
+ },
+ ["[c"] = {
+ function()
+ if vim.wo.diff then return "[c" end
+ vim.schedule(gs.prev_hunk)
+ return "<Ignore>"
+ end,
+ "Previous hunk",
+ },
+ }, {expr=true})
+
+ wk.register({
+ ["<leader>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({
+ ["<leader>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"] = { ":<C-U>Gitsigns select_hunk<CR>", "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({
+ ["<leader>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" },
+ ["<C-k>"] = { vim.lsp.buf.signature_help, "Show signature help" },
+ ["<leader>D"] = { vim.lsp.buf.type_definition, "Type definition" },
+ ["<leader>rn"] = { vim.lsp.buf.rename, "Rename" },
+ ["<leader>ca"] = { vim.lsp.buf.code_action, "Code action" },
+ ["<leader>F"] = {
+ function()
+ vim.lsp.buf.format({ async = true })
+ end,
+ "Format buffer",
+ },
+ ["<leader>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 = {
+ { "<leader>tt", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "Run buffer" },
+ { "<leader>tT", function() require("neotest").run.run(vim.loop.cwd()) end, desc = "Run all files" },
+ { "<leader>tr", function() require("neotest").run.run() end, desc = "Run nearest test" },
+ { "<leader>td", function() require("neotest").run.run({strategy="dap"}) end, desc = "Debug nearest test" },
+ { "<leader>ts", function() require("neotest").summary.toggle() end, desc = "Toggle summary" },
+ { "<leader>to", function() require("neotest").output.open({enter=true, auto_close=true}) end, desc = "Show output" },
+ { "<leader>tO", function() require("neotest").output_panel.toggle() end, desc = "Toggle output panel" },
+ { "<leader>tS", function() require("neotest").run.stop() end, desc = "Stop" },
+ { "<leader>twt", function() require("neotest").watch.watch(vim.fn.expand("%")) end, desc = "Watch buffer" },
+ { "<leader>twT", function() require("neotest").watch.watch(vim.loop.cwd()) end, desc = "Watch all files" },
+ { "<leader>twr", function() require("neotest").watch.watch() end, desc = "Watch nearest test" },
+ { "<leader>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 = {
+ { "<leader>fn", "<cmd>Telescope notify<cr>", 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 = {
+ { "<leader>S", function() require("spectre").open() end, desc = "Open Spectre" },
+ { "<leader>sw", function() require("spectre").open_visual({select_word=true}) end, desc = "Search current word" },
+ { "<leader>sw", function() require("spectre").open_visual() end, desc = "Search current word", mode = "v" },
+ { "<leader>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 = {
+ { "<leader>fF", "<cmd>Telescope find_files<cr>", desc = "Find files" },
+ { "<leader>ff", "<cmd>Telescope git_files<cr>", desc = "Find git files" },
+ { "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
+ { "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
+ { "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
+ },
+ cmd = "Telescope",
+ },
+ {
+ "nvim-telescope/telescope-file-browser.nvim",
+ dependencies = {
+ "nvim-telescope/telescope.nvim",
+ "nvim-lua/plenary.nvim",
+ },
+ keys = {
+ { "<leader>fd", "<cmd>Telescope file_browser<cr>", 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 = "<C-t>",
+ opts = {
+ open_mapping = "<C-t>",
+ 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 = {
+ { "<leader>xx", "<Cmd>TroubleToggle<CR>", desc = "Toggle trouble", silent = true },
+ { "<leader>xw", "<Cmd>TroubleToggle workspace_diagnostics<CR>", desc = "Toggle workspace diagnostics", silent = true },
+ { "<leader>xd", "<Cmd>TroubleToggle document_diagnostics<CR>", desc = "Toggle document diagnostics", silent = true },
+ { "<leader>xl", "<Cmd>TroubleToggle loclist<CR>", desc = "Toggle loclist", silent = true },
+ { "<leader>xq", "<Cmd>TroubleToggle quickfix<CR>", desc = "Toggle quickfix list", silent = true },
+ { "gR", "<Cmd>TroubleToggle lsp_references<CR>", 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({
+ ["<leader>t"] = {
+ name = "+test",
+ w = { name = "+watch" },
+ },
+ ["<leader>f"] = { name = "+Telescope" },
+ ["<leader>d"] = { name = "+debug" },
+ ["<leader>s"] = { name = "+Spectre" },
+ ["<leader>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", "<Plug>(YankyPutAfter)", desc = "Put after cursor", mode = { "n", "x" } },
+ { "P", "<Plug>(YankyPutBefore)", desc = "Put before cursor", mode = { "n", "x" } },
+ { "gp", "<Plug>(YankyGPutAfter)", desc = "Put after cursor", mode = { "n", "x" } },
+ { "gP", "<Plug>(YankyGPutBefore)", desc = "Put before cursor", mode = { "n", "x" } },
+ { "<C-n>", "<Plug>(YankyCycleForward)", desc = "Next yank" },
+ { "<C-p>", "<Plug>(YankyCycleBackward)", desc = "Previous yank" },
+ },
+ opts = {},
+ },
+ {
+ "nvim-telescope/telescope.nvim",
+ dependencies = { "gbprod/yanky.nvim" },
+ keys = {
+ { "<leader>fy", "<cmd>Telescope yank_history<cr>", desc = "Yank history" },
+ },
+ cmd = "Telescope yank_history",
+ config = function()
+ require("telescope").load_extension("yank_history")
+ end,
+ },
+}
+