-- Clone 'mini.nvim' manually in a way that it gets managed by 'mini.deps' local path_package = vim.fn.stdpath('data') .. '/site/' local mini_path = path_package .. 'pack/deps/start/mini.nvim' if not vim.loop.fs_stat(mini_path) then vim.cmd('echo "Installing `mini.nvim`" | redraw') local clone_cmd = { 'git', 'clone', '--filter=blob:none', 'https://github.com/echasnovski/mini.nvim', mini_path } vim.fn.system(clone_cmd) vim.cmd('packadd mini.nvim | helptags ALL') vim.cmd('echo "Installed `mini.nvim`" | redraw') end -- Set up 'mini.deps' (customize to your liking) require('mini.deps').setup({ path = { package = path_package } }) -- Use 'mini.deps'. `now()` and `later()` are helpers for a safe two-stage -- startup and are optional. local add, now, later = MiniDeps.add, MiniDeps.now, MiniDeps.later -- vim options now(function() local opts = { termguicolors = true, -- enable 24 bit colors -- tabs look like 4 spaces { expandtab = true, tabstop = 4, shiftwidth = 4, softtabstop = 4, -- } cursorline = true, -- show active line number = true, -- show line numbers mouse = 'c', -- disable mouse laststatus = 2, -- always show the status line autoindent = true, -- turn on autoindent smarttab = true, -- turn on smart tabs incsearch = true, -- turn on incremental search ruler = true, -- show ruler on page lazyredraw = true, -- make large file bearable regexpengine = 1, -- make searching large files bearable background = 'dark' -- use dark theme } for opt, val in pairs(opts) do vim.o[opt] = val end end) -- color themes now(function() -- gruvbox { add({ source = 'ellisonleao/gruvbox.nvim', }) require('gruvbox').setup({ contrast = 'hard' }) -- } gruvbox -- dracula { add({ source = 'maxmx03/dracula.nvim', checkout = '2f396b6ba988ad4b3961c2e40d1b9ae436b8c26c', depends = { 'ssh://git@git.0xdad.com/tblyler/dracula-pro.nvim.git' } }) local dracula = require('dracula') local draculapro = require('draculapro') draculapro.setup({ theme = 'morbius' }) dracula.setup({ dracula_pro = draculapro, colors = draculapro.colors }) -- } dracula vim.cmd.colorscheme('gruvbox') end) -- mini.nvim plugins { -- safely execute immediately now(function() local animate = require('mini.animate') local timing = animate.gen_timing.linear({ duration = duration, unit = 'total' }) animate.setup({ cursor = { timing = timing }, scroll = { timing = timing }, resize = { timing = timing }, open = { timing = timing }, close = { timing = timing } }) end) now(function() require('mini.notify').setup() vim.notify = require('mini.notify').make_notify() end) now(function() local setups = { bufremove = {}, comment = {}, -- maybe later? completion = {}, cursorword = {}, icons = {}, -- vet me jump = {}, jump2d = {}, pairs = {}, pick = {}, -- vet and maybe later? tabline = {}, statusline = {}, surround = {}, -- maybe later? trailspace = {}, } for plugin, setup in pairs(setups) do require('mini.' .. plugin).setup(setup) end local function jumpbefore() MiniJump2d.start({ allowed_lines = { cursor_after = false } }) end local function jumpafter() MiniJump2d.start({ allowed_lines = { cursor_before = false } }) end vim.keymap.set('n', 'k', jumpbefore, { noremap = true, silent = true }) vim.keymap.set('n', 'j', jumpafter, { noremap = true, silent = true }) vim.api.nvim_create_user_command( 'Bd', function(opts) MiniBufremove.delete() end, {} ) vim.api.nvim_create_user_command( 'FixWhitespace', function(opts) MiniTrailspace.trim() end, {} ) end) later(function() local setups = { } for plugin, setup in pairs(setups) do require('mini.' .. plugin).setup(setup) end end) -- } mini.nvim plugins -- non mini.nvim plugins { -- Git { now(function() add({ source = 'lewis6991/gitsigns.nvim', }) require('gitsigns').setup({ current_line_blame = true, current_line_blame_opts = { virt_text = true, delay = 0, } }) add({ source = "tpope/vim-fugitive", }) end) -- } Git -- fzf { later(function() add({ source = 'ibhagwan/fzf-lua' }) require("fzf-lua").setup({}) vim.keymap.set("n", "", require('fzf-lua').files, { desc = "Fzf Files" }) end) -- } -- which key { later(function() add({ source = 'folke/which-key.nvim' }) end) -- } -- legacy stuff { now(function() add({ source = 'tpope/vim-surround' }) end) -- } surround -- LSP { later(function() add({ source = 'neovim/nvim-lspconfig', }) add({ source = 'williamboman/mason.nvim', }) add({ source = 'williamboman/mason-lspconfig.nvim' }) local on_attach = function(client, buffnr) local lsp_key = function(lhs, rhs, desc) vim.keymap.set('n', lhs, rhs, { silent = true, buffer = buffnr, desc = desc }) end lsp_key("lr", vim.lsp.buf.rename, "Rename symbol") lsp_key("la", vim.lsp.buf.code_action, "Code action") lsp_key("ld", vim.lsp.buf.type_definition, "Type definition") lsp_key("gd", vim.lsp.buf.definition, "Goto Definition") lsp_key("gr", vim.lsp.buf.references, "Goto References") lsp_key("gI", vim.lsp.buf.implementation, "Goto Implementation") lsp_key("gD", vim.lsp.buf.declaration, "Goto Declaration") end require("mason").setup() require("mason-lspconfig").setup({ handlers = { function (server_name) require('lspconfig')[server_name].setup({ on_attach = on_attach }) end } }) -- make sure LSPs are autostarted if already installed at neovim start for _, server_name in pairs(require('mason-lspconfig').get_installed_servers()) do require('lspconfig')[server_name].setup({ on_attach = on_attach }) end add({ source = 'folke/trouble.nvim' }) require('trouble').setup() vim.keymap.set('n', 'xx', 'Trouble diagnostics toggle', { noremap = true, silent = true }) vim.keymap.set('n', 'xd', 'Trouble diagnostics toggle filter.buf=0', { noremap = true, silent = true }) end) -- } LSP -- treesitter { later(function() add({ source = 'nvim-treesitter/nvim-treesitter', -- Use 'master' while monitoring updates in 'main' checkout = 'master', monitor = 'main', -- Perform action after every checkout hooks = { post_checkout = function() vim.cmd('TSUpdate') end }, }) -- Possible to immediately execute code which depends on the added plugin require('nvim-treesitter.configs').setup({ ensure_installed = { 'bash', 'c', 'c_sharp', 'comment', 'cpp', 'cpp', 'css', 'diff', 'dockerfile', 'earthfile', 'fish', 'git_config', 'git_rebase', 'gitattributes', 'gitcommit', 'gitignore', 'go', 'gomod', 'gosum', 'gpg', 'html', 'http', 'ini', 'java', 'javascript', 'jq', 'jsdoc', 'json', 'kotlin', 'lua', 'luadoc', 'make', 'markdown', 'markdown_inline', 'nginx', 'php', 'proto', 'python', 'regex', 'robots', 'rust', 'scss', 'sql', 'ssh_config', 'terraform', 'tmux', 'toml', 'tsv', 'tsx', 'typescript', 'vimdoc', 'xml', 'yaml', }, sync_install = false, auto_install = true, highlight = { enable = true }, indent = { enable = true }, incremental_selection = { enable = true }, }) -- show indentations add({ source = 'lukas-reineke/indent-blankline.nvim' }) require("ibl").setup({ indent = { char = "▏", highlight = { "Label" }, }, scope = { highlight = { "Function" }, } }) end) -- } treesitter -- } non mini.nvim plugins