From 9c083c98a36cd9ea06b96d079c1168b89a3a006a Mon Sep 17 00:00:00 2001 From: sudacode Date: Sun, 16 Feb 2025 01:47:35 -0800 Subject: [PATCH] update config to lazy - add some new plugins - remove some old ones - clean up/update some configs --- init.lua | 9 +- lazy-lock.json | 61 +++ lua/core/autocmds.lua | 56 ++- lua/core/highlights.lua | 59 +++ lua/core/keymaps.lua | 199 +++++----- lua/core/lazy.lua | 37 ++ lua/core/lsp-notifications.lua | 98 +++++ lua/core/options.lua | 61 +-- lua/core/plugins.lua | 354 ------------------ lua/plugins/ai/codecompanion.lua | 15 - .../ai/codecompanion/fidget-spinner.lua | 71 ---- lua/plugins/ai/init.lua | 1 - lua/plugins/anyjump.lua | 1 + lua/plugins/auto-format.lua | 7 + lua/plugins/bufferline.lua | 100 +++++ lua/plugins/catppuccin.lua | 56 +++ lua/plugins/codecompanion.lua | 36 ++ lua/plugins/codecompanion/fidget-spinner.lua | 71 ++++ lua/plugins/colorscheme/catppuccin.lua | 68 ---- lua/plugins/colorscheme/dracula.lua | 33 -- lua/plugins/colorscheme/init.lua | 3 - lua/plugins/colorscheme/onedarkpro.lua | 74 ---- lua/plugins/copilot-cmp.lua | 7 + lua/plugins/copilot-lualine.lua | 3 + lua/plugins/copilot.lua | 55 +++ lua/plugins/dashboard.lua | 36 ++ lua/plugins/fidget.lua | 101 +++++ lua/plugins/gitsigns.lua | 50 +++ lua/plugins/goto-preview.lua | 1 + lua/plugins/image.lua | 41 ++ lua/plugins/indent-blanklines.lua | 35 ++ lua/plugins/lazydev.lua | 14 + lua/plugins/lsp/copilot-cmp.lua | 8 - lua/plugins/lsp/init.lua | 9 - lua/plugins/lsp/lsp-format.lua | 1 - lua/plugins/lsp/lsp-kind.lua | 33 -- lua/plugins/lsp/lspconfig.lua | 203 ---------- lua/plugins/lsp/lspfuzzy.lua | 16 - lua/plugins/lsp/lsplines.lua | 6 - lua/plugins/lsp/luasnip.lua | 1 - lua/plugins/lsp/null-ls.lua | 58 --- lua/plugins/lsp/nvim-cmp.lua | 274 -------------- lua/plugins/lsp/nvim-lint.lua | 21 -- lua/plugins/lsp_lines.lua | 9 + lua/plugins/lspconfig.lua | 78 ++++ lua/plugins/lspkind.lua | 1 + lua/plugins/lualine.lua | 137 +++++++ lua/plugins/luasnip.lua | 7 + lua/plugins/mini.lua | 63 ++++ lua/plugins/nio.lua | 1 + lua/plugins/none-ls.lua | 65 ++++ lua/plugins/notify.lua | 20 + lua/plugins/nvim-autopairs.lua | 26 ++ lua/plugins/nvim-cmp.lua | 263 +++++++++++++ lua/plugins/nvim-colorizer.lua | 6 + lua/plugins/nvim-lint.lua | 14 + lua/plugins/nvim-tree.lua | 11 + lua/plugins/plenary.lua | 3 + lua/plugins/presence.lua | 25 ++ lua/plugins/rainbow-delimeters.lua | 24 ++ lua/plugins/render-markdown.lua | 196 ++++++++++ lua/plugins/telescope-glyph.lua | 5 + lua/plugins/telescope.lua | 119 ++++++ lua/plugins/toggleterm.lua | 85 +++++ lua/plugins/treesitter.lua | 46 +++ lua/plugins/ui/bufferline.lua | 85 ----- lua/plugins/ui/copilot-lualine.lua | 40 -- lua/plugins/ui/fidget.lua | 49 --- lua/plugins/ui/git-blame.lua | 2 - lua/plugins/ui/gitsigns.lua | 48 --- lua/plugins/ui/indent-blankline.lua | 30 -- lua/plugins/ui/init.lua | 17 - lua/plugins/ui/lualine.lua | 103 ----- lua/plugins/ui/nvim-colorizer.lua | 1 - lua/plugins/ui/nvim-notify.lua | 17 - lua/plugins/ui/nvimtree.lua | 67 ---- lua/plugins/ui/presence.lua | 22 -- lua/plugins/ui/rainbow-delimiters.lua | 15 - lua/plugins/ui/telescope-file-browser.lua | 25 -- lua/plugins/ui/telescope.lua | 67 ---- lua/plugins/ui/toggleterm.lua | 81 ---- lua/plugins/ui/treesitter-context.lua | 14 - lua/plugins/ui/treesitter.lua | 48 --- lua/plugins/ui/whichkey.lua | 96 ----- lua/plugins/vim-commentary.lua | 1 + lua/plugins/vim-wakatime.lua | 1 + lua/plugins/whichkey.lua | 143 +++++++ 87 files changed, 2377 insertions(+), 2242 deletions(-) create mode 100644 lazy-lock.json create mode 100644 lua/core/highlights.lua create mode 100644 lua/core/lazy.lua create mode 100644 lua/core/lsp-notifications.lua delete mode 100644 lua/core/plugins.lua delete mode 100644 lua/plugins/ai/codecompanion.lua delete mode 100644 lua/plugins/ai/codecompanion/fidget-spinner.lua delete mode 100644 lua/plugins/ai/init.lua create mode 100644 lua/plugins/anyjump.lua create mode 100644 lua/plugins/auto-format.lua create mode 100644 lua/plugins/bufferline.lua create mode 100644 lua/plugins/catppuccin.lua create mode 100644 lua/plugins/codecompanion.lua create mode 100644 lua/plugins/codecompanion/fidget-spinner.lua delete mode 100644 lua/plugins/colorscheme/catppuccin.lua delete mode 100644 lua/plugins/colorscheme/dracula.lua delete mode 100644 lua/plugins/colorscheme/init.lua delete mode 100644 lua/plugins/colorscheme/onedarkpro.lua create mode 100644 lua/plugins/copilot-cmp.lua create mode 100644 lua/plugins/copilot-lualine.lua create mode 100644 lua/plugins/copilot.lua create mode 100644 lua/plugins/dashboard.lua create mode 100644 lua/plugins/fidget.lua create mode 100644 lua/plugins/gitsigns.lua create mode 100644 lua/plugins/goto-preview.lua create mode 100644 lua/plugins/image.lua create mode 100644 lua/plugins/indent-blanklines.lua create mode 100644 lua/plugins/lazydev.lua delete mode 100644 lua/plugins/lsp/copilot-cmp.lua delete mode 100644 lua/plugins/lsp/init.lua delete mode 100644 lua/plugins/lsp/lsp-format.lua delete mode 100644 lua/plugins/lsp/lsp-kind.lua delete mode 100644 lua/plugins/lsp/lspconfig.lua delete mode 100644 lua/plugins/lsp/lspfuzzy.lua delete mode 100644 lua/plugins/lsp/lsplines.lua delete mode 100644 lua/plugins/lsp/luasnip.lua delete mode 100644 lua/plugins/lsp/null-ls.lua delete mode 100644 lua/plugins/lsp/nvim-cmp.lua delete mode 100644 lua/plugins/lsp/nvim-lint.lua create mode 100644 lua/plugins/lsp_lines.lua create mode 100644 lua/plugins/lspconfig.lua create mode 100644 lua/plugins/lspkind.lua create mode 100644 lua/plugins/lualine.lua create mode 100644 lua/plugins/luasnip.lua create mode 100644 lua/plugins/mini.lua create mode 100644 lua/plugins/nio.lua create mode 100644 lua/plugins/none-ls.lua create mode 100644 lua/plugins/notify.lua create mode 100644 lua/plugins/nvim-autopairs.lua create mode 100644 lua/plugins/nvim-cmp.lua create mode 100644 lua/plugins/nvim-colorizer.lua create mode 100644 lua/plugins/nvim-lint.lua create mode 100644 lua/plugins/nvim-tree.lua create mode 100644 lua/plugins/plenary.lua create mode 100644 lua/plugins/presence.lua create mode 100644 lua/plugins/rainbow-delimeters.lua create mode 100644 lua/plugins/render-markdown.lua create mode 100644 lua/plugins/telescope-glyph.lua create mode 100644 lua/plugins/telescope.lua create mode 100644 lua/plugins/toggleterm.lua create mode 100644 lua/plugins/treesitter.lua delete mode 100644 lua/plugins/ui/bufferline.lua delete mode 100644 lua/plugins/ui/copilot-lualine.lua delete mode 100644 lua/plugins/ui/fidget.lua delete mode 100644 lua/plugins/ui/git-blame.lua delete mode 100644 lua/plugins/ui/gitsigns.lua delete mode 100644 lua/plugins/ui/indent-blankline.lua delete mode 100644 lua/plugins/ui/init.lua delete mode 100644 lua/plugins/ui/lualine.lua delete mode 100644 lua/plugins/ui/nvim-colorizer.lua delete mode 100644 lua/plugins/ui/nvim-notify.lua delete mode 100644 lua/plugins/ui/nvimtree.lua delete mode 100644 lua/plugins/ui/presence.lua delete mode 100644 lua/plugins/ui/rainbow-delimiters.lua delete mode 100644 lua/plugins/ui/telescope-file-browser.lua delete mode 100644 lua/plugins/ui/telescope.lua delete mode 100644 lua/plugins/ui/toggleterm.lua delete mode 100644 lua/plugins/ui/treesitter-context.lua delete mode 100644 lua/plugins/ui/treesitter.lua delete mode 100755 lua/plugins/ui/whichkey.lua create mode 100644 lua/plugins/vim-commentary.lua create mode 100644 lua/plugins/vim-wakatime.lua create mode 100644 lua/plugins/whichkey.lua diff --git a/init.lua b/init.lua index abfe586..27ffd9a 100644 --- a/init.lua +++ b/init.lua @@ -1,8 +1 @@ -require('core.options') -require('core.keymaps') -require('core.plugins') -require('core.autocmds') -require('plugins.lsp') -require('plugins.ui') -require('plugins.ai') -require('plugins.colorscheme') +require("core.lazy") diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..66e8ca9 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,61 @@ +{ + "LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" }, + "any-jump.vim": { "branch": "master", "commit": "f95674d9a4251ac02f452d5f1861e4422f4652c7" }, + "auto-format.nvim": { "branch": "main", "commit": "1e3c069753d4b0960b351292c1a01af1b122907c" }, + "blink.cmp": { "branch": "main", "commit": "cc2f10e9d8b6420324d4743a4d9a428de427e2cf" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "0b2437bcc12b4021614dc41fcea9d0f136d94063" }, + "cmp-async-path": { "branch": "main", "commit": "d6d1ffa2075039632a2d71e8fa139818e15ac757" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" }, + "cmp-nvim-lsp-document-symbol": { "branch": "main", "commit": "f94f7ba948e32cd302caba1c2ca3f7c697fb4fcf" }, + "cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "031e6ba70b0ad5eee49fd2120ff7a2e325b17fa7" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "codecompanion.nvim": { "branch": "main", "commit": "f1f05fa75dcb6016b2f2af121f1558ebcaf35ef9" }, + "copilot-cmp": { "branch": "master", "commit": "15fc12af3d0109fa76b60b5cffa1373697e261d1" }, + "copilot-lualine": { "branch": "main", "commit": "dc4b8ed0f75bc2557b3158c526624bf04ad233ea" }, + "copilot.lua": { "branch": "master", "commit": "30321e33b03cb924fdcd6a806a0dc6fa0b0eafb9" }, + "dashboard-nvim": { "branch": "master", "commit": "000448d837f6e7a47f8f342f29526c4d7e49e9ce" }, + "fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" }, + "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, + "gitsigns.nvim": { "branch": "main", "commit": "8b00147519d6f8353867d5d0b55f587306b0cfb6" }, + "goto-preview": { "branch": "main", "commit": "4972fcd01c568c2ae981f3f48182e7832ed544ec" }, + "image.nvim": { "branch": "master", "commit": "6ffafab2e98b5bda46bf227055aa84b90add8cdc" }, + "indent-blankline.nvim": { "branch": "master", "commit": "e10626f7fcd51ccd56d7ffc00883ba7e0aa28f78" }, + "lazy.nvim": { "branch": "main", "commit": "e5e9bf48211a13d9ee6c1077c88327c49c1ab4a0" }, + "lazydev.nvim": { "branch": "main", "commit": "a1b78b2ac6f978c72e76ea90ae92a94edf380cfc" }, + "lsp_lines.nvim": { "branch": "main", "commit": "a92c755f182b89ea91bd8a6a2227208026f27b4d" }, + "lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" }, + "lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" }, + "mini.diff": { "branch": "main", "commit": "bc3a7be30fd45ed4961ea90de1d9d04637cdeae6" }, + "mini.nvim": { "branch": "main", "commit": "4dd209e4f03bacd46d6d87408b2529a8823112fb" }, + "none-ls.nvim": { "branch": "main", "commit": "02f5275d8a5546092f01306f162c00c71d6e0281" }, + "nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" }, + "nvim-cmp": { "branch": "main", "commit": "12509903a5723a876abd65953109f926f4634c30" }, + "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, + "nvim-html-css": { "branch": "main", "commit": "fa7e2da75edfd3d110fc8d4f8e5215b5de56ff42" }, + "nvim-lint": { "branch": "master", "commit": "6e9dd545a1af204c4022a8fcd99727ea41ffdcc8" }, + "nvim-lsp-notify": { "branch": "main", "commit": "9541bdde0b84b7a33a24dbc2eccc3df33d4a0cdb" }, + "nvim-lspconfig": { "branch": "master", "commit": "7af2c37192deae28d1305ae9e68544f7fb5408e1" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-notify": { "branch": "master", "commit": "22f29093eae7785773ee9d543f8750348b1a195c" }, + "nvim-tree.lua": { "branch": "master", "commit": "d529a99f88e0dff02e0aa275db2f595cd252a2c8" }, + "nvim-treesitter": { "branch": "master", "commit": "38e46a6d7ade5c8718f77b2b9fd98a0f7ab32c1e" }, + "nvim-web-devicons": { "branch": "master", "commit": "1020869742ecb191f260818234517f4a1515cfe8" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" }, + "rainbow-delimiters.nvim": { "branch": "master", "commit": "011d98eaa3a73b5a51d82ce5bc6b1397dde95562" }, + "render-markdown.nvim": { "branch": "main", "commit": "e05a9f22f31c088ece3fa5928daf546a015b66ee" }, + "telescope-cmdline.nvim": { "branch": "main", "commit": "8b05928ac1b9f2b772cedde891faa6669b0ec59a" }, + "telescope-color-names.nvim": { "branch": "main", "commit": "95b372b9a8ba0fc7cf6a67be637ee37453f322da" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "626998e5c1b71c130d8bc6cf7abb6709b98287bb" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "2a5ceff981501cff8f46871d5402cd3378a8ab6a" }, + "telescope-glyph.nvim": { "branch": "master", "commit": "f63f01e129e71cc25b79637610674bbf0be5ce9d" }, + "telescope.nvim": { "branch": "master", "commit": "78857db9e8d819d3cc1a9a7bdc1d39d127a36495" }, + "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, + "vim-commentary": { "branch": "master", "commit": "64a654ef4a20db1727938338310209b6a63f60c9" }, + "vim-dotenv": { "branch": "master", "commit": "5c51cfcf8d87280d6414e03cd6b253eb70ecb800" }, + "vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" }, + "vim-wakatime": { "branch": "master", "commit": "e46d7c4f98ee0f40782008dd60cb2a79c377fb1d" }, + "which-key.nvim": { "branch": "main", "commit": "5bf7a73fe851896d5ac26d313db849bf00f45b78" } +} diff --git a/lua/core/autocmds.lua b/lua/core/autocmds.lua index e5f96c0..4b1405a 100644 --- a/lua/core/autocmds.lua +++ b/lua/core/autocmds.lua @@ -1,7 +1,7 @@ local augroup = vim.api.nvim_create_augroup local autocmd = vim.api.nvim_create_autocmd --- Restore cursor position +-- {{{ Restore cursor position local restore_cursor = augroup("RestoreCursor", { clear = true }) autocmd("BufReadPost", { group = restore_cursor, @@ -13,23 +13,27 @@ autocmd("BufReadPost", { end end, }) +-- }}} --- Help and man pages in vertical split +-- {{{ Open help and man in vertical split local help_config = augroup("HelpConfig", { clear = true }) autocmd("FileType", { group = help_config, pattern = { "help", "man" }, command = "wincmd L", }) +-- }}} --- Terminal settings +-- {{{ set term options local term_config = augroup("TermConfig", { clear = true }) autocmd("TermOpen", { group = term_config, pattern = "*", command = "setlocal nonumber norelativenumber", }) +-- }}} +-- {{{ Highlight yanked text local highlight_yank = augroup("HighlightYank", { clear = true }) autocmd("TextYankPost", { group = highlight_yank, @@ -38,7 +42,9 @@ autocmd("TextYankPost", { vim.highlight.on_yank({ higroup = "IncSearch", timeout = 420 }) end, }) +-- }}} +-- {{{ Disable indent-blankline for dashboard function disable_for_dashboard() local buftype = vim.api.nvim_buf_get_option(0, "buftype") local filetype = vim.api.nvim_buf_get_option(0, "filetype") @@ -52,39 +58,19 @@ vim.cmd([[ autocmd FileType dashboard lua disable_for_dashboard() augroup END ]]) +-- }}} --- Code actions on cursor hold --- local code_action = augroup('CodeAction', { clear = true }) --- autocmd({ 'CursorHold', 'CursorHoldI' }, { --- group = code_action, --- callback = function() --- if vim.tbl_isempty(vim.lsp.buf_get_clients()) then --- require('code_action_utils').code_action_listener() --- end --- end --- }) +-- {{{ Code companion hook +local group = vim.api.nvim_create_augroup("CodeCompanionHooks", {}) -local function set_timeoutlen_for_insert_mode() - if vim.bo.buftype == "terminal" or vim.bo.filetype == "codecompanion" then - vim.o.timeoutlen = 0 - else - vim.o.timeoutlen = 300 -- Default timeoutlen for other buffers - end -end - --- Create an augroup for managing the autocmds -local augroup = vim.api.nvim_create_augroup("InsertModeTimeout", { clear = true }) - --- Autocommand to adjust timeoutlen when entering insert mode -vim.api.nvim_create_autocmd("InsertEnter", { - group = augroup, - callback = set_timeoutlen_for_insert_mode, -}) - --- Autocommand to reset timeoutlen when leaving insert mode -vim.api.nvim_create_autocmd("InsertLeave", { - group = augroup, - callback = function() - vim.o.timeoutlen = 300 +vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionInline*", + group = group, + callback = function(request) + if request.match == "CodeCompanionInlineFinished" then + -- Format the buffer after the inline request has completed + require("conform").format({ bufnr = request.buf }) + end end, }) +-- }}} diff --git a/lua/core/highlights.lua b/lua/core/highlights.lua new file mode 100644 index 0000000..2ec38e4 --- /dev/null +++ b/lua/core/highlights.lua @@ -0,0 +1,59 @@ +-- gray +vim.api.nvim_set_hl(0, "CmpItemAbbrDeprecated", { bg = "NONE", strikethrough = true, fg = "#808080" }) +-- blue +vim.api.nvim_set_hl(0, "CmpItemAbbrMatch", { bg = "NONE", fg = "#569CD6" }) +vim.api.nvim_set_hl(0, "CmpItemAbbrMatchFuzzy", { link = "CmpIntemAbbrMatch" }) +-- light blue +vim.api.nvim_set_hl(0, "CmpItemKindVariable", { bg = "NONE", fg = "#9CDCFE" }) +vim.api.nvim_set_hl(0, "CmpItemKindInterface", { link = "CmpItemKindVariable" }) +vim.api.nvim_set_hl(0, "CmpItemKindText", { link = "CmpItemKindVariable" }) +-- pink +vim.api.nvim_set_hl(0, "CmpItemKindFunction", { bg = "NONE", fg = "#C586C0" }) +vim.api.nvim_set_hl(0, "CmpItemKindMethod", { link = "CmpItemKindFunction" }) +-- front +vim.api.nvim_set_hl(0, "CmpItemKindKeyword", { bg = "NONE", fg = "#D4D4D4" }) +vim.api.nvim_set_hl(0, "CmpItemKindProperty", { link = "CmpItemKindKeyword" }) +vim.api.nvim_set_hl(0, "CmpItemKindUnit", { link = "CmpItemKindKeyword" }) + +-- Customization for Pmenu +vim.api.nvim_set_hl(0, "PmenuSel", { bg = "#282C34", fg = "NONE" }) +vim.api.nvim_set_hl(0, "Pmenu", { fg = "#C5CDD9", bg = "#22252A" }) + +vim.api.nvim_set_hl(0, "CmpItemAbbrDeprecated", { fg = "#7E8294", bg = "NONE", strikethrough = true }) +vim.api.nvim_set_hl(0, "CmpItemAbbrMatch", { fg = "#82AAFF", bg = "NONE", bold = true }) +vim.api.nvim_set_hl(0, "CmpItemAbbrMatchFuzzy", { fg = "#82AAFF", bg = "NONE", bold = true }) +vim.api.nvim_set_hl(0, "CmpItemMenu", { fg = "#C792EA", bg = "NONE", italic = true }) + +vim.api.nvim_set_hl(0, "CmpItemKindField", { fg = "#EED8DA", bg = "#B5585F" }) +vim.api.nvim_set_hl(0, "CmpItemKindProperty", { fg = "#EED8DA", bg = "#B5585F" }) +vim.api.nvim_set_hl(0, "CmpItemKindEvent", { fg = "#EED8DA", bg = "#B5585F" }) + +vim.api.nvim_set_hl(0, "CmpItemKindText", { fg = "#C3E88D", bg = "#9FBD73" }) +vim.api.nvim_set_hl(0, "CmpItemKindEnum", { fg = "#C3E88D", bg = "#9FBD73" }) +vim.api.nvim_set_hl(0, "CmpItemKindKeyword", { fg = "#C3E88D", bg = "#9FBD73" }) + +vim.api.nvim_set_hl(0, "CmpItemKindConstant", { fg = "#FFE082", bg = "#D4BB6C" }) +vim.api.nvim_set_hl(0, "CmpItemKindConstructor", { fg = "#FFE082", bg = "#D4BB6C" }) +vim.api.nvim_set_hl(0, "CmpItemKindReference", { fg = "#FFE082", bg = "#D4BB6C" }) + +vim.api.nvim_set_hl(0, "CmpItemKindFunction", { fg = "#EADFF0", bg = "#A377BF" }) +vim.api.nvim_set_hl(0, "CmpItemKindStruct", { fg = "#EADFF0", bg = "#A377BF" }) +vim.api.nvim_set_hl(0, "CmpItemKindClass", { fg = "#EADFF0", bg = "#A377BF" }) +vim.api.nvim_set_hl(0, "CmpItemKindModule", { fg = "#EADFF0", bg = "#A377BF" }) +vim.api.nvim_set_hl(0, "CmpItemKindOperator", { fg = "#EADFF0", bg = "#A377BF" }) + +vim.api.nvim_set_hl(0, "CmpItemKindVariable", { fg = "#C5CDD9", bg = "#7E8294" }) +vim.api.nvim_set_hl(0, "CmpItemKindFile", { fg = "#C5CDD9", bg = "#7E8294" }) + +vim.api.nvim_set_hl(0, "CmpItemKindUnit", { fg = "#F5EBD9", bg = "#D4A959" }) +vim.api.nvim_set_hl(0, "CmpItemKindSnippet", { fg = "#F5EBD9", bg = "#D4A959" }) +vim.api.nvim_set_hl(0, "CmpItemKindFolder", { fg = "#F5EBD9", bg = "#D4A959" }) + +vim.api.nvim_set_hl(0, "CmpItemKindMethod", { fg = "#DDE5F5", bg = "#6C8ED4" }) +vim.api.nvim_set_hl(0, "CmpItemKindValue", { fg = "#DDE5F5", bg = "#6C8ED4" }) +vim.api.nvim_set_hl(0, "CmpItemKindEnumMember", { fg = "#DDE5F5", bg = "#6C8ED4" }) + +vim.api.nvim_set_hl(0, "CmpItemKindInterface", { fg = "#D8EEEB", bg = "#58B5A8" }) +vim.api.nvim_set_hl(0, "CmpItemKindColor", { fg = "#D8EEEB", bg = "#58B5A8" }) +vim.api.nvim_set_hl(0, "CmpItemKindTypeParameter", { fg = "#D8EEEB", bg = "#58B5A8" }) +vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644", bg = "#181926" }) diff --git a/lua/core/keymaps.lua b/lua/core/keymaps.lua index 157e089..611dd9e 100644 --- a/lua/core/keymaps.lua +++ b/lua/core/keymaps.lua @@ -1,36 +1,35 @@ local map = vim.keymap.set local Terminal = require("toggleterm.terminal").Terminal -local lazygit = Terminal:new({ cmd = "lazygit", hidden = true }) -local ipython = Terminal:new({ cmd = "ipython", hidden = true }) local notify = require("notify") local function term_factory(cfg) - cfg["on_stderr"] = function(_, job, data, name) - notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data) - end - cfg["on_stdout"] = function(_, job, data, name) - notify(name .. " output for job" .. job .. "\nData: " .. data) - end - return Terminal:new(cfg) + cfg["on_stderr"] = function(_, job, data, name) + notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data) + end + cfg["on_stdout"] = function(_, job, data, name) + notify(name .. " output for job" .. job .. "\nData: " .. data) + end + return Terminal:new(cfg) end local function term_toggle(term) - term:toggle() + term:toggle() end local opts = { silent = true, noremap = true } +local notsilent = { silent = false, noremap = true } local function ReloadConfig() - dofile(vim.fn.stdpath("config") .. "/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/keymaps.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/autocmds.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/options.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/plugins.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/toggleterm.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ai/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/lsp/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/colorscheme/init.lua") + dofile(vim.fn.stdpath("config") .. "/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/keymaps.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/autocmds.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/options.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/plugins.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/toggleterm.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ai/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/lsp/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/colorscheme/init.lua") end -- Leader key @@ -48,8 +47,8 @@ vim.api.nvim_create_user_command("Keymaps", "edit ~/.config/nvim/lua/core/keymap map("n", "", "zz", opts) map("n", "n", "nzzzv", opts) map("n", "N", "Nzzzv", opts) -map("x", "p", '"_dP', opts) -- paste without yanking -map("v", "<", "p", '"_dP', opts) -- paste without yanking +map("v", "<", "", ">gv", opts) map("v", "J", ":m '>+1gv=gv", opts) -- move lines map("v", "K", ":m '<-2gv=gv", opts) @@ -67,18 +66,18 @@ map("n", "bp", ":bprev", opts) --{{{ Terminal mappings local programs_map = { - gg = { cmd = "lazygit", display_name = "lazygit", direction = "tab", hidden = true }, - op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true }, - oP = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true }, - on = { cmd = "ncmpcpp", display_name = "ncmpcpp", direction = "tab", hidden = true }, - ob = { cmd = "btop", display_name = "btop", direction = "tab", hidden = true }, - od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true }, + gg = { cmd = "lazygit", display_name = "lazygit", direction = "tab", hidden = true }, + op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true }, + oP = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true }, + on = { cmd = "ncmpcpp", display_name = "ncmpcpp", direction = "tab", hidden = true }, + ob = { cmd = "btop", display_name = "btop", direction = "tab", hidden = true }, + od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true }, } for key, value in pairs(programs_map) do - map("n", "" .. key, function() - term_toggle(term_factory(value)) - end, opts) + map("n", "" .. key, function() + term_toggle(term_factory(value)) + end, opts) end map("v", "op", ":ToggleTerm name=ipython") @@ -87,27 +86,22 @@ map("v", "oP", ":ToggleTerm name=ipython-full") map("n", "", ":ToggleTerm name=toggleterm", opts) map("n", "tt", ":ToggleTerm name=toggleterm", opts) map("n", "tT", ":ToggleTerm name=toggleterm-full direction=tab", opts) +map("n", "ot", ":ToggleTerm name=toggleterm", opts) +map("n", "oT", ":ToggleTerm name=toggleterm-full direction=tab", opts) map("n", "ts", ":TermSelect", opts) map("n", "tv", ":ToggleTerm direction=vertical name=toggleterm-vert", opts) map("n", "th", ":ToggleTerm direction=horizontal name=toggleterm-hori", opts) +map("n", "ov", ":ToggleTerm direction=vertical name=toggleterm-vert", opts) +map("n", "oh", ":ToggleTerm direction=horizontal name=toggleterm-hori", opts) map("n", "tf", ":ToggleTerm name=toggleterm", opts) -map("n", "-", ":ToggleTerm direction='horizontal'", opts) -map("n", "|", ":ToggleTerm direction='vertical'", opts) +map("n", "-", ":ToggleTerm direction='horizontal'", opts) +map("n", "|", ":ToggleTerm direction='vertical'", opts) --- map("t", "tt", ":ToggleTerm", opts) --- map("t", "tf", ":ToggleTerm", opts) --- map("t", "-", ":ToggleTerm direction='horizontal'", opts) --- map("t", "|", ":ToggleTerm direction='vertical'", opts) --- map("t", "tv", ":ToggleTerm --name=toggleterm-vert", opts) --- map("t", "th", ":ToggleTerm --name=toggleterm-hori", opts) --- map("t", "", ":Toggleterm", opts) --- map("t", "", "", opts) --- map("n", "", "", opts) -- fix space in terminal function _G.set_terminal_keymaps() - local opts = { buffer = 0 } - map("t", "", [[]], opts) - map("t", "", [[]], opts) - -- map("t", "", "", { buffer = 0, silent = true }) -- fix space in terminal + local opts = { buffer = 0 } + map("t", "", [[]], opts) + map("t", "", [[]], opts) + -- map("t", "", "", { buffer = 0, silent = true }) -- fix space in terminal end -- if you only want these mappings for toggle term use term://*toggleterm#* instead @@ -128,56 +122,68 @@ map("n", "gl", vim.lsp.codelens.run, opts) map("n", "gr", ":Telescope lsp_references", opts) map("n", "gs", vim.lsp.buf.signature_help, opts) map("n", "K", vim.lsp.buf.hover, opts) ---}}} - ---{{{ Code Companion and Copilot -map("n", "oc", ":CodeCompanionChat") -map("n", "cc", ":CodeCompanionChat", opts) -map("n", "ct", ":CodeCompanionChat Toggle", opts) -map("n", "ci", ":CodeCompanion ", opts) -map("n", "cp", ":vert Copilot panel", opts) -map("n", "Ca", ":CodeCompanionActions", opts) -map("v", "Cc", ":CodeCompanionChat Add", opts) -map("v", "Ce", ":CodeCompanion /explain", opts) -map("v", "Cf", ":CodeCompanion /fix", opts) -map("v", "Cl", ":CodeCompanion /lsp", opts) -map("v", "CT", ":CodeCompanion /tests", opts) ---}}} - ---{{{ Diagnostics --- nnoremap cd :Telescope diagnostics --- nnoremap cDn :lua vim.diagnostic.goto_next() --- nnoremap cDp :lua vim.diagnostic.goto_prev() --- nnoremap cl :lua vim.diagnostic.setloclist() +map("n", "cd", ":Telescope lsp_definitions") +map("n", "ca", vim.lsp.buf.code_action) +map("n", "cci", ":Telescope lsp_incoming_calls") +map("n", "cco", ":Telescope lsp_outgoing_calls") +map("n", "ch", ":lua vim.lsp.buf.signature_help()") +map("n", "ci", ":Telescope lsp_implementations") +map("n", "cr", ":Telescope lsp_references") +map("n", "cR", ":lua vim.lsp.buf.rename()") +map("n", "cs", ":Telescope lsp_document_symbols") +map("n", "ct", ":Telescope lsp_type_definitions") +map("n", "cw", ":Telescope lsp_dynamic_workspace_symbols") map("n", "cd", ":Telescope diagnostics") +map("n", "cDs", ":Telescope diagnostics") map("n", "cDn", ":lua vim.diagnostic.goto_next()") map("n", "cDp", ":lua vim.diagnostic.goto_prev()") map("n", "cl", ":lua vim.diagnostic.setloclist()") --}}} +--{{{ Code Companion and Copilot +map("n", "cp", ":vert Copilot panel", opts) +map("n", "oc", ":CodeCompanionChat Toggle") +map("n", "Cc", ":CodeCompanionChat Toggle", opts) +map("n", "Ci", ":CodeCompanion ", opts) +map("n", "CT", ":CodeCompanionChat Toggle", opts) +map("n", "Ca", ":CodeCompanionActions", opts) +map("v", "Cc", ":CodeCompanionChat Add", opts) +map("v", "Ci", ":CodeCompanion /buffer ", notsilent) +map("v", "Ce", ":CodeCompanion /explain", notsilent) +map("v", "Cf", ":CodeCompanion /fix", notsilent) +map("v", "Cl", ":CodeCompanion /lsp", notsilent) +map("v", "Ct", ":CodeCompanion /tests", notsilent) +--}}} + --{{{ Telescope mappings +-- {{{ Telescope Finders map("n", "//", ":Telescope current_buffer_fuzzy_find", opts) map("n", "??", ":Telescope lsp_document_symbols", opts) map( - "n", - "fc", - ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical', - opts + "n", + "fc", + ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical', + opts ) -- map('n', 'ob', ':Telescope file_browser') -map("n", "ff", ":Telescope find_files", opts) -map("n", "sf", ":Telescope find_files", opts) +map( + "n", + "ff", + ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", + opts +) map("n", "fg", ":Telescope live_grep", opts) map( - "n", - "fG", - ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical', - opts + "n", + "fG", + ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical', + opts ) map("n", "fb", ":Telescope file_browser", opts) map("n", "fr", ":Telescope oldfiles", opts) +-- }}} ---{{{ Telescope Helper +--{{{ Telescope Help map("n", "hc", ":Telescope commands") map("n", "hv", ":Telescope vim_options") map("n", "hk", ":Telescope keymaps") @@ -186,13 +192,26 @@ map("n", "hm", ":Telescope man_pages") --}}} --{{{ Telescope Search -map("n", "sf", ":Telescope find_files") +map( + "n", + "sf", + ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", + opts +) +map("n", "sF", ":Telescope fidget") map("n", "sg", ":Telescope live_grep") map("n", "sh", ":Telescope command_history") map("n", "sm", ":Telescope man_pages") map("n", "s/", ":Telescope search_history") --}}} +--{{{ Git mappings +map("n", "gc", ":Telescope git_commits", opts) +map("n", "gf", ":Telescope git_files", opts) +--}}} + +map("n", "Q", ":Telescope cmdline", opts) +map("n", "", ":Telescope cmdline", opts) --}}} --{{{ File explorer and tools @@ -200,11 +219,6 @@ map("n", "n", ":NvimTreeToggle", opts) map("n", "D", ":Dotenv .env", opts) --}}} ---{{{ Git mappings -map("n", "gc", ":Telescope git_commits", opts) -map("n", "gf", ":Telescope git_files", opts) ---}}} - --{{{ Misc utilities map("n", "x", "!chmod +x %", opts) map("n", "y", '"+', opts) @@ -222,21 +236,6 @@ map("n", "gpi", ':lua require("goto-preview").goto_preview_implementation()' map("n", "wa", vim.lsp.buf.add_workspace_folder, opts) map("n", "wr", vim.lsp.buf.remove_workspace_folder, opts) map("n", "wl", function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) --}}} - ---{{{ LSP -map("n", "ld", ":Telescope lsp_definitions") -map("n", "lD", ":Telescope diagnostic") -map("n", "la", vim.lsp.buf.code_action) -map("n", "lci", ":Telescope lsp_incoming_calls") -map("n", "lco", ":Telescope lsp_outgoing_calls") -map("n", "lh", ":lua vim.lsp.buf.signature_help()") -map("n", "li", ":Telescope lsp_implementations") -map("n", "lr", ":Telescope lsp_references") -map("n", "lR", ":lua vim.lsp.buf.rename()") -map("n", "ls", ":Telescope lsp_document_symbols") -map("n", "lt", ":Telescope lsp_type_definitions") -map("n", "lw", ":Telescope lsp_dynamic_workspace_symbols") ---}}} diff --git a/lua/core/lazy.lua b/lua/core/lazy.lua new file mode 100644 index 0000000..a9e5f49 --- /dev/null +++ b/lua/core/lazy.lua @@ -0,0 +1,37 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("core.options") +require("core.autocmds") +require("core.highlights") + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) + +vim.cmd("colorscheme catppuccin") +require("core.keymaps") +require("core.lsp-notifications") diff --git a/lua/core/lsp-notifications.lua b/lua/core/lsp-notifications.lua new file mode 100644 index 0000000..f59158c --- /dev/null +++ b/lua/core/lsp-notifications.lua @@ -0,0 +1,98 @@ +-- Utility functions shared between progress reports for LSP and DAP +vim.notify = require("notify") + +local client_notifs = {} + +local function get_notif_data(client_id, token) + if not client_notifs[client_id] then + client_notifs[client_id] = {} + end + + if not client_notifs[client_id][token] then + client_notifs[client_id][token] = {} + end + + return client_notifs[client_id][token] +end + +local spinner_frames = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" } + +local function update_spinner(client_id, token) + local notif_data = get_notif_data(client_id, token) + + if notif_data.spinner then + local new_spinner = (notif_data.spinner + 1) % #spinner_frames + notif_data.spinner = new_spinner + + notif_data.notification = vim.notify("", nil, { + hide_from_history = true, + icon = spinner_frames[new_spinner], + replace = notif_data.notification, + }) + + vim.defer_fn(function() + update_spinner(client_id, token) + end, 100) + end +end + +local function format_title(title, client_name) + return client_name .. (#title > 0 and ": " .. title or "") +end + +local function format_message(message, percentage) + return (percentage and percentage .. "%\t" or "") .. (message or "") +end + +-- LSP integration +-- Make sure to also have the snippet with the common helper functions in your config! + +vim.lsp.handlers["$/progress"] = function(_, result, ctx) + local client_id = ctx.client_id + + local val = result.value + + if not val.kind then + return + end + + local notif_data = get_notif_data(client_id, result.token) + + if val.kind == "begin" then + local message = format_message(val.message, val.percentage) + + notif_data.notification = vim.notify(message, "info", { + title = format_title(val.title, vim.lsp.get_client_by_id(client_id).name), + icon = spinner_frames[1], + timeout = false, + hide_from_history = false, + }) + + notif_data.spinner = 1 + update_spinner(client_id, result.token) + elseif val.kind == "report" and notif_data then + notif_data.notification = vim.notify(format_message(val.message, val.percentage), "info", { + replace = notif_data.notification, + hide_from_history = false, + }) + elseif val.kind == "end" and notif_data then + notif_data.notification = vim.notify(val.message and format_message(val.message) or "Complete", "info", { + icon = "", + replace = notif_data.notification, + timeout = 3000, + }) + + notif_data.spinner = nil + end +end + +-- table from lsp severity to vim severity. +local severity = { + "error", + "warn", + "info", + "info", -- map both hint and info to info? +} +vim.lsp.handlers["window/showMessage"] = function(err, method, params, client_id) + vim.notify(method.message, severity[params.type]) +end diff --git a/lua/core/options.lua b/lua/core/options.lua index d2d9cf4..3c61a6a 100644 --- a/lua/core/options.lua +++ b/lua/core/options.lua @@ -4,19 +4,18 @@ local A = vim.api local l = vim.lsp g.mapleader = " " -g.maplocalleader = ',' -g.fzf_command = -'fzf --height 90% --width=85% --layout=reverse --preview "bat --color=always {}"' +g.maplocalleader = "," +g.fzf_command = 'fzf --height 90% --width=85% --layout=reverse --preview "bat --color=always {}"' o.completeopt = "menu,menuone,noselect" o.showmode = false o.termguicolors = true -o.background = 'dark' -o.mouse = 'a' -o.syntax = 'on' +o.background = "dark" +o.mouse = "a" +o.syntax = "on" o.laststatus = 3 o.number = true o.relativenumber = true -o.colorcolumn = '80' +o.colorcolumn = "80" o.textwidth = 80 o.shiftwidth = 4 o.expandtab = true @@ -31,33 +30,49 @@ o.splitright = true o.cursorline = true o.scrolloff = 8 o.sidescrolloff = 8 -o.wildmenu = true -o.wildignore = -'.git,.hg,.svn,CVS,.DS_Store,.idea,.vscode,.vscode-test,node_modules' +o.wildmenu = false --cmp +o.wildmode = "" --cmp +o.wildoptions = "" +o.wildignore = ".git,.hg,.svn,CVS,.DS_Store,.idea,.vscode,.vscode-test,node_modules" o.showmatch = true o.list = true -o.listchars = 'tab:»·,trail:·,nbsp:·,extends:>,precedes:<' -o.encoding = 'utf-8' -o.guifont = 'JetBrainsMono Nerd Font 14' +o.listchars = "tab:»·,trail:·,nbsp:·,extends:>,precedes:<" +o.encoding = "utf-8" +o.guifont = "JetBrainsMono Nerd Font 14" o.expandtab = true o.hidden = true o.cmdheight = 1 o.updatetime = 300 o.timeoutlen = 500 o.pumwidth = 35 -o.foldmethod = 'marker' --- g.colorscheme = 'catppuccin-macchiato' +o.foldmethod = "marker" g.db_ui_use_nerd_fonts = 1 -vim.cmd("colorscheme catppuccin-macchiato") +-- vim.cmd.colorscheme = 'catppuccin-macchiato' +vim.cmd.colorscheme = "catppuccin" local border = { - { "╭", "FloatBorder" }, { "─", "FloatBorder" }, { "╮", "FloatBorder" }, - { "│", "FloatBorder" }, { "╯", "FloatBorder" }, { "─", "FloatBorder" }, - { "╰", "FloatBorder" }, { "│", "FloatBorder" } + { "╭", "FloatBorder" }, + { "─", "FloatBorder" }, + { "╮", "FloatBorder" }, + { "│", "FloatBorder" }, + { "╯", "FloatBorder" }, + { "─", "FloatBorder" }, + { "╰", "FloatBorder" }, + { "│", "FloatBorder" }, } -l.handlers["textDocument/signatureHelp"] = - vim.lsp.with(vim.lsp.handlers.signature_help, { border = border }) -l.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, - { border = border }) +l.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border }) +l.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border }) + +-- lsp status +-- table from lsp severity to vim severity. +local severity = { + "error", + "warn", + "info", + "info", -- map both hint and info to info? +} +vim.lsp.handlers["window/showMessage"] = function(err, method, params, client_id) + vim.notify(method.message, severity[params.type]) +end diff --git a/lua/core/plugins.lua b/lua/core/plugins.lua deleted file mode 100644 index c4b7db0..0000000 --- a/lua/core/plugins.lua +++ /dev/null @@ -1,354 +0,0 @@ -local lsp_dev = {} - -vim.cmd([[packadd packer.nvim]]) -require("packer").startup(function(use) - use("wbthomason/packer.nvim") - use("nvim-lua/plenary.nvim") - use({ - "nvim-treesitter/nvim-treesitter", - run = function() - require("nvim-treesitter.install").update({ with_sync = true }) - end, - }) - use({ "nvim-treesitter/nvim-treesitter-context" }) - - use({ - "kndndrj/nvim-dbee", - requires = { - "MunifTanjim/nui.nvim", - }, - run = function() - -- Install tries to automatically detect the install method. - -- if it fails, try calling it with one of these parameters: - -- "curl", "wget", "bitsadmin", "go" - require("dbee").install() - end, - config = function() - require("dbee").setup( --[[optional config]]) - end, - }) - - -- TELESCOPE {{{ - - use({ "nvim-telescope/telescope.nvim" }) - use({ "nvim-telescope/telescope-file-browser.nvim" }) - use("nvim-telescope/telescope-dap.nvim") - use({ "ghassan0/telescope-glyph.nvim" }) - use({ "nat-418/telescope-color-names.nvim" }) - use({ - "nvim-telescope/telescope-fzf-native.nvim", - run = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build", - }) - - -- }}} - - -- LSP/DEV {{{ - use({ - "zbirenbaum/copilot.lua", - cmd = "Copilot", - event = "InsertEnter", - config = function() - require("copilot").setup({ - panel = { - enabled = true, - auto_refresh = false, - keymap = { - jump_prev = "[[", - jump_next = "]]", - accept = "", - refresh = "gr", - open = "", - }, - layout = { - position = "bottom", -- | top | left | right | horizontal | vertical - ratio = 0.4, - }, - }, - suggestion = { - enabled = false, - auto_trigger = false, - hide_during_completion = true, - debounce = 75, - keymap = { - accept = "", - accept_word = false, - accept_line = false, - next = "", - prev = "", - dismiss = "", - }, - }, - -- filetypes = { - -- yaml = false, - -- markdown = false, - -- help = false, - -- gitcommit = false, - -- gitrebase = false, - -- hgcommit = false, - -- svn = false, - -- cvs = false, - -- ["."] = false, - -- }, - copilot_node_command = "node", -- Node.js version must be > 18.x - server_opts_overrides = { - trace = "verbose", - settings = { - advanced = { - listCount = 10, -- #completions for panel - inlineSuggestCount = 3, -- #completions for getCompletions - }, - }, - }, - }) - end, - }) - use({ "zbirenbaum/copilot-cmp" }) - - use({ - "olimorris/codecompanion.nvim", - requires = { - "nvim-lua/plenary.nvim", - "nvim-treesitter/nvim-treesitter", - "j-hui/fidget.nvim", - }, - init = function() - require("plugins.codecompanion.fidget-spinner"):init() - end, - }) - - use({ - "iamcco/markdown-preview.nvim", - run = function() - vim.fn["mkdp#util#install"]() - end, - }) - use({ - "L3MON4D3/LuaSnip", - -- tag = "v2.*", - run = "make install_jsregexp", - dependencies = { "rafamadriz/friendly-snippets" }, - }) - use({ "folke/neodev.nvim" }) - use({ "saadparwaiz1/cmp_luasnip" }) - use({ "hrsh7th/cmp-buffer" }) - use({ "hrsh7th/cmp-cmdline" }) - use({ "hrsh7th/cmp-nvim-lsp" }) - use({ "hrsh7th/cmp-nvim-lsp-document-symbol" }) - use({ "hrsh7th/cmp-nvim-lsp-signature-help" }) - use({ "hrsh7th/cmp-nvim-lua" }) - use({ "hrsh7th/cmp-path" }) - use({ "hrsh7th/nvim-cmp" }) - use({ "https://git.sr.ht/~whynothugo/lsp_lines.nvim" }) - -- use { 'jose-elias-alvarez/null-ls.nvim' } - use({ "nvimtools/none-ls.nvim" }) - use({ "neovim/nvim-lspconfig" }) - use({ "onsails/lspkind-nvim" }) - use({ - "https://git.sr.ht/~nedia/auto-format.nvim", - config = function() - require("auto-format").setup() - end, - }) - use("mfussenegger/nvim-lint") - - use("nvim-neotest/nvim-nio") - -- }}} - - -- DADBOD {{{ - - -- use { 'tpope/vim-dadbod' } - -- use { 'kristijanhusak/vim-dadbod-ui' } - -- use { 'kristijanhusak/vim-dadbod-completion' } - - -- }}} - - -- UI {{{ - - use({ "akinsho/toggleterm.nvim", tag = "*" }) - use({ "HiPhish/rainbow-delimiters.nvim" }) - use({ - "lukas-reineke/indent-blankline.nvim", - }) - - --{{{ DASHBOARD - use({ - "nvimdev/dashboard-nvim", - event = "VimEnter", - config = function() - require("dashboard").setup({ - theme = "hyper", - config = { - week_header = { - enable = true, - }, - shortcut = { - { desc = "󰊳 Update", group = "@property", action = "Lazy update", key = "u" }, - { - icon = " ", - icon_hl = "@variable", - desc = "Files", - group = "Label", - action = "Telescope find_files", - key = "f", - }, - { - desc = " Apps", - group = "DiagnosticHint", - action = "Telescope app", - key = "a", - }, - { - desc = " dotfiles", - group = "Number", - action = "Telescope ~/.config", - key = "d", - }, - }, - }, - }) - end, - requires = { "nvim-tree/nvim-web-devicons" }, - }) - --}}} - - use({ - "j-hui/fidget.nvim", - tag = "legacy", - config = function() - require("fidget").setup({ - -- options - }) - end, - }) - use({ - "nvim-lualine/lualine.nvim", - requires = { "kyazdani42/nvim-web-devicons", opt = true }, - }) - use({ "AndreM222/copilot-lualine" }) - use({ "kyazdani42/nvim-web-devicons" }) - use({ "norcalli/nvim-colorizer.lua" }) - use({ "akinsho/nvim-bufferline.lua" }) - use({ "andweeb/presence.nvim" }) - use({ "folke/which-key.nvim" }) - use({ "kyazdani42/nvim-tree.lua" }) - use({ "lewis6991/gitsigns.nvim" }) - use({ "rcarriga/nvim-notify" }) - use({ "stevearc/dressing.nvim" }) - use({ "echasnovski/mini.nvim" }) - use({ - "windwp/nvim-autopairs", - event = "InsertEnter", - config = function() - local npairs = require("nvim-autopairs") - local Rule = require("nvim-autopairs.rule") - local cmp_autopairs = require("nvim-autopairs.completion.cmp") - local cmp = require("cmp") - cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) - - npairs.setup({ - disable_filetype = { "TelescopePrompt", "spectre_panel", "Terminal", "terminal" }, - check_ts = true, - ts_config = { - lua = { "string" }, -- it will not add a pair on that treesitter node - javascript = { "template_string" }, - java = false, -- don't check treesitter on java - }, - }) - - local ts_conds = require("nvim-autopairs.ts-conds") - - -- press % => %% only while inside a comment or string - npairs.add_rules({ - Rule("%", "%", "lua"):with_pair(ts_conds.is_ts_node({ "string", "comment" })), - Rule("$", "$", "lua"):with_pair(ts_conds.is_not_ts_node({ "function" })), - }) - end, - }) - - -- }}} - - -- EXTRAS {{{ - - use({ - "nvim-neorg/neorg", - -- tag = "*", - ft = "norg", - after = "nvim-treesitter", -- You may want to specify Telescope here as well - config = function() - require("neorg").setup({ - load = { - ["core.defaults"] = {}, -- Loads default behaviour - ["core.concealer"] = {}, -- Adds pretty icons to your documents - ["core.completion"] = { config = { engine = "nvim-cmp" } }, -- Adds completion - ["core.dirman"] = { -- Manages Neorg workspaces - config = { workspaces = { notes = "~/notes" } }, - }, - }, - }) - end, - }) - use("pechorin/any-jump.vim") - use("tpope/vim-commentary") - use("tpope/vim-dotenv") - use("tpope/vim-surround") - -- use 'voldikss/vim-floaterm' - use("wakatime/vim-wakatime") - use("rmagatti/goto-preview") - - -- }}} - - -- COLORSCHEMES {{{ - - use({ "Mofiqul/dracula.nvim" }) - -- use({ - -- 'NTBBloodbath/doom-one.nvim', - -- setup = function() - -- -- Add color to cursor - -- vim.g.doom_one_cursor_coloring = false - -- -- Set :terminal colors - -- vim.g.doom_one_terminal_colors = true - -- -- Enable italic comments - -- vim.g.doom_one_italic_comments = false - -- -- Enable TS support - -- vim.g.doom_one_enable_treesitter = true - -- -- Color whole diagnostic text or only underline - -- vim.g.doom_one_diagnostics_text_color = false - -- -- Enable transparent background - -- vim.g.doom_one_transparent_background = false - - -- -- Pumblend transparency - -- vim.g.doom_one_pumblend_enable = false - -- vim.g.doom_one_pumblend_transparency = 20 - - -- -- Plugins integration - -- vim.g.doom_one_plugin_neorg = true - -- vim.g.doom_one_plugin_barbar = false - -- vim.g.doom_one_plugin_telescope = true - -- vim.g.doom_one_plugin_neogit = true - -- vim.g.doom_one_plugin_nvim_tree = true - -- vim.g.doom_one_plugin_dashboard = true - -- vim.g.doom_one_plugin_startify = true - -- vim.g.doom_one_plugin_whichkey = true - -- vim.g.doom_one_plugin_indent_blankline = true - -- vim.g.doom_one_plugin_vim_illuminate = false - -- vim.g.doom_one_plugin_lspsaga = false - -- end - -- config = function() - -- vim.cmd("colorscheme doom-one") - -- vim.cmd( - -- "highlight Pmenu ctermfg=white ctermbg=black gui=NONE guifg=white guibg=#282C34") - -- vim.cmd("highlight PmenuSel guifg=purple guibg=red") - -- end - -- }) - use({ "olimorris/onedarkpro.nvim" }) - - use({ - "catppuccin/nvim", - as = "catppuccin", - config = function() - vim.cmd("colorscheme catppuccin-macchiato") - end, - }) - - -- }}} -end) diff --git a/lua/plugins/ai/codecompanion.lua b/lua/plugins/ai/codecompanion.lua deleted file mode 100644 index 8f93248..0000000 --- a/lua/plugins/ai/codecompanion.lua +++ /dev/null @@ -1,15 +0,0 @@ -require("codecompanion").setup({ - strategies = { - chat = { - adapter = "copilot", - }, - inline = { - adapter = "copilot", - }, - }, - display = { - action_palette = { - provider = "telescope" - } - } -}) diff --git a/lua/plugins/ai/codecompanion/fidget-spinner.lua b/lua/plugins/ai/codecompanion/fidget-spinner.lua deleted file mode 100644 index 35cb025..0000000 --- a/lua/plugins/ai/codecompanion/fidget-spinner.lua +++ /dev/null @@ -1,71 +0,0 @@ -local progress = require("fidget.progress") - -local M = {} - -function M:init() - local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {}) - - vim.api.nvim_create_autocmd({ "User" }, { - pattern = "CodeCompanionRequestStarted", - group = group, - callback = function(request) - local handle = M:create_progress_handle(request) - M:store_progress_handle(request.data.id, handle) - end, - }) - - vim.api.nvim_create_autocmd({ "User" }, { - pattern = "CodeCompanionRequestFinished", - group = group, - callback = function(request) - local handle = M:pop_progress_handle(request.data.id) - if handle then - M:report_exit_status(handle, request) - handle:finish() - end - end, - }) -end - -M.handles = {} - -function M:store_progress_handle(id, handle) - M.handles[id] = handle -end - -function M:pop_progress_handle(id) - local handle = M.handles[id] - M.handles[id] = nil - return handle -end - -function M:create_progress_handle(request) - return progress.handle.create({ - title = " Requesting assistance (" .. request.data.strategy .. ")", - message = "In progress...", - lsp_client = { - name = M:llm_role_title(request.data.adapter), - }, - }) -end - -function M:llm_role_title(adapter) - local parts = {} - table.insert(parts, adapter.formatted_name) - if adapter.model and adapter.model ~= "" then - table.insert(parts, "(" .. adapter.model .. ")") - end - return table.concat(parts, " ") -end - -function M:report_exit_status(handle, request) - if request.data.status == "success" then - handle.message = "Completed" - elseif request.data.status == "error" then - handle.message = " Error" - else - handle.message = "󰜺 Cancelled" - end -end - -return M diff --git a/lua/plugins/ai/init.lua b/lua/plugins/ai/init.lua deleted file mode 100644 index e75e650..0000000 --- a/lua/plugins/ai/init.lua +++ /dev/null @@ -1 +0,0 @@ -require("plugins.ai.codecompanion") \ No newline at end of file diff --git a/lua/plugins/anyjump.lua b/lua/plugins/anyjump.lua new file mode 100644 index 0000000..b83ed32 --- /dev/null +++ b/lua/plugins/anyjump.lua @@ -0,0 +1 @@ +return { "pechorin/any-jump.vim" } diff --git a/lua/plugins/auto-format.lua b/lua/plugins/auto-format.lua new file mode 100644 index 0000000..f25025c --- /dev/null +++ b/lua/plugins/auto-format.lua @@ -0,0 +1,7 @@ +return { + "https://git.sr.ht/~nedia/auto-format.nvim", + event = "BufWinEnter", + config = function() + require("auto-format").setup() + end +} diff --git a/lua/plugins/bufferline.lua b/lua/plugins/bufferline.lua new file mode 100644 index 0000000..c739ab0 --- /dev/null +++ b/lua/plugins/bufferline.lua @@ -0,0 +1,100 @@ +return { + "akinsho/bufferline.nvim", + version = "*", + dependencies = { "nvim-tree/nvim-web-devicons", "catppuccin/nvim" }, + opts = { + options = { + -- numbers = function(opts) + -- return string.format("%s", opts.id) + -- end, + numbers = function(opts) + return "" + end, + -- number_style = "superscript" | "subscript" | "" | { "none", "subscript" }, -- buffer_id at index 1, ordinal at index 2 + -- number_style = "none", + close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" + right_mouse_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" + left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" + middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" + -- NOTE: this plugin is designed with this icon in mind, + -- and so changing this is NOT recommended, this is intended + -- as an escape hatch for people who cannot bear it for whatever reason + indicator = { + -- icon = "▎", + style = "underline", + }, + -- indicator_style = "▎", + buffer_close_icon = "", + modified_icon = "●", + close_icon = "", + left_trunc_marker = "", + right_trunc_marker = "", + --- name_formatter can be used to change the buffer's label in the bufferline. + --- Please note some names can/will break the + --- bufferline so use this at your discretion knowing that it has + --- some limitations that will *NOT* be fixed. + name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" + -- remove extension from markdown files for example + if buf.name:match("%.md") then + return vim.fn.fnamemodify(buf.name, ":t:r") + end + end, + max_name_length = 18, + max_prefix_length = 15, -- prefix used when a buffer is de-duplicated + tab_size = 18, + -- diagnostics = false | "nvim_lsp" | "coc", + diagnostics = "nvim_lsp", + diagnostics_update_in_insert = false, + diagnostics_indicator = function(count, level, diagnostics_dict, context) + local s = " " + for e, n in pairs(diagnostics_dict) do + local sym = e == "error" and " " + or e == "hint" and " " + or (e == "warning" and " " or "") + s = s .. n .. sym + end + return s + end, + custom_filter = function(buf_number, buf_numbers) + -- filter out filetypes you don't want to see + if vim.bo[buf_number].filetype ~= "" then + return true + end + -- filter out by buffer name + if vim.fn.bufname(buf_number) ~= "" then + return true + end + -- filter out based on arbitrary rules + -- e.g. filter out vim wiki buffer from tabline in your work repo + if vim.fn.getcwd() == "" and vim.bo[buf_number].filetype ~= "wiki" then + return true + end + -- filter out by it's index number in list (don't show first buffer) + if buf_numbers[1] ~= buf_number then + return true + end + end, + -- offsets = {{filetype = "NvimTree", text = "File Explorer" | function , text_align = "left" | "center" | "right"}}, + -- offsets = text_align = "left" | "center" | "right"}}, + show_buffer_icons = true, + show_buffer_close_icons = true, + show_close_icon = false, + show_tab_indicators = true, + persist_buffer_sort = false, -- whether or not custom sorted buffers should persist + -- can also be a table containing 2 custom separators + -- [focused and unfocused]. eg: { '|', '|' } + -- separator_style = "slant" | "thick" | "thin" | { 'any', 'any' }, + separator_style = "slant", + enforce_regular_tabs = false, + always_show_bufferline = true, + -- sort_by = 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b) + sort_by = "id", + -- highlights = require("catppuccin.groups.integrations.bufferline").get(), + hover = { + enabled = true, + delay = 200, + reveal = { "close" }, + }, + }, + }, +} diff --git a/lua/plugins/catppuccin.lua b/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..7e29c9f --- /dev/null +++ b/lua/plugins/catppuccin.lua @@ -0,0 +1,56 @@ +return { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + opts = { + flavour = "macchiato", -- latte, frappe, macchiato, mocha + term_colors = true, -- sets terminal colors (e.g. `g:terminal_color_0`) + integrations = { + cmp = true, + gitsigns = true, + nvimtree = true, + mini = { + enabled = true, + indentscope_color = "", + }, + bufferline = true, + dashboard = true, + fidget = true, + indent_blankline = { + enabled = true, + scope_color = "lavendar", -- catppuccin color (eg. `lavender`) Default: text + colored_indent_levels = true, + }, + copilot_vim = true, + native_lsp = { + enabled = true, + virtual_text = { + errors = { "italic" }, + hints = { "italic" }, + warnings = { "italic" }, + information = { "italic" }, + ok = { "italic" }, + }, + underlines = { + errors = { "underline" }, + hints = { "underline" }, + warnings = { "underline" }, + information = { "underline" }, + ok = { "underline" }, + }, + inlay_hints = { + background = true, + }, + }, + notify = true, + treesitter = true, + rainbow_delimiters = true, + telescope = { + enabled = true, + -- style = "nvchad" + }, + which_key = true + -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) + } + } +} diff --git a/lua/plugins/codecompanion.lua b/lua/plugins/codecompanion.lua new file mode 100644 index 0000000..259715c --- /dev/null +++ b/lua/plugins/codecompanion.lua @@ -0,0 +1,36 @@ +return { + "olimorris/codecompanion.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + "j-hui/fidget.nvim", + }, + opts = { + strategies = { + chat = { + adapter = "copilot", + }, + inline = { + adapter = "copilot", + }, + }, + display = { + action_palette = { + provider = "default", + width = 150, + heigth = 85, + }, + chat = { + layout = "vertical", + border = "single", + }, + diff = { + enabled = true, + provider = "mini_diff", + }, + }, + }, + init = function() + require("plugins.codecompanion.fidget-spinner"):init() + end, +} diff --git a/lua/plugins/codecompanion/fidget-spinner.lua b/lua/plugins/codecompanion/fidget-spinner.lua new file mode 100644 index 0000000..05066e2 --- /dev/null +++ b/lua/plugins/codecompanion/fidget-spinner.lua @@ -0,0 +1,71 @@ +local progress = require("fidget.progress") + +local M = {} + +function M:init() + local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {}) + + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequestStarted", + group = group, + callback = function(request) + local handle = M:create_progress_handle(request) + M:store_progress_handle(request.data.id, handle) + end, + }) + + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequestFinished", + group = group, + callback = function(request) + local handle = M:pop_progress_handle(request.data.id) + if handle then + M:report_exit_status(handle, request) + handle:finish() + end + end, + }) +end + +M.handles = {} + +function M:store_progress_handle(id, handle) + M.handles[id] = handle +end + +function M:pop_progress_handle(id) + local handle = M.handles[id] + M.handles[id] = nil + return handle +end + +function M:create_progress_handle(request) + return progress.handle.create({ + title = " Requesting assistance (" .. request.data.strategy .. ")", + message = "In progress...", + lsp_client = { + name = M:llm_role_title(request.data.adapter), + }, + }) +end + +function M:llm_role_title(adapter) + local parts = {} + table.insert(parts, adapter.formatted_name) + if adapter.model and adapter.model ~= "" then + table.insert(parts, "(" .. adapter.model .. ")") + end + return table.concat(parts, " ") +end + +function M:report_exit_status(handle, request) + if request.data.status == "success" then + handle.message = "Completed" + elseif request.data.status == "error" then + handle.message = " Error" + else + handle.message = "󰜺 Cancelled" + end +end + +return M diff --git a/lua/plugins/colorscheme/catppuccin.lua b/lua/plugins/colorscheme/catppuccin.lua deleted file mode 100644 index d6281ac..0000000 --- a/lua/plugins/colorscheme/catppuccin.lua +++ /dev/null @@ -1,68 +0,0 @@ -require("catppuccin").setup({ - flavour = "macchiato", -- latte, frappe, macchiato, mocha - background = { -- :h background - light = "latte", - -- dark = "mocha", - dark = "macchiato", - }, - transparent_background = false, - show_end_of_buffer = false, -- show the '~' characters after the end of buffers - term_colors = false, - dim_inactive = { - enabled = false, - shade = "dark", - percentage = 0.15, - }, - no_italic = false, -- Force no italic - no_bold = false, -- Force no bold - styles = { - comments = { "italic" }, - conditionals = { "italic" }, - loops = { "bold" }, - functions = { "bold", "italic" }, - keywords = { "bold" }, - strings = { "italic" }, - variables = { "italic" }, - numbers = {}, - booleans = {}, - properties = {}, - types = { "bold" }, - operators = {}, - }, - color_overrides = {}, - custom_highlights = {}, - integrations = { - cmp = true, - gitsigns = true, - treesitter = true, - nvimtree = true, - telescope = true, - which_key = true, - notify = false, - mini = false - -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) - }, - native_lsp = { - enabled = true, - virtual_text = { - errors = { "italic" }, - hints = { "italic" }, - warnings = { "italic" }, - information = { "italic" }, - }, - underlines = { - errors = { "underline" }, - hints = { "underline" }, - warnings = { "underline" }, - information = { "underline" }, - }, - }, - -}) - -require("nvim-treesitter.configs").setup { - highlight = { - enable = true, - additional_vim_regex_highlighting = false - }, -} diff --git a/lua/plugins/colorscheme/dracula.lua b/lua/plugins/colorscheme/dracula.lua deleted file mode 100644 index e871520..0000000 --- a/lua/plugins/colorscheme/dracula.lua +++ /dev/null @@ -1,33 +0,0 @@ --- customize dracula color palette -vim.g.dracula_colors = { - bg = "#282A36", - fg = "#F8F8F2", - selection = "#44475A", - comment = "#6272A4", - red = "#FF5555", - orange = "#FFB86C", - yellow = "#F1FA8C", - green = "#50fa7b", - purple = "#BD93F9", - cyan = "#8BE9FD", - pink = "#FF79C6", - bright_red = "#FF6E6E", - bright_green = "#69FF94", - bright_yellow = "#FFFFA5", - bright_blue = "#D6ACFF", - bright_magenta = "#FF92DF", - bright_cyan = "#A4FFFF", - bright_white = "#FFFFFF", - menu = "#21222C", - visual = "#3E4452", - gutter_fg = "#4B5263", - nontext = "#3B4048", -} --- show the '~' characters after the end of buffers -vim.g.dracula_show_end_of_buffer = true --- use transparent background -vim.g.dracula_transparent_bg = true --- set custom lualine background color -vim.g.dracula_lualine_bg_color = "#44475a" --- set italic comment -vim.g.dracula_italic_comment = true diff --git a/lua/plugins/colorscheme/init.lua b/lua/plugins/colorscheme/init.lua deleted file mode 100644 index 335c51a..0000000 --- a/lua/plugins/colorscheme/init.lua +++ /dev/null @@ -1,3 +0,0 @@ -require("plugins.colorscheme.catppuccin") -require("plugins.colorscheme.dracula") -require("plugins.colorscheme.onedarkpro") \ No newline at end of file diff --git a/lua/plugins/colorscheme/onedarkpro.lua b/lua/plugins/colorscheme/onedarkpro.lua deleted file mode 100644 index 0ff6453..0000000 --- a/lua/plugins/colorscheme/onedarkpro.lua +++ /dev/null @@ -1,74 +0,0 @@ -require("onedarkpro").setup({ - colors = {}, -- Override default colors or create your own - filetypes = { -- Override which filetype highlight groups are loaded - java = true, - javascript = true, - lua = true, - markdown = true, - php = true, - python = true, - ruby = true, - rust = true, - toml = true, - typescript = true, - typescriptreact = true, - vue = true, - yaml = true, - }, - plugins = { -- Override which plugin highlight groups are loaded - aerial = false, - barbar = false, - copilot = true, - dashboard = true, - gitsigns = true, - hop = false, - indentline = false, - leap = false, - lsp_saga = false, - marks = true, - neotest = false, - neo_tree = true, - nvim_cmp = true, - nvim_bqf = false, - nvim_dap = true, - nvim_dap_ui = true, - nvim_hlslens = true, - nvim_lsp = true, - nvim_navic = false, - nvim_notify = true, - nvim_tree = true, - nvim_ts_rainbow = true, - op_nvim = false, - packer = true, - polygot = true, - startify = false, - telescope = true, - toggleterm = true, - treesitter = true, - trouble = true, - vim_ultest = false, - which_key = true, - }, - highlights = {}, -- Override default highlight groups or create your own - styles = { -- For example, to apply bold and italic, use "bold,italic" - types = "bold", -- Style that is applied to types - methods = "NONE", -- Style that is applied to methods - numbers = "NONE", -- Style that is applied to numbers - strings = "italic", -- Style that is applied to strings - comments = "italic", -- Style that is applied to comments - keywords = "bold,italic", -- Style that is applied to keywords - constants = "bold", -- Style that is applied to constants - functions = "bold,italic", -- Style that is applied to functions - operators = "NONE", -- Style that is applied to operators - variables = "italic", -- Style that is applied to variables - parameters = "italic", -- Style that is applied to parameters - conditionals = "NONE", -- Style that is applied to conditionals - virtual_text = "italic", -- Style that is applied to virtual text - }, - options = { - cursorline = true, -- Use cursorline highlighting? - transparency = false, -- Use a transparent background? - terminal_colors = true, -- Use the theme's colors for Neovim's :terminal? - highlight_inactive_windows = false, -- When the window is out of focus, change the normal background? - } -}) diff --git a/lua/plugins/copilot-cmp.lua b/lua/plugins/copilot-cmp.lua new file mode 100644 index 0000000..7fd24ba --- /dev/null +++ b/lua/plugins/copilot-cmp.lua @@ -0,0 +1,7 @@ +return { + "zbirenbaum/copilot-cmp", + opts = { + suggestion = { enabled = false }, + panel = { enabled = false }, + }, +} diff --git a/lua/plugins/copilot-lualine.lua b/lua/plugins/copilot-lualine.lua new file mode 100644 index 0000000..44de183 --- /dev/null +++ b/lua/plugins/copilot-lualine.lua @@ -0,0 +1,3 @@ +return { + 'AndreM222/copilot-lualine' +} diff --git a/lua/plugins/copilot.lua b/lua/plugins/copilot.lua new file mode 100644 index 0000000..13b41aa --- /dev/null +++ b/lua/plugins/copilot.lua @@ -0,0 +1,55 @@ +return { + "zbirenbaum/copilot.lua", + opts = { + panel = { + enabled = true, + auto_refresh = false, + keymap = { + jump_prev = "[[", + jump_next = "]]", + accept = "", + refresh = "gr", + open = "", + }, + layout = { + position = "bottom", -- | top | left | right | horizontal | vertical + ratio = 0.4, + }, + }, + suggestion = { + enabled = false, + auto_trigger = false, + hide_during_completion = true, + debounce = 75, + keymap = { + accept = "", + accept_word = false, + accept_line = false, + next = "", + prev = "", + dismiss = "", + }, + }, + -- filetypes = { + -- yaml = false, + -- markdown = false, + -- help = false, + -- gitcommit = false, + -- gitrebase = false, + -- hgcommit = false, + -- svn = false, + -- cvs = false, + -- ["."] = false, + -- }, + -- copilot_node_command = "node", -- Node.js version must be > 18.x + server_opts_overrides = { + trace = "verbose", + settings = { + advanced = { + listCount = 10, -- #completions for panel + inlineSuggestCount = 5, -- #completions for getCompletions + }, + }, + }, + }, +} diff --git a/lua/plugins/dashboard.lua b/lua/plugins/dashboard.lua new file mode 100644 index 0000000..029b550 --- /dev/null +++ b/lua/plugins/dashboard.lua @@ -0,0 +1,36 @@ +return { + "nvimdev/dashboard-nvim", + event = "VimEnter", + opts = { + theme = "hyper", + config = { + week_header = { + enable = true, + }, + shortcut = { + { desc = "󰊳 Update", group = "@property", action = "Lazy update", key = "u" }, + { + icon = " ", + icon_hl = "@variable", + desc = "Files", + group = "Label", + action = "Telescope find_files", + key = "f", + }, + { + desc = " Apps", + group = "DiagnosticHint", + action = "Telescope app", + key = "a", + }, + { + desc = " dotfiles", + group = "Number", + action = "Telescope ~/.config", + key = "d", + }, + }, + }, + }, + depends = { "nvim-tree/nvim-web-devicons" }, +} diff --git a/lua/plugins/fidget.lua b/lua/plugins/fidget.lua new file mode 100644 index 0000000..91a7bec --- /dev/null +++ b/lua/plugins/fidget.lua @@ -0,0 +1,101 @@ +return { + "j-hui/fidget.nvim", + opts = { + -- text = { + -- spinner = "pipe", -- animation shown when tasks are ongoing + -- done = "✔", -- character shown when all tasks are complete + -- commenced = "Started", -- message shown when task starts + -- completed = "Completed", -- message shown when task completes + -- }, + -- align = { + -- bottom = true, -- align fidgets along bottom edge of buffer + -- right = true, -- align fidgets along right edge of buffer + -- }, + progress = { + poll_rate = 0, -- How and when to poll for progress messages + suppress_on_insert = false, -- Suppress new messages while in insert mode + ignore_done_already = false, -- Ignore new tasks that are already complete + ignore_empty_message = false, -- Ignore new tasks that don't contain a message + clear_on_detach = -- Clear notification group when LSP server detaches + function(client_id) + local client = vim.lsp.get_client_by_id(client_id) + return client and client.name or nil + end, + notification_group = -- How to get a progress message's notification group key + function(msg) return msg.lsp_client.name end, + ignore = {}, -- List of LSP servers to ignore + + -- Options related to how LSP progress messages are displayed as notifications + display = { + render_limit = 16, -- How many LSP messages to show at once + done_ttl = 3, -- How long a message should persist after completion + done_icon = "✔", -- Icon shown when all LSP progress tasks are complete + done_style = "Constant", -- Highlight group for completed LSP tasks + progress_ttl = math.huge, -- How long a message should persist when in progress + progress_icon = -- Icon shown when LSP progress tasks are in progress + { "dots" }, + progress_style = -- Highlight group for in-progress LSP tasks + "WarningMsg", + group_style = "Title", -- Highlight group for group name (LSP server name) + icon_style = "Question", -- Highlight group for group icons + priority = 30, -- Ordering priority for LSP notification group + skip_history = true, -- Whether progress notifications should be omitted from history + format_message = -- How to format a progress message + require("fidget.progress.display").default_format_message, + format_annote = -- How to format a progress annotation + function(msg) return msg.title end, + format_group_name = -- How to format a progress notification group's name + function(group) return tostring(group) end, + overrides = { -- Override options from the default notification config + rust_analyzer = { name = "rust-analyzer" }, + }, + }, + + -- Options related to Neovim's built-in LSP client + lsp = { + progress_ringbuf_size = 0, -- Configure the nvim's LSP progress ring buffer size + log_handler = false, -- Log `$/progress` handler invocations (for debugging) + }, + }, + notification = { + window = { + winblend = 0, + }, + poll_rate = 10, -- How frequently to update and render notifications + filter = vim.log.levels.INFO, -- Minimum notifications level + history_size = 128, -- Number of removed messages to retain in history + override_vim_notify = false, -- Automatically override vim.notify() with Fidget + -- How to configure notification groups when instantiated + configs = { default = require("fidget.notification").default_config }, + -- Conditionally redirect notifications to another backend + redirect = function(msg, level, opts) + if opts and opts.on_open then + return require("fidget.integration.nvim-notify").delegate(msg, level, opts) + end + end, + + -- Options related to how notifications are rendered as text + view = { + stack_upwards = true, -- Display notification items from bottom to top + icon_separator = " ", -- Separator between group name and icon + group_separator = "---", -- Separator between notification groups + }, + }, + integration = { + ["nvim-tree"] = { + enable = true, -- Integrate with nvim-tree/nvim-tree.lua (if installed) + }, + ["xcodebuild-nvim"] = { + enable = false, -- Integrate with wojciech-kulik/xcodebuild.nvim (if installed) + }, + }, + -- Options related to logging + logger = { + level = vim.log.levels.WARN, -- Minimum logging level + max_size = 10000, -- Maximum log file size, in KB + float_precision = 0.01, -- Limit the number of decimals displayed for floats + -- Where Fidget writes its logs to + path = string.format("%s/fidget.nvim.log", vim.fn.stdpath("cache")), + }, + }, +} diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..671fcd6 --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,50 @@ +return { + "lewis6991/gitsigns.nvim", + opts = { + signs = { + add = { text = "┃" }, + change = { text = "┃" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "┆" }, + }, + signs_staged = { + add = { text = "┃" }, + change = { text = "┃" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "┆" }, + }, + signs_staged_enable = true, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + watch_gitdir = { follow_files = true }, + auto_attach = true, + attach_to_untracked = false, + current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + ignore_whitespace = false, + virt_text_priority = 100, + }, + current_line_blame_formatter = ", - ", + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, -- Disable if file is longer than this (in lines) + preview_config = { + -- Options passed to nvim_open_win + border = "single", + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + }, + }, +} diff --git a/lua/plugins/goto-preview.lua b/lua/plugins/goto-preview.lua new file mode 100644 index 0000000..81a3c24 --- /dev/null +++ b/lua/plugins/goto-preview.lua @@ -0,0 +1 @@ +return { "rmagatti/goto-preview" } diff --git a/lua/plugins/image.lua b/lua/plugins/image.lua new file mode 100644 index 0000000..2ec625d --- /dev/null +++ b/lua/plugins/image.lua @@ -0,0 +1,41 @@ +return { + "3rd/image.nvim", + opts = { + backend = "kitty", + -- processor = "magick_rock", -- or "magick_cli" + processor = "magick_cli", -- or "magick_cli" + integrations = { + markdown = { + enabled = true, + clear_in_insert_mode = false, + download_remote_images = true, + only_render_image_at_cursor = false, + floating_windows = false, -- if true, images will be rendered in floating markdown windows + filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here + }, + neorg = { + enabled = true, + filetypes = { "norg" }, + }, + typst = { + enabled = true, + filetypes = { "typst" }, + }, + html = { + enabled = false, + }, + css = { + enabled = false, + }, + }, + max_width = nil, + max_height = nil, + max_width_window_percentage = nil, + max_height_window_percentage = 50, + window_overlap_clear_enabled = false, -- toggles images when windows are overlapped + window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "snacks_notif", "scrollview", "scrollview_sign" }, + editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus + tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off) + hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.avif" }, -- render image files as images when opened + }, +} diff --git a/lua/plugins/indent-blanklines.lua b/lua/plugins/indent-blanklines.lua new file mode 100644 index 0000000..e582d20 --- /dev/null +++ b/lua/plugins/indent-blanklines.lua @@ -0,0 +1,35 @@ +return { + "lukas-reineke/indent-blankline.nvim", + config = function() + local highlight = { + "RainbowRed", + "RainbowYellow", + "RainbowBlue", + "RainbowOrange", + "RainbowGreen", + "RainbowViolet", + "RainbowCyan", + } + + local hooks = require("ibl.hooks") + -- create the highlight groups in the highlight setup hook, so they are reset + -- every time the colorscheme changes + hooks.register(hooks.type.HIGHLIGHT_SETUP, function() + vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#ED8796" }) + vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#EED49F" }) + vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#8AADF4" }) + vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#F5A97F" }) + vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#A6DA95" }) + vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C6A0F6" }) + vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#8BD5CA" }) + end) + + vim.g.rainbow_delimiters = { highlight = highlight } + require("ibl").setup({ + scope = { highlight = highlight }, + exclude = { filetypes = { "dashboard" } }, + }) + + hooks.register(hooks.type.SCOPE_HIGHLIGHT, hooks.builtin.scope_highlight_from_extmark) + end, +} diff --git a/lua/plugins/lazydev.lua b/lua/plugins/lazydev.lua new file mode 100644 index 0000000..a3866d6 --- /dev/null +++ b/lua/plugins/lazydev.lua @@ -0,0 +1,14 @@ +return { + { + "folke/lazydev.nvim", + ft = "lua", -- only load on lua files + opts = { + library = { + -- See the configuration section for more details + -- Load luvit types when the `vim.uv` word is found + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, + }, + }, + }, + { "folke/neodev.nvim", enabled = false }, -- make sure to uninstall or disable neodev.nvim +} diff --git a/lua/plugins/lsp/copilot-cmp.lua b/lua/plugins/lsp/copilot-cmp.lua deleted file mode 100644 index 71883db..0000000 --- a/lua/plugins/lsp/copilot-cmp.lua +++ /dev/null @@ -1,8 +0,0 @@ -require("copilot_cmp").setup({ - suggestion = { enabled = false }, - panel = { enabled = false } - -- method = "getCompletionsCycling", - -- formatters = { - -- insert_text = require("copilot_cmp.format").remove_existing - -- } -}) diff --git a/lua/plugins/lsp/init.lua b/lua/plugins/lsp/init.lua deleted file mode 100644 index 692997e..0000000 --- a/lua/plugins/lsp/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -require('plugins.lsp.copilot-cmp') -require('plugins.lsp.lsp-kind') -require('plugins.lsp.lspconfig') --- require('plugins.lsp.lspfuzzy') -require('plugins.lsp.lsplines') -require('plugins.lsp.luasnip') -require('plugins.lsp.null-ls') -require('plugins.lsp.nvim-cmp') -require('plugins.lsp.nvim-lint') diff --git a/lua/plugins/lsp/lsp-format.lua b/lua/plugins/lsp/lsp-format.lua deleted file mode 100644 index c16e108..0000000 --- a/lua/plugins/lsp/lsp-format.lua +++ /dev/null @@ -1 +0,0 @@ --- require("lsp-format").setup {} diff --git a/lua/plugins/lsp/lsp-kind.lua b/lua/plugins/lsp/lsp-kind.lua deleted file mode 100644 index 3b02734..0000000 --- a/lua/plugins/lsp/lsp-kind.lua +++ /dev/null @@ -1,33 +0,0 @@ --- lspkind.lua -local lspkind = require("lspkind") -lspkind.init({ - preset = 'default', - symbol_map = { - Copilot = "", - Function = "󰊕", - Text = "󰊄", - Method = "󰆧", - Operator = "󰆕", - Keyword = "󰌋", - Variable = "󰂡", - Field = "󰇽", - Class = "󰠱", - Interface = "", - Module = "", - Property = "󰜢", - Unit = "", - Value = "󰎠", - Enum = "", - Snippet = "", - Color = "󰏘", - File = "󰈙", - Reference = "", - Folder = "󰉋", - EnumMember = "", - Constant = "󰏿", - Struct = "", - Event = "", - TypeParameter = "󰅲", - }, -}) -vim.api.nvim_set_hl(0, "CmpItemKindCopilot", {fg ="#6CC644"}) diff --git a/lua/plugins/lsp/lspconfig.lua b/lua/plugins/lsp/lspconfig.lua deleted file mode 100644 index c4aa30d..0000000 --- a/lua/plugins/lsp/lspconfig.lua +++ /dev/null @@ -1,203 +0,0 @@ --- local opts = { noremap = true, silent = true } --- vim.api.nvim_set_keymap('n', 'e', --- 'lua vim.diagnostic.open_float()', opts) --- vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', --- opts) --- vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', --- opts) --- vim.api.nvim_set_keymap('n', 'q', --- 'lua vim.diagnostic.setloclist()', opts) --- Use an on_attach function to only map the following keys --- after the language server attaches to the current buffer -local on_attach = function(client, bufnr) - -- Enable completion triggered by - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - - -- Mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions - -- set in ~/.config/nvim/keybindings.vim - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) - -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) - -- highlighting things under cursor - -- if client.resolved_capabilities.document_highlight then - -- vim.cmd [[ - -- hi! LspReferenceRead cterm=bold ctermbg=red guibg=LightYellow - -- hi! LspReferenceText cterm=bold ctermbg=red guibg=LightYellow - -- hi! LspReferenceWrite cterm=bold ctermbg=red guibg=LightYellow - -- augroup lsp_document_highlight - -- autocmd! * - -- autocmd! CursorHold lua vim.lsp.buf.document_highlight() - -- autocmd! CursorMoved lua vim.lsp.buf.clear_references() - -- augroup END - -- ]] - -- end -end - --- vim.cmd [[autocmd! ColorScheme * highlight NormalFloat guibg=#1f2335]] --- vim.cmd [[autocmd! ColorScheme * highlight FloatBorder guifg=white guibg=#1f2335]] - --- squared corners - --- local border = { --- {"┌", "FloatBorder"}, --- {"─", "FloatBorder"}, --- {"┐", "FloatBorder"}, --- {"|", "FloatBorder"}, --- {"┘", "FloatBorder"}, --- {"─", "FloatBorder"}, --- {"└", "FloatBorder"}, --- {"|", "FloatBorder"}, --- } - --- rounded - -local border = { - { "╭", "FloatBorder" }, { "─", "FloatBorder" }, { "╮", "FloatBorder" }, - { "│", "FloatBorder" }, { "╯", "FloatBorder" }, { "─", "FloatBorder" }, - { "╰", "FloatBorder" }, { "│", "FloatBorder" } -} - -local handlers = { - ["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, - { border = border }), - ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers - .signature_help, - { border = border }) -} - --- local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview --- function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) --- opts = { --- { "border", border }, --- } --- opts.border = opts.border or border --- return orig_util_open_floating_preview(contents, syntax, opts, ...) --- end - -local DEFAULT_SETTINGS = { - ui = { - icons = { - -- The list icon to use for installed servers. - server_installed = "◍", - -- The list icon to use for servers that are pending installation. - server_pending = "◍", - -- The list icon to use for servers that are not installed. - server_uninstalled = "◍" - }, - keymaps = { - -- Keymap to expand a server in the UI - toggle_server_expand = "", - -- Keymap to install a server - install_server = "i", - -- Keymap to reinstall/update a server - update_server = "u", - -- Keymap to update all installed servers - update_all_servers = "U", - -- Keymap to uninstall a server - uninstall_server = "X" - } - }, - - -- The directory in which to install all servers. - -- install_root_dir = "/home/sudacode/.vim/lsp", - - pip = { - -- These args will be added to `pip install` calls. Note that setting extra args might impact intended behavior - -- and is not recommended. - -- - -- Example: { "--proxy", "https://proxyserver" } - install_args = {} - }, - on_attach = on_attach, - handlers = handlers, - - -- Controls to which degree logs are written to the log file. It's useful to set this to vim.log.levels.DEBUG when - -- debugging issues with server installations. - log_level = vim.log.levels.INFO, - - -- Limit for the maximum amount of servers to be installed at the same time. Once this limit is reached, any further - -- servers that are requested to be installed will be put in a queue. - max_concurrent_installers = 4 -} - -vim.diagnostic.config({ - virtual_text = true, - signs = true, - underline = false, - update_in_insert = false, - severity_sort = true -}) - -local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " } -for type, icon in pairs(signs) do - local hl = "DiagnosticSign" .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) -end - -function PrintDiagnostics(opts, bufnr, line_nr, client_id) - bufnr = bufnr or 0 - line_nr = line_nr or (vim.api.nvim_win_get_cursor(0)[1] - 1) - opts = opts or { ['lnum'] = line_nr } - - local line_diagnostics = vim.diagnostic.get(bufnr, opts) - if vim.tbl_isempty(line_diagnostics) then return end - - local diagnostic_message = "" - for i, diagnostic in ipairs(line_diagnostics) do - diagnostic_message = diagnostic_message .. - string.format("%d: %s", i, - diagnostic.message or "") - print(diagnostic_message) - if i ~= #line_diagnostics then - diagnostic_message = diagnostic_message .. "\n" - end - end - vim.api.nvim_echo({ { diagnostic_message, "Normal" } }, false, {}) -end - --- vim.cmd [[ autocmd! CursorHold * lua PrintDiagnostics() ]] - --- Register a handler that will be called for each installed server when it's ready (i.e. when installation is finished --- or if the server is already installed). - --- local servers = { 'jedi_language_server', 'bashls', 'vimls', 'yamlls', 'dockerls', 'rust_analyzer', 'clangd', 'ansiblels' } --- for _, lsp in pairs(servers) do --- require('lspconfig')[lsp].setup { --- on_attach = on_attach, --- handlers = handlers, --- flags = { --- -- This will be the default in neovim 0.7+ --- debounce_text_changes = 150, --- } --- } --- end - --- local plugins_path = vim.fn.stdpath("data") .. "site/autoload/plug.vim" --- local dir_list = vim.fn.glob(plugins_path .. "/*", true, true) --- local library_table = {} --- for _, v in ipairs(dir_list) do --- library_table[v .. "/lua"] = true --- end --- library_table[vim.fn.expand("$VIMRUNTIME/lua")] = true --- library_table[vim.fn.stdpath("config") .. "/lua"] = true --- require('lspconfig').sumneko_lua.setup({ --- settings = { --- Lua = { --- diagnostics = { globals = { "vim" } }, --- workspace = { library = library_table }, --- }, --- }, --- }) - --- -- require 'lspconfig'.bashls.setup {} diff --git a/lua/plugins/lsp/lspfuzzy.lua b/lua/plugins/lsp/lspfuzzy.lua deleted file mode 100644 index a80ac36..0000000 --- a/lua/plugins/lsp/lspfuzzy.lua +++ /dev/null @@ -1,16 +0,0 @@ -require('lspfuzzy').setup { - methods = 'all', -- either 'all' or a list of LSP methods (see below) - jump_one = true, -- jump immediately if there is only one location - save_last = false, -- save last location results for the :LspFuzzyLast command - callback = nil, -- callback called after jumping to a location - fzf_preview = { -- arguments to the FZF '--preview-window' option - 'right:+{2}-/2' -- preview on the right and centered on entry - }, - fzf_action = { -- FZF actions - ['ctrl-t'] = 'tab split', -- go to location in a new tab - ['ctrl-v'] = 'vsplit', -- go to location in a vertical split - ['ctrl-x'] = 'split', -- go to location in a horizontal split - }, - fzf_modifier = ':~:.', -- format FZF entries, see |filename-modifiers| - fzf_trim = false, -- trim FZF entries -} diff --git a/lua/plugins/lsp/lsplines.lua b/lua/plugins/lsp/lsplines.lua deleted file mode 100644 index 450c266..0000000 --- a/lua/plugins/lsp/lsplines.lua +++ /dev/null @@ -1,6 +0,0 @@ -require("lsp_lines").setup() --- Disable virtual_text since it's redundant due to lsp_lines. -vim.diagnostic.config({ virtual_text = false }) - -vim.keymap.set("", "tl", require("lsp_lines").toggle, - { desc = "Toggle lsp_lines" }) diff --git a/lua/plugins/lsp/luasnip.lua b/lua/plugins/lsp/luasnip.lua deleted file mode 100644 index 80309d7..0000000 --- a/lua/plugins/lsp/luasnip.lua +++ /dev/null @@ -1 +0,0 @@ -require("luasnip.loaders.from_vscode").lazy_load() diff --git a/lua/plugins/lsp/null-ls.lua b/lua/plugins/lsp/null-ls.lua deleted file mode 100644 index a576289..0000000 --- a/lua/plugins/lsp/null-ls.lua +++ /dev/null @@ -1,58 +0,0 @@ -local null_ls = require("null-ls") -local helpers = require("null-ls.helpers") --- syncronous formatting -local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) -require("null-ls").setup({ - -- you can reuse a shared lspconfig on_attach callback here - on_attach = function(client, bufnr) - if client.supports_method("textDocument/formatting") then - vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) - vim.api.nvim_create_autocmd("BufWritePre", { - group = augroup, - buffer = bufnr, - callback = function() - -- on 0.8, you should use vim.lsp.buf.format({ bufnr = bufnr }) instead - -- on later neovim version, you should use vim.lsp.buf.format({ async = false }) instead - -- vim.lsp.buf.formatting_sync() - vim.lsp.buf.format({ - async = false, - bufnr = bufnr, - filter = function(client) - return client.name == "null-ls" - end, - }) - end, - }) - end - end, - sources = { - null_ls.builtins.completion.luasnip, - null_ls.builtins.formatting.black, - null_ls.builtins.formatting.isort, - null_ls.builtins.diagnostics.mypy, - null_ls.builtins.diagnostics.markdownlint, - null_ls.builtins.diagnostics.pylint, - -- null_ls.builtins.diagnostics.pydoclint, - null_ls.builtins.formatting.stylua, - null_ls.builtins.formatting.markdownlint, - null_ls.builtins.formatting.prettier, -- handled by lsp server - null_ls.builtins.formatting.shfmt.with({ - filetypes = { "sh", "bash" }, - extra_args = { "-i", "0", "-ci", "-sr" }, - }), - -- null_ls.builtins.diagnostics.actionlint, - }, -}) - --- null_ls.setup({ --- on_attach = function(client) --- if client.supports_method "textDocument/formatting" then --- vim.cmd([[ --- augroup LspFormatting --- autocmd! * --- autocmd BufWritePre lua vim.lsp.buf.format() --- augroup END --- ]]) --- end --- end, --- }) diff --git a/lua/plugins/lsp/nvim-cmp.lua b/lua/plugins/lsp/nvim-cmp.lua deleted file mode 100644 index 42991a1..0000000 --- a/lua/plugins/lsp/nvim-cmp.lua +++ /dev/null @@ -1,274 +0,0 @@ --- Setup nvim-cmp. -local cmp = require 'cmp' -local lspkind = require('lspkind') -local lspconfig = require('lspconfig') --- luasnip setup -local luasnip = require 'luasnip' -local highlight = require('cmp.utils.highlight') - -local capabilities = require('cmp_nvim_lsp').default_capabilities() - -local has_words_before = function() - if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then - return false - end - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and - vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match( - "^%s*$") == nil -end - -lspkind.init({ symbol_map = { Copilot = "" } }) - -vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" }) - -cmp.setup({ - snippet = { - expand = function(args) - -- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. - require('luasnip').lsp_expand(args.body) -- For `luasnip` users. - -- require('snippy').expand_snippet(args.body) -- For `snippy` users. - -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. - end - }, - capabilities = capabilities, - mapping = { - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = false - }, - -- [""] = 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" }), - [""] = vim.schedule_wrap(function(fallback) - if cmp.visible() and has_words_before() then - cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - else - fallback() - end - end), - [''] = cmp.mapping(function() - if cmp.visible() then cmp.select_prev_item() end - end, { "i", "s" }) - }, - window = { - completion = { - winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None", - col_offset = -3, - side_padding = 0, - border = "rounded", - borderchars = { - "─", "│", "─", "│", "╭", "╮", "╯", "╰" - } - }, - documentation = { - border = "rounded", - borderchars = { - "─", "│", "─", "│", "╭", "╮", "╯", "╰" - } - -- padding = 15, - } - }, - formatting = { - -- options: 'text', 'text_symbol', 'symbol_text', 'symbol' - -- mode = 'symbol_text', - fields = { "kind", "abbr", "menu" }, - format = function(entry, vim_item) - local kind = require("lspkind").cmp_format({ - mode = "symbol_text", - maxwidth = 75, - symbol_map = { - Copilot = "", - Function = "󰊕", - Text = "󰊄", - Method = "󰆧", - Operator = "󰆕", - Keyword = "󰌋", - Variable = "󰂡", - Field = "󰇽", - Class = "󰠱", - Interface = "", - Module = "", - Property = "󰜢", - Unit = "", - Value = "󰎠", - Enum = "", - Snippet = "", - Color = "󰏘", - File = "󰈙", - Reference = "", - Folder = "󰉋", - EnumMember = "", - Constant = "󰏿", - Struct = "", - Event = "", - TypeParameter = "󰅲" - } - })(entry, vim_item) - local strings = vim.split(kind.kind, "%s", { trimempty = true }) - kind.kind = " " .. strings[1] .. " " - kind.menu = " (" .. strings[2] .. ")" - - return kind - end - -- format = lspkind.cmp_format({ - -- mode = 'symbol_text', -- show only symbol annotations - -- menu = ({ - -- buffer = "[Buffer]", - -- nvim_lsp = "[LSP]", - -- luasnip = "[LuaSnip]", - -- nvim_lua = "[Lua]", - -- latex_symbols = "[Latex]", - -- }) - -- }) - }, - sources = cmp.config.sources({ - { name = "copilot", group_index = 2 }, - { name = "codecompanion", group_index = 2 }, - { name = "path", group_index = 2 }, - { name = 'nvim_lsp', group_index = 2 }, - { name = 'nvim_lsp_signature_help', group_index = 2 }, - { name = 'nvim_lsp_document_symbol', group_index = 2 }, - { name = 'vim-dadbod-completion', group_index = 2 }, - { name = 'neorg', group_index = 2 }, -- For luasnip users. - { name = 'luasnip', group_index = 2 }, -- For luasnip users. - { - name = 'buffer', - option = { - get_bufnrs = function() - local bufs = {} - for _, win in ipairs(vim.api.nvim_list_wins()) do - bufs[vim.api.nvim_win_get_buf(win)] = true - end - return vim.tbl_keys(bufs) - end - } - } - -- { name = 'ultisnips' }, -- For ultisnips users. - -- { name = 'snippy' }, -- For snippy users. - }, { { name = 'buffer' } }), - sorting = { - priority_weight = 2, - comparators = { - require("copilot_cmp.comparators").prioritize, - cmp.config.compare.offset, - cmp.config.compare.exact, - require("copilot_cmp.comparators").score, - require("copilot_cmp.comparators").recently_used, - cmp.config.compare.locality, - require("copilot_cmp.comparators").kind, - require("copilot_cmp.comparators").sort_text, - require("copilot_cmp.comparators").length, - require("copilot_cmp.comparators").order, - - -- Below is the default comparitor list and order for nvim-cmp - cmp.config.compare.offset, - -- cmp.config.compare.scopes, --this is commented in nvim-cmp too - cmp.config.compare.exact, cmp.config.compare.score, - cmp.config.compare.recently_used, cmp.config.compare.locality, - cmp.config.compare.kind, cmp.config.compare.sort_text, - cmp.config.compare.length, cmp.config.compare.order - } - } -}) - -cmp.setup.cmdline('/', { - mapping = cmp.mapping.preset.cmdline(), - sources = { { name = 'buffer' } } -}) - -cmp.setup.cmdline(':', { - mapping = cmp.mapping.preset.cmdline(), - sources = cmp.config.sources({ { name = 'path' } }, { - { name = 'cmdline', option = { ignore_cmds = { 'Man', '!' } } } - }) -}) - -local servers = { - 'bashls', 'jedi_language_server', 'jsonls', 'yamlls', 'vimls', 'dotls', 'dockerls', - 'html', 'cssls', 'lua_ls', 'eslint', 'ts_ls', 'angularls', 'ansiblels' -} - -for _, lsp in ipairs(servers) do - if lsp == 'lua_ls' then - lspconfig[lsp].setup { - -- on_attach = require("lsp-format").on_attach, - on_init = function(client) - if client.workspace_folders then - local path = client.workspace_folders[1].name - if path ~= vim.fn.stdpath('config') and (vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc')) then - return - end - end - client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { - runtime = { - -- Tell the language server which version of Lua you're using - -- (most likely LuaJIT in the case of Neovim) - version = 'LuaJIT' - }, - -- Make the server aware of Neovim runtime files - workspace = { - checkThirdParty = false, - library = { - vim.env.VIMRUNTIME - -- Depending on the usage, you might want to add additional paths here. - -- "${3rd}/luv/library" - -- "${3rd}/busted/library", - } - -- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189) - -- library = vim.api.nvim_get_runtime_file("", true) - } - }) - end, - capabilities = capabilities, - callSnippet = "Replace", - settings = { - Lua = {} - } - } - else - lspconfig[lsp].setup { - -- on_attach = require("lsp-format").on_attach, - capabilities = capabilities - } - end -end - --- cmp.event:on("menu_opened", --- function() vim.b.copilot_suggestion_hidden = true end) --- cmp.event:on("menu_closed", --- function() vim.b.copilot_suggestion_hidden = false end) diff --git a/lua/plugins/lsp/nvim-lint.lua b/lua/plugins/lsp/nvim-lint.lua deleted file mode 100644 index 185b18a..0000000 --- a/lua/plugins/lsp/nvim-lint.lua +++ /dev/null @@ -1,21 +0,0 @@ -require('lint').linters_by_ft = { - markdown = { 'markdownlint' }, - lua = { 'luacheck', 'luac' }, - vim = { 'vint' }, - sh = { 'shellcheck' }, - pyton = { 'pycodestyle', 'black', 'pydocstyle', 'pylint' }, - json = { 'jsonlint' }, - yaml = { 'yamllint' } -} - -vim.api.nvim_create_autocmd({ "BufWritePost" }, { - callback = function() - -- try_lint without arguments runs the linters defined in `linters_by_ft` - -- for the current filetype - require("lint").try_lint() - - -- You can call `try_lint` with a linter name or a list of names to always - -- run specific linters, independent of the `linters_by_ft` configuration - -- require("lint").try_lint("cspell") - end, -}) diff --git a/lua/plugins/lsp_lines.lua b/lua/plugins/lsp_lines.lua new file mode 100644 index 0000000..521386b --- /dev/null +++ b/lua/plugins/lsp_lines.lua @@ -0,0 +1,9 @@ +return { + "https://git.sr.ht/~whynothugo/lsp_lines.nvim", + config = function() + -- lsp_lines + vim.diagnostic.config({ virtual_text = false }) + -- -- + vim.keymap.set("", "tl", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" }) + end, +} diff --git a/lua/plugins/lspconfig.lua b/lua/plugins/lspconfig.lua new file mode 100644 index 0000000..5db24c4 --- /dev/null +++ b/lua/plugins/lspconfig.lua @@ -0,0 +1,78 @@ +return { + "neovim/nvim-lspconfig", + dependencies = { "saghen/blink.cmp" }, + config = function() + local lspconfig = require("lspconfig") + vim.notify = require("notify") + local servers = { + "bashls", + "jedi_language_server", + "jsonls", + "yamlls", + "vimls", + "dotls", + "dockerls", + "html", + "cssls", + "lua_ls", + "eslint", + "ts_ls", + "angularls", + "ansiblels", + } + + for _, lsp in ipairs(servers) do + if lsp == "lua_ls" then + lspconfig[lsp].setup({ + -- on_attach = require("lsp-format").on_attach, + on_attach = function() + vim.notify("Lua LSP attached", nil, { title = "LSP" }) + end, + on_init = function(client) + if client.workspace_folders then + local path = client.workspace_folders[1].name + if + path ~= vim.fn.stdpath("config") + and ( + vim.loop.fs_stat(path .. "/.luarc.json") + or vim.loop.fs_stat(path .. "/.luarc.jsonc") + ) + then + return + end + end + client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, { + runtime = { + -- Tell the language server which version of Lua you're using + -- (most likely LuaJIT in the case of Neovim) + version = "LuaJIT", + }, + -- Make the server aware of Neovim runtime files + workspace = { + checkThirdParty = false, + library = { + vim.env.VIMRUNTIME, + -- Depending on the usage, you might want to add additional paths here. + -- "${3rd}/luv/library" + -- "${3rd}/busted/library", + }, + -- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189) + -- library = vim.api.nvim_get_runtime_file("", true) + }, + }) + end, + callSnippet = "Replace", + settings = { + Lua = {}, + }, + }) + else + lspconfig[lsp].setup({ + on_attach = function() + vim.notify(lsp .. " LSP attached", nil, { title = "LSP" }) + end, + }) + end + end + end, +} diff --git a/lua/plugins/lspkind.lua b/lua/plugins/lspkind.lua new file mode 100644 index 0000000..bbd0f38 --- /dev/null +++ b/lua/plugins/lspkind.lua @@ -0,0 +1 @@ +return { "onsails/lspkind.nvim" } diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..6c11892 --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,137 @@ +return { + "nvim-lualine/lualine.nvim", + config = function() + local M = require("lualine.component"):extend() + + M.processing = false + M.spinner_index = 1 + + local spinner_symbols = { + "⠋", + "⠙", + "⠹", + "⠸", + "⠼", + "⠴", + "⠦", + "⠧", + "⠇", + "⠏", + } + local spinner_symbols_len = 10 + + -- Initializer + function M:init(options) + M.super.init(self, options) + + local group = vim.api.nvim_create_augroup("CodeCompanionHooks", {}) + + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequest*", + group = group, + callback = function(request) + if request.match == "CodeCompanionRequestStarted" then + self.processing = true + elseif request.match == "CodeCompanionRequestFinished" then + self.processing = false + end + end, + }) + end + + -- Function that runs every time statusline is updated + function M:update_status() + if self.processing then + self.spinner_index = (self.spinner_index % spinner_symbols_len) + 1 + return spinner_symbols[self.spinner_index] + else + return nil + end + end + + require('lualine').setup({ + options = { + icons_enabled = true, + theme = "catppuccin", + -- theme = 'dracula', + -- theme = 'horizon', + -- theme = 'onedark', + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, + disabled_filetypes = {}, + always_divide_middle = true, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch", "diff" }, + lualine_c = { "filename" }, + lualine_x = { + M, + { + "copilot", + symbols = { + status = { + icons = { + enabled = " ", + sleep = " ", -- auto-trigger disabled + disabled = " ", + warning = " ", + unknown = " ", + }, + hl = { + enabled = "#50FA7B", + sleep = "#AEB7D0", + disabled = "#6272A4", + warning = "#FFB86C", + unknown = "#FF5555", + }, + }, + spinners = "dots", -- has some premade spinners + spinner_color = "#6272A4", + }, + show_colors = false, + show_loading = true, + }, + { + "diagnostics", + "fileformat", + symbols = { + unix = "", -- e712 + dos = "", -- e70f + mac = "", -- e711 + }, + }, + "encoding", + "fileformat", + { "filetype", colored = true, icon_only = false }, + }, + lualine_y = { "progress" }, + lualine_z = { "location" }, + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { + { + "filename", + file_status = true, -- Displays file status (readonly status, modified status) + path = 0, -- 0: Just the filename + shorting_target = 40, -- Shortens path to leave 40 spaces in the window + symbols = { + modified = "[+]", -- Text to show when the file is modified. + readonly = "[-]", -- Text to show when the file is non-modifiable or readonly. + unnamed = "[No Name]", -- Text to show for unnamed buffers. + }, + }, + M, + }, + lualine_x = { "location" }, + lualine_y = {}, + lualine_z = {}, + }, + tabline = {}, + extensions = { "quickfix", "fzf", "nvim-tree", "symbols-outline", "fugitive" }, + }) + end, + depends = { "kyazdani42/nvim-web-devicons" }, +} diff --git a/lua/plugins/luasnip.lua b/lua/plugins/luasnip.lua new file mode 100644 index 0000000..4b223c3 --- /dev/null +++ b/lua/plugins/luasnip.lua @@ -0,0 +1,7 @@ +return { + "L3MON4D3/LuaSnip", + -- follow latest release. + version = "v2.*", -- Replace by the latest released major (first number of latest release) + -- install jsregexp (optional!). + build = "make install_jsregexp", +} diff --git a/lua/plugins/mini.lua b/lua/plugins/mini.lua new file mode 100644 index 0000000..6536208 --- /dev/null +++ b/lua/plugins/mini.lua @@ -0,0 +1,63 @@ +return { + "echasnovski/mini.diff", + depends = "echasnovski/mini.nvim", + opts = { + + -- Options for how hunks are visualized + view = { + -- Visualization style. Possible values are 'sign' and 'number'. + -- Default: 'number' if line numbers are enabled, 'sign' otherwise. + style = vim.go.number and "number" or "sign", + + -- Signs used for hunks with 'sign' view + signs = { add = "▒", change = "▒", delete = "▒" }, + + -- Priority of used visualization extmarks + priority = 199, + }, + + -- Source for how reference text is computed/updated/etc + -- Uses content from Git index by default + source = nil, + + -- Delays (in ms) defining asynchronous processes + delay = { + -- How much to wait before update following every text change + text_change = 200, + }, + + -- Module mappings. Use `''` (empty string) to disable one. + mappings = { + -- Apply hunks inside a visual/operator region + apply = "gh", + + -- Reset hunks inside a visual/operator region + reset = "gH", + + -- Hunk range textobject to be used inside operator + -- Works also in Visual mode if mapping differs from apply and reset + textobject = "gh", + + -- Go to hunk range in corresponding direction + goto_first = "[H", + goto_prev = "[h", + goto_next = "]h", + goto_last = "]H", + }, + + -- Various options + options = { + -- Diff algorithm. See `:h vim.diff()`. + algorithm = "histogram", + + -- Whether to use "indent heuristic". See `:h vim.diff()`. + indent_heuristic = true, + + -- The amount of second-stage diff to align lines (in Neovim>=0.9) + linematch = 60, + + -- Whether to wrap around edges during hunk navigation + wrap_goto = false, + }, + }, +} diff --git a/lua/plugins/nio.lua b/lua/plugins/nio.lua new file mode 100644 index 0000000..a8f5d15 --- /dev/null +++ b/lua/plugins/nio.lua @@ -0,0 +1 @@ +return { "nvim-neotest/nvim-nio" } diff --git a/lua/plugins/none-ls.lua b/lua/plugins/none-ls.lua new file mode 100644 index 0000000..8cdeab5 --- /dev/null +++ b/lua/plugins/none-ls.lua @@ -0,0 +1,65 @@ +return { + "nvimtools/none-ls.nvim", + config = function() + local null_ls = require("null-ls") + local helpers = require("null-ls.helpers") + -- syncronous formatting + local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + + -- null_ls.setup({ + -- on_attach = function(client) + -- if client.supports_method "textDocument/formatting" then + -- vim.cmd([[ + -- augroup LspFormatting + -- autocmd! * + -- autocmd BufWritePre lua vim.lsp.buf.format() + -- augroup END + -- ]]) + -- end + -- end, + -- }) + -- you can reuse a shared lspconfig on_attach callback here + + + require('null-ls').setup({ + on_attach = function(client, bufnr) + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + -- on 0.8, you should use vim.lsp.buf.format({ bufnr = bufnr }) instead + -- on later neovim version, you should use vim.lsp.buf.format({ async = false }) instead + -- vim.lsp.buf.formatting_sync() + vim.lsp.buf.format({ + async = false, + bufnr = bufnr, + filter = function(client) + return client.name == "null-ls" + end, + }) + end, + }) + end + end, + sources = { + null_ls.builtins.completion.luasnip, + null_ls.builtins.formatting.black, + null_ls.builtins.formatting.isort, + null_ls.builtins.diagnostics.mypy, + null_ls.builtins.diagnostics.markdownlint, + null_ls.builtins.diagnostics.pylint, + -- null_ls.builtins.diagnostics.pydoclint, + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.markdownlint, + null_ls.builtins.formatting.prettier, -- handled by lsp server + null_ls.builtins.formatting.shfmt.with({ + filetypes = { "sh", "bash" }, + extra_args = { "-i", "0", "-ci", "-sr" }, + }), + -- null_ls.builtins.diagnostics.actionlint, + }, + }) + end +} diff --git a/lua/plugins/notify.lua b/lua/plugins/notify.lua new file mode 100644 index 0000000..a9fd397 --- /dev/null +++ b/lua/plugins/notify.lua @@ -0,0 +1,20 @@ +return { + "rcarriga/nvim-notify", + opts = { + background_colour = "#000000", + fps = 144, + icons = { + DEBUG = "", + ERROR = "", + INFO = "", + TRACE = "✎", + WARN = "", + }, + level = 2, + minimum_width = 50, + render = "default", + stages = "fade_in_slide_out", + timeout = 5000, + top_down = true, + }, +} diff --git a/lua/plugins/nvim-autopairs.lua b/lua/plugins/nvim-autopairs.lua new file mode 100644 index 0000000..c80fd3d --- /dev/null +++ b/lua/plugins/nvim-autopairs.lua @@ -0,0 +1,26 @@ +return { + "windwp/nvim-autopairs", + event = "InsertEnter", + config = true, + opts = { + enabled = function(bufnr) + return true + end, + disable_filetype = { "TelescopePrompt", "spectre_panel" }, + disable_in_macro = true, -- disable when recording or executing a macro + disable_in_visualblock = false, -- disable when insert after visual block mode + disable_in_replace_mode = true, + ignored_next_char = [=[[%w%%%'%[%"%.%`%$]]=], + enable_moveright = true, + enable_afterquote = true, -- add bracket pairs after quote + enable_check_bracket_line = true, --- check bracket in same line + enable_bracket_in_quote = true, -- + enable_abbr = false, -- trigger abbreviation + break_undo = true, -- switch for basic rule break undo sequence + check_ts = false, + map_cr = true, + map_bs = true, -- map the key + map_c_h = false, -- Map the key to delete a pair + map_c_w = false, -- map to delete a pair if possible + }, +} diff --git a/lua/plugins/nvim-cmp.lua b/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..2436215 --- /dev/null +++ b/lua/plugins/nvim-cmp.lua @@ -0,0 +1,263 @@ +return { + "hrsh7th/nvim-cmp", + dependencies = { + "saadparwaiz1/cmp_luasnip", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-cmdline", + "hrsh7th/cmp-nvim-lsp-signature-help", + "hrsh7th/cmp-nvim-lsp-document-symbol", + -- "hrsh7th/cmp-nvim-lsp", + -- "hrsh7th/cmp-path", + "rafamadriz/friendly-snippets", + "Jezda1337/nvim-html-css", + "https://codeberg.org/FelipeLema/cmp-async-path", + }, + config = function() + -- Setup nvim-cmp. + local cmp = require("cmp") + local lspkind = require("lspkind") + -- luasnip setup + local luasnip = require("luasnip") + + local cmp_autopairs = require("nvim-autopairs.completion.cmp") + + local has_words_before = function() + if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then + return false + end + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match("^%s*$") == nil + end + require("luasnip.loaders.from_vscode").lazy_load() + + lspkind.init({ symbol_map = { Copilot = "" } }) + + cmp.setup.cmdline("/", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = "nvim_lsp_document_symbol" }, + }, { + { name = "buffer" }, + }), + }) + + cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ { name = "path" } }, { + { name = "cmdline", option = { ignore_cmds = { "Man", "!" } } }, + }), + matching = { disallow_symbol_nonprefix_matching = false }, + }) + + cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) + + require('cmp').setup({ + snippet = { + expand = function(args) + -- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. + luasnip.lsp_expand(args.body) -- For `luasnip` users. + -- require('snippy').expand_snippet(args.body) -- For `snippy` users. + -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. + end, + }, + mapping = { + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = false, + }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() and has_words_before() then + cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) + elseif luasnip.locally_jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }, + window = { + completion = { + -- winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None", + col_offset = 0, + side_padding = 0, + border = "rounded", + borderchars = { + "─", + "│", + "─", + "│", + "╭", + "╮", + "╯", + "╰", + }, + }, + documentation = { + border = "rounded", + borderchars = { + "─", + "│", + "─", + "│", + "╭", + "╮", + "╯", + "╰", + }, + -- padding = 15, + }, + }, + formatting = { + -- options: 'text', 'text_symbol', 'symbol_text', 'symbol' + -- mode = 'symbol_text', + fields = { "kind", "abbr", "menu" }, + expandable_indicator = true, + format = function(entry, vim_item) + local kind = require("lspkind").cmp_format({ + mode = "symbol_text", + -- mode = "symbol", + maxwidth = 75, + symbol_map = { + Copilot = " ", + Text = " ", + Method = " ", + Function = " ", + Constructor = " ", + Field = " ", + Variable = " ", + Class = " ", + Interface = " ", + Module = " ", + Property = " ", + Unit = " ", + Value = " ", + Enum = " ", + Keyword = " ", + Snippet = " ", + Color = " ", + File = " ", + Reference = " ", + Folder = " ", + EnumMember = " ", + Constant = " ", + Struct = " ", + Event = " ", + Operator = " ", + TypeParameter = " ", + }, + })(entry, vim_item) + local strings = vim.split(kind.kind, "%s", { trimempty = true }) + kind.kind = " " .. strings[1] .. " " + kind.menu = " (" .. strings[2] .. ")" + + return kind + end, + }, + sources = cmp.config.sources({ + { name = "nvim_lsp_signature_help", group_index = 0 }, + { name = "lazydev", group_index = 0 }, + { name = "nvim_lsp", group_index = 1 }, + { name = "copilot", group_index = 1 }, + { name = "codecompanion", group_index = 1 }, + { name = "async_path", group_index = 2 }, + -- { name = "path", group_index = 2 }, + -- { name = "cmdline", option = { ignore_cmds = { "Man", "!" } } }, + { name = "nvim_lsp_document_symbol", group_index = 2 }, + { name = "luasnip", group_index = 2 }, -- For luasnip users. + { name = "render-markdown", group_index = 2 }, + { + name = "html-css", + group_indx = 2, + option = { + enable_on = { "html", "jsx", "tsx", "typescript", "typescriptreact" }, -- html is enabled by default + notify = false, + documentation = { + auto_show = true, -- show documentation on select + }, + -- add any external scss like one below + style_sheets = { + "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css", + "https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css", + }, + }, + }, + { + name = "buffer", + option = { + get_bufnrs = function() + local bufs = {} + for _, win in ipairs(vim.api.nvim_list_wins()) do + bufs[vim.api.nvim_win_get_buf(win)] = true + end + return vim.tbl_keys(bufs) + end, + }, + }, + -- { name = 'ultisnips' }, -- For ultisnips users. + -- { name = 'snippy' }, -- For snippy users. + }, { { name = "buffer" } }), + sorting = { + priority_weight = 2, + comparators = { + require("copilot_cmp.comparators").prioritize, + cmp.config.compare.offset, + cmp.config.compare.exact, + require("copilot_cmp.comparators").score, + require("copilot_cmp.comparators").recently_used, + cmp.config.compare.locality, + require("copilot_cmp.comparators").kind, + require("copilot_cmp.comparators").sort_text, + require("copilot_cmp.comparators").length, + require("copilot_cmp.comparators").order, + + -- Below is the default comparitor list and order for nvim-cmp + cmp.config.compare.offset, + -- cmp.config.compare.scopes, --this is commented in nvim-cmp too + cmp.config.compare.exact, + cmp.config.compare.score, + cmp.config.compare.recently_used, + cmp.config.compare.locality, + cmp.config.compare.kind, + cmp.config.compare.sort_text, + cmp.config.compare.length, + cmp.config.compare.order, + }, + }, + }) + end +} diff --git a/lua/plugins/nvim-colorizer.lua b/lua/plugins/nvim-colorizer.lua new file mode 100644 index 0000000..dee6b43 --- /dev/null +++ b/lua/plugins/nvim-colorizer.lua @@ -0,0 +1,6 @@ +return { + "norcalli/nvim-colorizer.lua", + config = function() + require("colorizer").setup() + end, +} diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua new file mode 100644 index 0000000..1e92b8a --- /dev/null +++ b/lua/plugins/nvim-lint.lua @@ -0,0 +1,14 @@ +return { + "mfussenegger/nvim-lint", + config = function() + require("lint").linters_by_ft = { + markdown = { "markdownlint" }, + lua = { "luacheck" }, + py = { "pylint", "pydocstyle", "pycodestyle", "mypy" }, + sh = { "shellcheck" }, + json = { "jsonlint" }, + yaml = { "yamllint" }, + vim = { "vint" }, + } + end, +} diff --git a/lua/plugins/nvim-tree.lua b/lua/plugins/nvim-tree.lua new file mode 100644 index 0000000..ec6fb2f --- /dev/null +++ b/lua/plugins/nvim-tree.lua @@ -0,0 +1,11 @@ +return { + "nvim-tree/nvim-tree.lua", + version = "*", + lazy = false, + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + config = function() + require("nvim-tree").setup({}) + end, +} diff --git a/lua/plugins/plenary.lua b/lua/plugins/plenary.lua new file mode 100644 index 0000000..dfc4697 --- /dev/null +++ b/lua/plugins/plenary.lua @@ -0,0 +1,3 @@ +return { + "nvim-lua/plenary.nvim", +} diff --git a/lua/plugins/presence.lua b/lua/plugins/presence.lua new file mode 100644 index 0000000..00c290e --- /dev/null +++ b/lua/plugins/presence.lua @@ -0,0 +1,25 @@ +return { + "andweeb/presence.nvim", + opts = { + -- General options + auto_update = true, -- Update activity based on autocmd events (if `false`, map or manually execute `:lua package.loaded.presence:update()`) + neovim_image_text = "The One True Text Editor", -- Text displayed when hovered over the Neovim image + main_image = "neovim", -- Main image display (either "neovim" or "file") + -- client_id = "793271441293967371", -- Use your own Discord application client id (not recommended) + log_level = nil, -- Log messages at or above this level (one of the following: "debug", "info", "warn", "error") + debounce_timeout = 10, -- Number of seconds to debounce events (or calls to `:lua package.loaded.presence:update(, true)`) + enable_line_number = false, -- Displays the current line number instead of the current project + blacklist = {}, -- A list of strings or Lua patterns that disable Rich Presence if the current file name, path, or workspace matches + buttons = true, -- Configure Rich Presence button(s), either a boolean to enable/disable, a static table (`{{ label = "