From ea9a8d92bc04e7fe688d95605a58c43a0a25293e Mon Sep 17 00:00:00 2001 From: servostar Date: Fri, 17 Nov 2023 12:24:21 +0100 Subject: [PATCH] added lazyvim based config files --- .gitignore | 2 + init.lua | 2 + lua/config/autocmds.lua | 0 lua/config/keymaps.lua | 21 ++++ lua/config/lazy.lua | 115 ++++++++++++++++++++ lua/config/options.lua | 58 ++++++++++ lua/plugins/bufferline.lua | 24 +++++ lua/plugins/dashboard.lua | 117 ++++++++++++++++++++ lua/plugins/dressing.lua | 42 ++++++++ lua/plugins/gitsigns.lua | 20 ++++ lua/plugins/indent-blankline.lua | 28 +++++ lua/plugins/lualine.lua | 82 ++++++++++++++ lua/plugins/luasnip.lua | 10 ++ lua/plugins/mini-bufremove.lua | 5 + lua/plugins/noice.lua | 35 ++++++ lua/plugins/nui.lua | 6 ++ lua/plugins/nvim-cmp.lua | 74 +++++++++++++ lua/plugins/nvim-lspconfig.lua | 177 +++++++++++++++++++++++++++++++ lua/plugins/nvim-notify.lua | 35 ++++++ lua/plugins/nvim-scrollview.lua | 10 ++ lua/plugins/nvim-tree.lua | 42 ++++++++ lua/plugins/nvim-ufo.lua | 25 +++++ lua/plugins/plenary.lua | 5 + lua/plugins/smart-splits.lua | 16 +++ lua/plugins/telescope.lua | 18 ++++ lua/plugins/todo-comments.lua | 16 +++ lua/plugins/toggleterm.lua | 15 +++ lua/plugins/tokyonight.lua | 23 ++++ lua/plugins/treesitter.lua | 83 +++++++++++++++ lua/plugins/trouble.lua | 7 ++ lua/plugins/vim-fugitive.lua | 5 + lua/plugins/vim-illuminate.lua | 33 ++++++ lua/plugins/which-key.lua | 32 ++++++ 33 files changed, 1183 insertions(+) create mode 100644 .gitignore create mode 100644 init.lua create mode 100644 lua/config/autocmds.lua create mode 100644 lua/config/keymaps.lua create mode 100644 lua/config/lazy.lua create mode 100644 lua/config/options.lua create mode 100644 lua/plugins/bufferline.lua create mode 100644 lua/plugins/dashboard.lua create mode 100644 lua/plugins/dressing.lua create mode 100644 lua/plugins/gitsigns.lua create mode 100644 lua/plugins/indent-blankline.lua create mode 100644 lua/plugins/lualine.lua create mode 100644 lua/plugins/luasnip.lua create mode 100644 lua/plugins/mini-bufremove.lua create mode 100644 lua/plugins/noice.lua create mode 100644 lua/plugins/nui.lua create mode 100644 lua/plugins/nvim-cmp.lua create mode 100644 lua/plugins/nvim-lspconfig.lua create mode 100644 lua/plugins/nvim-notify.lua create mode 100644 lua/plugins/nvim-scrollview.lua create mode 100644 lua/plugins/nvim-tree.lua create mode 100644 lua/plugins/nvim-ufo.lua create mode 100644 lua/plugins/plenary.lua create mode 100644 lua/plugins/smart-splits.lua create mode 100644 lua/plugins/telescope.lua create mode 100644 lua/plugins/todo-comments.lua create mode 100644 lua/plugins/toggleterm.lua create mode 100644 lua/plugins/tokyonight.lua create mode 100644 lua/plugins/treesitter.lua create mode 100644 lua/plugins/trouble.lua create mode 100644 lua/plugins/vim-fugitive.lua create mode 100644 lua/plugins/vim-illuminate.lua create mode 100644 lua/plugins/which-key.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f3a857e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +lazyvim.json +lazy-lock.json diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..4faaaf7 --- /dev/null +++ b/init.lua @@ -0,0 +1,2 @@ +require("config.lazy") +require("config.options") diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua new file mode 100644 index 0000000..e69de29 diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua new file mode 100644 index 0000000..75119a3 --- /dev/null +++ b/lua/config/keymaps.lua @@ -0,0 +1,21 @@ +local map = vim.keymap.set + +map({ 'n', 'i' }, '', 'Telescope', { noremap = true }) + +-- save file on +map({ "i", "x", "n", "s" }, "", "w", { desc = "Save file" }) + +-- Resize window using arrow keys +map("n", "", "resize +2", { desc = "Increase window height" }) +map("n", "", "resize -2", { desc = "Decrease window height" }) +map("n", "", "vertical resize -2", { desc = "Decrease window width" }) +map("n", "", "vertical resize +2", { desc = "Increase window width" }) + +-- new file +map("n", "", "enew", { desc = "New File" }) + +map({ 'n', 'i' }, '', 'u') +map({ 'n', 'i' }, '', 'redo') + +-- shift back command +map({ 'n', 'i' }, '', '<') diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua new file mode 100644 index 0000000..0c91ef5 --- /dev/null +++ b/lua/config/lazy.lua @@ -0,0 +1,115 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + -- bootstrap lazy.nvim + -- stylua: ignore + vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", + lazypath }) +end +vim.opt.rtp:prepend(vim.env.LAZY or lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + "LazyVim/LazyVim", + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + autocmds = true, -- lazyvim.config.autocmds + keymaps = true, -- lazyvim.config.keymaps + }, + news = { + -- When enabled, NEWS.md will be shown when changed. + -- This only contains big new features and breaking changes. + lazyvim = false, + -- Same but for Neovim's news.txt + neovim = false, + }, + -- icons used by other plugins + -- stylua: ignore + icons = { + misc = { + dots = "󰇘", + }, + dap = { + Stopped = { "󰁕 ", "DiagnosticWarn", "DapStoppedLine" }, + Breakpoint = " ", + BreakpointCondition = " ", + BreakpointRejected = { " ", "DiagnosticError" }, + LogPoint = ".>", + }, + diagnostics = { + Error = " ", + Warn = " ", + Hint = " ", + Info = " ", + }, + git = { + added = "+", + modified = "~", + removed = "-", + }, + kinds = { + Array = " ", + Boolean = "󰨙 ", + Class = " ", + Codeium = "󰘦 ", + Color = " ", + Control = " ", + Collapsed = " ", + Constant = "󰏿 ", + Constructor = " ", + Copilot = " ", + Enum = " ", + EnumMember = " ", + Event = " ", + Field = " ", + File = " ", + Folder = " ", + Function = "󰊕 ", + Interface = " ", + Key = " ", + Keyword = " ", + Method = "󰊕 ", + Module = " ", + Namespace = "󰦮 ", + Null = " ", + Number = "󰎠 ", + Object = " ", + Operator = " ", + Package = " ", + Property = " ", + Reference = " ", + Snippet = " ", + String = " ", + Struct = "󰆼 ", + TabNine = "󰏚 ", + Text = " ", + TypeParameter = " ", + Unit = " ", + Value = " ", + Variable = "󰀫 ", + }, + }, + checker = { enabled = true }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_pilugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/lua/config/options.lua b/lua/config/options.lua new file mode 100644 index 0000000..1f0a12f --- /dev/null +++ b/lua/config/options.lua @@ -0,0 +1,58 @@ +local opt = vim.opt + +opt.autowrite = true -- Enable auto write +opt.clipboard = "unnamedplus" -- Sync with system clipboard +opt.completeopt = "menu,menuone,noselect" +opt.conceallevel = 3 -- Hide * markup for bold and italic +opt.confirm = true -- Confirm to save changes before exiting modified buffer +opt.cursorline = true -- Enable highlighting of the current line +opt.expandtab = true -- Use spaces instead of tabs +opt.formatoptions = "jcroqlnt" -- tcqj +opt.grepformat = "%f:%l:%c:%m" +opt.grepprg = "rg --vimgrep" +opt.ignorecase = true -- Ignore case +opt.inccommand = "nosplit" -- preview incremental substitute +opt.laststatus = 3 -- global statusline +opt.list = true -- Show some invisible characters (tabs... +opt.mouse = "a" -- Enable mouse mode +opt.number = true -- Print line number +opt.pumblend = 10 -- Popup blend +opt.pumheight = 10 -- Maximum number of entries in a popup +opt.relativenumber = false -- Relative line numbers +opt.scrolloff = 4 -- Lines of context +opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp", "folds" } +opt.shiftround = true -- Round indent +opt.shiftwidth = 4 -- Size of an indent +opt.shortmess:append({ W = true, I = true, c = true, C = true }) +opt.showmode = false -- Dont show mode since we have a statusline +opt.sidescrolloff = 8 -- Columns of context +opt.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time +opt.smartcase = false -- Don't ignore case with capitals +opt.smartindent = true -- Insert indents automatically +opt.spelllang = { "en" } +opt.splitbelow = true -- Put new windows below current +opt.splitkeep = "screen" +opt.splitright = true -- Put new windows right of current +opt.tabstop = 4 -- Number of spaces tabs count for +opt.termguicolors = true -- True color support +opt.timeoutlen = 300 +opt.undofile = true +opt.foldcolumn = '1' +opt.foldlevel = 99 +opt.foldlevelstart = 99 +opt.showtabline = 2 +opt.foldenable = true +opt.undolevels = 10000 +opt.updatetime = 200 -- Save swap file and trigger CursorHold +opt.virtualedit = "block" -- Allow cursor to move where there is no text in visual block mode +opt.wildmode = "longest:full,full" -- Command-line completion mode +opt.winminwidth = 5 -- Minimum window width +opt.wrap = false -- Disable line wrap +opt.fillchars = { + foldopen = "", + foldclose = "", + fold = " ", + foldsep = " ", + diff = "╱", + eob = " ", +} diff --git a/lua/plugins/bufferline.lua b/lua/plugins/bufferline.lua new file mode 100644 index 0000000..2f2d71d --- /dev/null +++ b/lua/plugins/bufferline.lua @@ -0,0 +1,24 @@ +return { + { + "akinsho/bufferline.nvim", + dependencies = { + 'nvim-tree/nvim-web-devicons' + }, + opts = { + options = { + close_command = function(n) require("mini.bufremove").delete(n, false) end, + always_show_bufferline = true, + numbers = 'none', + separator_style = { "", "" }, + offsets = { + { + filetype = 'NvimTree', + text = '', + separator = true + } + }, + + }, + } + } +} diff --git a/lua/plugins/dashboard.lua b/lua/plugins/dashboard.lua new file mode 100644 index 0000000..6a7ea20 --- /dev/null +++ b/lua/plugins/dashboard.lua @@ -0,0 +1,117 @@ +return { + { + "nvimdev/dashboard-nvim", + event = "VimEnter", + opts = function() + local logo = [[ + ⠀⠀⠀⢠⣤⣤⣤⣤⣤⣤⣤⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣤⠀⣤⣤⡤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠ + ⠀⠀⠀⣾⣿⡿⠿⠿⠿⠿⠇⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⡇⢸⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⡟ + ⠀⠀⢰⣿⣿⠃⠀⠀⠀⠀⠀⣀⣀⣀⣀⡀⠀⠀⣼⣿⣿⠀⣿⣿⡿⠀⠀⣀⣀⡀⢠⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⠃ + ⠀⠀⣿⣿⡟⠀⠀⠀⠀⢰⣿⣿⡟⢻⣿⣿⡆⢀⣿⣿⡇⢸⣿⣿⠃⢰⣿⣿⠋⢀⣿⣿⡆⢸⣿⣿⠃⠀⣿⣿⡟⢰⣿⣿⣿⣿⣿ + ⠀⢠⣿⣿⣿⣶⣶⣶⠀⠿⠿⠿⠀⢸⣿⣿⠃⣼⣿⣿⠁⣾⣿⡿⠀⣿⡿⠃⢀⣾⣿⣿⠁⣾⣿⡿⠀⢰⣿⣿⠃⠀⣼⣿⣿⠃⠀ + ⠀⣾⣿⡿⠛⠛⠛⠃⠀⣠⣤⣴⣴⣿⣿⡟⢠⣿⣿⡏⢰⣿⣿⠃⡸⠋⠀⠀⠚⠛⠛⡋⢰⣿⣿⠃⠀⣿⣿⡟⠀⢠⣿⣿⡟⠀⠀ + ⢰⣿⣿⠇⠀⠀⠀⢀⣾⣿⡟⠉⣹⣿⣿⠁⣼⣿⣿⠁⣾⣿⡟⢠⣥⣤⣤⠄⠀⢀⣼⠁⣾⣿⡟⠀⣸⣿⣿⠃⠀⣼⣿⣿⠃⠀⠀ + ⣼⣿⣿⠀⠀⠀⠀⢸⣿⣿⠇⠀⣿⣿⡿⢠⣿⣿⡇⢸⣿⣿⠇⣸⣿⣿⡏⠀⢀⣿⡏⢸⣿⣿⡇⠀⣿⣿⡿⠀⢠⣿⣿⡏⠀⠀⠀ + ⣿⣿⡇⠀⠀⠀⠀⣿⣿⣿⣶⣾⣿⣿⠃⣼⣿⣿⠁⣾⣿⡿⠀⢿⣿⣿⠁⣰⣿⡿⠀⢸⣿⣿⣷⣾⣿⣿⠃⠀⢸⣿⣿⣷⡆⠀⠀ + ⠉⠀⠀⠀⠀⠀⠈⠙⠉⠀⠉⠉⠉⠀⠉⠉⠁⠀⠉⠉⠁⠀⠀⠉⢁⠞⠉⠁⠀⠀⠈⠉⠉⠀⠉⠉⠉⠀⠀⠀⠉⠉⠉⠁⠀⠀ + ]] + + logo = string.rep("\n", 8) .. logo .. "\n\n" + + local opts = { + theme = "doom", + hide = { + -- this is taken care of by lualine + -- enabling this messes up the actual laststatus setting after loading a file + statusline = false, + }, + config = { + header = vim.split(logo, "\n"), + -- stylua: ignore + center = { + { + action = "Telescope find_files", + desc = " Find file", + icon = + " ", + key = + "f" + }, + { + action = "ene | startinsert", + desc = " New file", + icon = + " ", + key = + "n" + }, + { + action = "Telescope oldfiles", + desc = " Recent files", + icon = + " ", + key = + "r" + }, + { + action = [[lua require("lazyvim.util").telescope.config_files()()]], + desc = " Config", + icon = + " ", + key = + "c" + }, + { + action = 'lua require("persistence").load()', + desc = " Restore Session", + icon = + " ", + key = + "s" + }, + { + action = "Lazy", + desc = " Lazy", + icon = + "󰒲 ", + key = + "l" + }, + { + action = "qa", + desc = " Quit", + icon = + " ", + key = + "q" + }, + }, + footer = function() + local stats = require("lazy").stats() + local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) + return { "⚡ Neovim loaded " .. + stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms" } + end, + }, + } + + for _, button in ipairs(opts.config.center) do + button.desc = button.desc .. string.rep(" ", 43 - #button.desc) + button.key_format = " %s" + end + + -- close Lazy and re-open when the dashboard is ready + if vim.o.filetype == "lazy" then + vim.cmd.close() + vim.api.nvim_create_autocmd("User", { + pattern = "DashboardLoaded", + callback = function() + require("lazy").show() + end, + }) + end + + return opts + end, + } +} diff --git a/lua/plugins/dressing.lua b/lua/plugins/dressing.lua new file mode 100644 index 0000000..39dff23 --- /dev/null +++ b/lua/plugins/dressing.lua @@ -0,0 +1,42 @@ +return { + { + "stevearc/dressing.nvim", + opts = { + input = { + enabled = true, + -- When true, will close the modal + insert_only = true, + -- These are passed to nvim_open_win + border = "rounded", + -- 'editor' and 'win' will default to being centered + relative = "cursor", + mappings = { + n = { + [""] = "Close", + [""] = "Confirm", + }, + i = { + [""] = "Close", + [""] = "Confirm", + [""] = "HistoryPrev", + [""] = "HistoryNext", + }, + }, + }, + select = { + -- Set to false to disable the vim.ui.select implementation + enabled = true, + nui = { + border = { + style = "rounded", + }, + } + }, + builtin = { + border = "rounded", + -- 'editor' and 'win' will default to being centered + relative = "editor", + } + } + } +} diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..a96c47c --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,20 @@ +return { + { + "lewis6991/gitsigns.nvim", + opts = { + signs = { + add = { text = "▎" }, + change = { text = "" }, + delete = { text = "" }, + topdelete = { text = "" }, + changedelete = { text = "▎" }, + untracked = { text = "▎" }, + }, + signcolumn = true, + preview_config = { + border = 'single' + } + } + } +} + diff --git a/lua/plugins/indent-blankline.lua b/lua/plugins/indent-blankline.lua new file mode 100644 index 0000000..cd426af --- /dev/null +++ b/lua/plugins/indent-blankline.lua @@ -0,0 +1,28 @@ +return { + { + "lukas-reineke/indent-blankline.nvim", + main = "ibl", + opts = { + indent = { + char = "▏", + tab_char = "▏", + }, + scope = { enabled = false }, + exclude = { + filetypes = { + "help", + "alpha", + "dashboard", + "neo-tree", + "Trouble", + "trouble", + "lazy", + "mason", + "notify", + "toggleterm", + "lazyterm", + }, + }, + } + }, +} diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..6c05953 --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,82 @@ +local icons = require("lazyvim.config").icons + +return { + { + "nvim-lualine/lualine.nvim", + opts = { + options = { + theme = 'tokyonight', + icons_enabled = true, + globalstatus = true, + section_separators = { left = '', right = '' }, + component_separators = { left = '', right = '' }, + disabled_filetypes = { + statusline = { + 'help', + 'startify', + 'dashboard', + 'packer', + 'neogitstatus', + -- 'NvimTree', + -- 'Trouble', + 'alpha', + 'lir', + -- 'Outline', + 'spectre_panel', + -- 'toggleterm', + 'qf', + } + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = { + 'branch', + draw_empty = true, + }, + lualine_c = { + { + 'diff', + symbols = { added = '+', modified = '~', removed = '-' }, + colored = true, + }, + { + "diagnostics", + sources = { 'nvim_lsp' }, + symbols = { + error = icons.diagnostics.Error, + warn = icons.diagnostics.Warn, + info = icons.diagnostics.Info, + hint = icons.diagnostics.Hint, + }, + colored = true + }, + { + 'filename', + file_status = true, + path = 0, + 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. + newfile = '[New]', -- Text to show for newly created file before first write + }, + }, + }, + lualine_x = { + 'encoding', + 'fileformat', + { + 'filetype', + colored = true, + } + }, + lualine_y = { 'progress' }, + lualine_z = { 'location' }, + }, + }, + }, + dependencies = { + 'nvim-tree/nvim-web-devicons' + } + }, +} diff --git a/lua/plugins/luasnip.lua b/lua/plugins/luasnip.lua new file mode 100644 index 0000000..edbee50 --- /dev/null +++ b/lua/plugins/luasnip.lua @@ -0,0 +1,10 @@ +return { + { + "L3MON4D3/LuaSnip", + opts = { + history = true, + delete_check_events = "TextChanged", + } + } +} + diff --git a/lua/plugins/mini-bufremove.lua b/lua/plugins/mini-bufremove.lua new file mode 100644 index 0000000..750b5a2 --- /dev/null +++ b/lua/plugins/mini-bufremove.lua @@ -0,0 +1,5 @@ +return { + { + "echasnovski/mini.bufremove", + }, +} \ No newline at end of file diff --git a/lua/plugins/noice.lua b/lua/plugins/noice.lua new file mode 100644 index 0000000..4690885 --- /dev/null +++ b/lua/plugins/noice.lua @@ -0,0 +1,35 @@ +return { + { + "folke/noice.nvim", + event = "VeryLazy", + opts = { + lsp = { + override = { + ["vim.lsp.util.convert_input_to_markdown_lines"] = true, + ["vim.lsp.util.stylize_markdown"] = true, + ["cmp.entry.get_documentation"] = true, + }, + }, + routes = { + { + filter = { + event = "msg_show", + any = { + { find = "%d+L, %d+B" }, + { find = "; after #%d+" }, + { find = "; before #%d+" }, + }, + }, + view = "mini", + }, + }, + presets = { + bottom_search = true, + command_palette = true, + long_message_to_split = true, + inc_rename = true, + lsp_doc_border = true, + }, + }, + } +} diff --git a/lua/plugins/nui.lua b/lua/plugins/nui.lua new file mode 100644 index 0000000..603b907 --- /dev/null +++ b/lua/plugins/nui.lua @@ -0,0 +1,6 @@ +return { + { + "MunifTanjim/nui.nvim", + lazy = true, + } +} diff --git a/lua/plugins/nvim-cmp.lua b/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..33a628e --- /dev/null +++ b/lua/plugins/nvim-cmp.lua @@ -0,0 +1,74 @@ +return { + { + "hrsh7th/nvim-cmp", + opts = function() + vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) + local cmp = require("cmp") + local defaults = require("cmp.config.default")() + return { + window = { + completion = { + border = "rounded", + }, + documentation = { + border = "rounded" + }, + }, + completion = { + completeopt = "menu,menuone,noinsert", + }, + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), + [""] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = function(fallback) + cmp.abort() + fallback() + end, + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "path" }, + }, { + { name = "buffer" }, + }), + formatting = { + format = function(_, item) + local icons = require("lazyvim.config").icons.kinds + if icons[item.kind] then + item.kind = icons[item.kind] .. item.kind + end + return item + end, + }, + experimental = { + ghost_text = { + hl_group = "CmpGhostText", + }, + }, + sorting = defaults.sorting, + } + end, + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-path", + "saadparwaiz1/cmp_luasnip", + } + } +} diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..527f0b4 --- /dev/null +++ b/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,177 @@ +return { + { + "neovim/nvim-lspconfig", + dependencies = { + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim" + }, + ---@class PluginLspOpts + opts = { + -- options for vim.diagnostic.config() + diagnostics = { + underline = true, + update_in_insert = false, + virtual_text = { + spacing = 4, + source = "if_many", + prefix = "●", + -- this will set set the prefix to a function that returns the diagnostics icon based on the severity + -- this only works on a recent 0.10.0 build. Will be set to "●" when not supported + -- prefix = "icons", + }, + severity_sort = true, + float = { + border = "rounded" + } + }, + -- Enable this to enable the builtin LSP inlay hints on Neovim >= 0.10.0 + -- Be aware that you also will need to properly configure your LSP server to + -- provide the inlay hints. + inlay_hints = { + enabled = false, + }, + -- add any global capabilities here + capabilities = {}, + -- options for vim.lsp.buf.format + -- `bufnr` and `filter` is handled by the LazyVim formatter, + -- but can be also overridden when specified + format = { + formatting_options = nil, + timeout_ms = nil, + }, + servers = { + lua_ls = { + mason = false + }, + rust_analyzer = { + mason = false + }, + }, + setup = { + } + }, + ---@param opts PluginLspOpts + config = function(_, opts) + local Util = require("lazyvim.util") + if Util.has("neoconf.nvim") then + local plugin = require("lazy.core.config").spec.plugins["neoconf.nvim"] + require("neoconf").setup(require("lazy.core.plugin").values(plugin, "opts", false)) + end + + -- setup autoformat + Util.format.register(Util.lsp.formatter()) + + -- deprectaed options + if opts.autoformat ~= nil then + vim.g.autoformat = opts.autoformat + Util.deprecate("nvim-lspconfig.opts.autoformat", "vim.g.autoformat") + end + + -- setup keymaps + Util.lsp.on_attach(function(client, buffer) + require("lazyvim.plugins.lsp.keymaps").on_attach(client, buffer) + end) + + local register_capability = vim.lsp.handlers["client/registerCapability"] + + vim.lsp.handlers["client/registerCapability"] = function(err, res, ctx) + local ret = register_capability(err, res, ctx) + local client_id = ctx.client_id + ---@type lsp.Client + local client = vim.lsp.get_client_by_id(client_id) + local buffer = vim.api.nvim_get_current_buf() + require("lazyvim.plugins.lsp.keymaps").on_attach(client, buffer) + return ret + end + + -- diagnostics + for name, icon in pairs(require("lazyvim.config").icons.diagnostics) do + name = "DiagnosticSign" .. name + vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" }) + end + + local inlay_hint = vim.lsp.buf.inlay_hint or vim.lsp.inlay_hint + + if opts.inlay_hints.enabled and inlay_hint then + Util.lsp.on_attach(function(client, buffer) + if client.supports_method("textDocument/inlayHint") then + inlay_hint(buffer, true) + end + end) + end + + if type(opts.diagnostics.virtual_text) == "table" and opts.diagnostics.virtual_text.prefix == "icons" then + opts.diagnostics.virtual_text.prefix = vim.fn.has("nvim-0.10.0") == 0 and "●" + or function(diagnostic) + local icons = require("lazyvim.config").icons.diagnostics + for d, icon in pairs(icons) do + if diagnostic.severity == vim.diagnostic.severity[d:upper()] then + return icon + end + end + end + end + + vim.diagnostic.config(vim.deepcopy(opts.diagnostics)) + + local servers = opts.servers + local has_cmp, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") + local capabilities = vim.tbl_deep_extend( + "force", + {}, + vim.lsp.protocol.make_client_capabilities(), + has_cmp and cmp_nvim_lsp.default_capabilities() or {}, + opts.capabilities or {} + ) + + local function setup(server) + local server_opts = vim.tbl_deep_extend("force", { + capabilities = vim.deepcopy(capabilities), + }, servers[server] or {}) + + if opts.setup[server] then + if opts.setup[server](server, server_opts) then + return + end + elseif opts.setup["*"] then + if opts.setup["*"](server, server_opts) then + return + end + end + require("lspconfig")[server].setup(server_opts) + end + + -- get all the servers that are available through mason-lspconfig + local have_mason, mlsp = pcall(require, "mason-lspconfig") + local all_mslp_servers = {} + if have_mason then + all_mslp_servers = vim.tbl_keys(require("mason-lspconfig.mappings.server").lspconfig_to_package) + end + + local ensure_installed = {} ---@type string[] + for server, server_opts in pairs(servers) do + if server_opts then + server_opts = server_opts == true and {} or server_opts + -- run manual setup if mason=false or if this is a server that cannot be installed with mason-lspconfig + if server_opts.mason == false or not vim.tbl_contains(all_mslp_servers, server) then + setup(server) + else + ensure_installed[#ensure_installed + 1] = server + end + end + end + + if have_mason then + mlsp.setup({ ensure_installed = ensure_installed, handlers = { setup } }) + end + + if Util.lsp.get_config("denols") and Util.lsp.get_config("tsserver") then + local is_deno = require("lspconfig.util").root_pattern("deno.json", "deno.jsonc") + Util.lsp.disable("tsserver", is_deno) + Util.lsp.disable("denols", function(root_dir) + return not is_deno(root_dir) + end) + end + end, + } +} diff --git a/lua/plugins/nvim-notify.lua b/lua/plugins/nvim-notify.lua new file mode 100644 index 0000000..eadc7aa --- /dev/null +++ b/lua/plugins/nvim-notify.lua @@ -0,0 +1,35 @@ +return { + { + "rcarriga/nvim-notify", + keys = { + { + "un", + function() + require("notify").dismiss({ silent = true, pending = true }) + end, + desc = "Dismiss all Notifications", + }, + }, + opts = { + timeout = 3000, + max_height = function() + return math.floor(vim.o.lines * 0.75) + end, + max_width = function() + return math.floor(vim.o.columns * 0.75) + end, + on_open = function(win) + vim.api.nvim_win_set_config(win, { zindex = 100 }) + end, + }, + init = function() + local Util = require("lazyvim.util") + -- when noice is not enabled, install notify on VeryLazy + if not Util.has("noice.nvim") then + Util.on_very_lazy(function() + vim.notify = require("notify") + end) + end + end, + } +} diff --git a/lua/plugins/nvim-scrollview.lua b/lua/plugins/nvim-scrollview.lua new file mode 100644 index 0000000..2668b5b --- /dev/null +++ b/lua/plugins/nvim-scrollview.lua @@ -0,0 +1,10 @@ +return { + { + "dstein64/nvim-scrollview", + opts = { + excluded_filetypes = { + 'dashboard' + }, + } + } +} \ No newline at end of file diff --git a/lua/plugins/nvim-tree.lua b/lua/plugins/nvim-tree.lua new file mode 100644 index 0000000..5d632d6 --- /dev/null +++ b/lua/plugins/nvim-tree.lua @@ -0,0 +1,42 @@ +return { + { + "nvim-tree/nvim-tree.lua", + opts = { + hijack_cursor = true, + renderer = { + full_name = true, + group_empty = true, + special_files = {}, + symlink_destination = false, + indent_markers = { + enable = true, + }, + icons = { + git_placement = "signcolumn", + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + }, + }, + }, + update_focused_file = { + enable = true, + update_root = true, + ignore_list = { "help" }, + }, + diagnostics = { + enable = true, + show_on_dirs = true, + icons = { + hint = "", + info = "", + warning = "", + error = "", + } + }, + } + }, + +} \ No newline at end of file diff --git a/lua/plugins/nvim-ufo.lua b/lua/plugins/nvim-ufo.lua new file mode 100644 index 0000000..da4e99a --- /dev/null +++ b/lua/plugins/nvim-ufo.lua @@ -0,0 +1,25 @@ +return { + { + "kevinhwang91/nvim-ufo", + event = { + "InsertEnter" + }, + dependencies = { + "kevinhwang91/promise-async" + }, + opts = { + preview = { + mappings = { + scrollB = "", + scrollF = "", + scrollU = "", + scrollD = "", + }, + }, + -- register treesitter as source for scopes + provider_selector = function(bufnr, filetype, buftype) + return {'treesitter', 'indent'} + end + } + } +} diff --git a/lua/plugins/plenary.lua b/lua/plugins/plenary.lua new file mode 100644 index 0000000..2b0f8b0 --- /dev/null +++ b/lua/plugins/plenary.lua @@ -0,0 +1,5 @@ +return { + { + 'nvim-lua/plenary.nvim' + } +} \ No newline at end of file diff --git a/lua/plugins/smart-splits.lua b/lua/plugins/smart-splits.lua new file mode 100644 index 0000000..ad5d5f9 --- /dev/null +++ b/lua/plugins/smart-splits.lua @@ -0,0 +1,16 @@ +return { + { + "mrjones2014/smart-splits.nvim", + opts = { + ignored_filetypes = { + "nofile", + "quickfix", + "qf", + "prompt" + }, + ignored_buftypes = { + "nofile" + } + }, + } +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua new file mode 100644 index 0000000..7f6b1a6 --- /dev/null +++ b/lua/plugins/telescope.lua @@ -0,0 +1,18 @@ +return { + { + "nvim-telescope/telescope.nvim", + opts = { + defaults = { + layout_strategy = "horizontal", + layout_config = { prompt_position = "top" }, + sorting_strategy = "ascending", + winblend = 0, + }, + }, + dependencies = { + "sharkdp/fd", + "nvim-lua/plenary.nvim", + 'nvim-tree/nvim-web-devicons' + }, + }, +} \ No newline at end of file diff --git a/lua/plugins/todo-comments.lua b/lua/plugins/todo-comments.lua new file mode 100644 index 0000000..18872d4 --- /dev/null +++ b/lua/plugins/todo-comments.lua @@ -0,0 +1,16 @@ +return { + { + "folke/todo-comments.nvim", + cmd = { "TodoTrouble", "TodoTelescope" }, + config = true, + -- stylua: ignore + keys = { + { "]t", function() require("todo-comments").jump_next() end, desc = "Next todo comment" }, + { "[t", function() require("todo-comments").jump_prev() end, desc = "Previous todo comment" }, + { "xt", "TodoTrouble", desc = "Todo (Trouble)" }, + { "xT", "TodoTrouble keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme (Trouble)" }, + { "st", "TodoTelescope", desc = "Todo" }, + { "sT", "TodoTelescope keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme" }, + }, + } +} diff --git a/lua/plugins/toggleterm.lua b/lua/plugins/toggleterm.lua new file mode 100644 index 0000000..1ce0418 --- /dev/null +++ b/lua/plugins/toggleterm.lua @@ -0,0 +1,15 @@ +return { + { + "akinsho/toggleterm.nvim", + opts = { + open_mapping = '', + start_in_insert = true, + direction = 'float', + shade_terminals = true, + shading_factor = -30, + float_opts = { + border = 'curved', + }, + }, + }, +} diff --git a/lua/plugins/tokyonight.lua b/lua/plugins/tokyonight.lua new file mode 100644 index 0000000..6208676 --- /dev/null +++ b/lua/plugins/tokyonight.lua @@ -0,0 +1,23 @@ +return { + { + "folke/tokyonight.nvim", + lazy = false, + priority = 1000, + opts = { + style = "night", + transparent = true, + styles = { + sidebars = "transparent", + floats = "transparent", + }, + sidebars = { "qf", "NvimTree", "help" }, + }, + }, + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "tokyonight", + }, + } +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..2bdba20 --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,83 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + version = false, -- last release is way too old and doesn't work on Windows + build = ":TSUpdate", + dependencies = { + "nvim-treesitter/nvim-treesitter-textobjects", + }, + cmd = { + "TSUpdateSync", + "TSUpdate", + "TSInstall" + }, + opts = { + autotag = { + enable = true + }, + highlight = { + enable = true + }, + indent = { + enable = true + }, + ensure_installed = { + "bash", + "c", + "diff", + "html", + "javascript", + "jsdoc", + "json", + "jsonc", + "lua", + "luadoc", + "luap", + "markdown", + "markdown_inline", + "python", + "query", + "regex", + "toml", + "tsx", + "typescript", + "vim", + "vimdoc", + "xml", + "yaml", + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = false, + node_decremental = "", + }, + }, + textobjects = { + move = { + enable = true, + goto_next_start = { ["]f"] = "@function.outer", ["]c"] = "@class.outer" }, + goto_next_end = { ["]F"] = "@function.outer", ["]C"] = "@class.outer" }, + goto_previous_start = { ["[f"] = "@function.outer", ["[c"] = "@class.outer" }, + goto_previous_end = { ["[F"] = "@function.outer", ["[C"] = "@class.outer" }, + }, + }, + }, + config = function(_, opts) + if type(opts.ensure_installed) == "table" then + ---@type table + local added = {} + opts.ensure_installed = vim.tbl_filter(function(lang) + if added[lang] then + return false + end + added[lang] = true + return true + end, opts.ensure_installed) + end + require("nvim-treesitter.configs").setup(opts) + end, + } +} diff --git a/lua/plugins/trouble.lua b/lua/plugins/trouble.lua new file mode 100644 index 0000000..b525180 --- /dev/null +++ b/lua/plugins/trouble.lua @@ -0,0 +1,7 @@ +return { + { + "folke/trouble.nvim", + opts = { + }, + } +} \ No newline at end of file diff --git a/lua/plugins/vim-fugitive.lua b/lua/plugins/vim-fugitive.lua new file mode 100644 index 0000000..c17bbba --- /dev/null +++ b/lua/plugins/vim-fugitive.lua @@ -0,0 +1,5 @@ +return { + { + "tpope/vim-fugitive", + } +} diff --git a/lua/plugins/vim-illuminate.lua b/lua/plugins/vim-illuminate.lua new file mode 100644 index 0000000..04169c8 --- /dev/null +++ b/lua/plugins/vim-illuminate.lua @@ -0,0 +1,33 @@ +return { + { + "RRethy/vim-illuminate", + opts = { + delay = 200, + large_file_cutoff = 2000, + large_file_overrides = { + providers = { "lsp" }, + }, + }, + config = function(_, opts) + require("illuminate").configure(opts) + + local function map(key, dir, buffer) + vim.keymap.set("n", key, function() + require("illuminate")["goto_" .. dir .. "_reference"](false) + end, { desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", buffer = buffer }) + end + + map("]]", "next") + map("[[", "prev") + + -- also set it after loading ftplugins, since a lot overwrite [[ and ]] + vim.api.nvim_create_autocmd("FileType", { + callback = function() + local buffer = vim.api.nvim_get_current_buf() + map("]]", "next", buffer) + map("[[", "prev", buffer) + end, + }) + end, + } +} diff --git a/lua/plugins/which-key.lua b/lua/plugins/which-key.lua new file mode 100644 index 0000000..fef4d12 --- /dev/null +++ b/lua/plugins/which-key.lua @@ -0,0 +1,32 @@ +return { + { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + plugins = { spelling = true }, + defaults = { + mode = { "n", "v" }, + ["g"] = { name = "+goto" }, + ["gs"] = { name = "+surround" }, + ["]"] = { name = "+next" }, + ["["] = { name = "+prev" }, + [""] = { name = "+tabs" }, + ["b"] = { name = "+buffer" }, + ["c"] = { name = "+code" }, + ["f"] = { name = "+file/find" }, + ["g"] = { name = "+git" }, + ["gh"] = { name = "+hunks" }, + ["q"] = { name = "+quit/session" }, + ["s"] = { name = "+search" }, + ["u"] = { name = "+ui" }, + ["w"] = { name = "+windows" }, + ["x"] = { name = "+diagnostics/quickfix" }, + }, + }, + config = function(_, opts) + local wk = require("which-key") + wk.setup(opts) + wk.register(opts.defaults) + end, + } +} \ No newline at end of file