summaryrefslogtreecommitdiff
path: root/.config/nvim
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim')
-rw-r--r--.config/nvim/.stylua.toml3
-rw-r--r--.config/nvim/README.md7
-rw-r--r--.config/nvim/init.lua18
-rw-r--r--.config/nvim/lazy-lock.json59
-rw-r--r--.config/nvim/lua/options.lua12
-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
28 files changed, 876 insertions, 0 deletions
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 = {
+ { "<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,
+ },
+}
+