return { { "preservim/vimux" }, { "christoomey/vim-tmux-navigator", cmd = { "TmuxNavigateLeft", "TmuxNavigateDown", "TmuxNavigateUp", "TmuxNavigateRight" }, keys = { "", "", "", "" }, }, { "JoosepAlviste/nvim-ts-context-commentstring" }, { "nvim-treesitter/nvim-treesitter-textobjects" }, { "mrjones2014/nvim-ts-rainbow" }, { "nvim-treesitter/nvim-treesitter-context" }, { "glepnir/lspsaga.nvim", event = "BufRead", cmd = { "Lspsaga" }, config = function() require("lspsaga").setup({}) end, dependencies = { { "nvim-tree/nvim-web-devicons" }, { "nvim-treesitter/nvim-treesitter" }, }, }, -- Copilot { "zbirenbaum/copilot.lua", event = "VimEnter", config = function() vim.defer_fn(function() require("copilot").setup({ suggestion = { keymap = { accept = "", accept_word = false, accept_line = false, next = "", prev = "", dismiss = "", }, -- auto_trigger = true, }, }) end, 100) end, }, { "zbirenbaum/copilot-cmp", event = "VeryLazy", dependencies = { "zbirenbaum/copilot.lua" }, config = function() require("copilot_cmp").setup() end, }, -- Git { "tpope/vim-fugitive" }, { "tpope/vim-rhubarb" }, { "lewis6991/gitsigns.nvim" }, -- theme -- { -- "sainnhe/everforest", -- lazy = false, -- priority = 1000, -- config = function() -- vim.g.everforest_background = "hard" -- vim.cmd([[colorscheme everforest]]) -- end, -- }, -- Others { "Pocco81/TrueZen.nvim", cmd = { "TZNarrow", "TZFocus", "TZMinimalist", "TZAtaraxis" }, config = true, }, { "nathom/filetype.nvim", opts = function() return { overrides = { extensions = { mdx = "markdown", }, function_complex = { [".*blade.php"] = function() vim.bo.filetype = "blade" end, }, }, } end, }, { "mg979/vim-visual-multi", -- keys = { "" }, lazy = false, init = function(_) vim.g.VM_Mono_hl = "Substitute" vim.g.VM_Cursor_hl = "IncSearch" vim.g.VM_maps = { ["Find Under"] = "", ["Find Subword Under"] = "", ["Next"] = "n", ["Previous"] = "N", ["Skip"] = "q", -- ["Add Cursor Down"] = "", -- ["Add Cursor Up"] = "", -- ["Select l"] = "", -- ["Select r"] = "", -- ["Add Cursor at Position"] = [[\\\]], ["Select All"] = "", ["Visual All"] = "", ["Exit"] = "", } end, }, { "akinsho/toggleterm.nvim", event = "VeryLazy", cmd = { "ToggleTerm" }, version = "*", config = true, --opts = function() -- require("toggleterm").setup() --end, }, { "tpope/vim-surround", dependencies = { "tpope/vim-repeat", }, }, { "iamcco/markdown-preview.nvim", build = "cd app && npm install", config = function() vim.g.mkdp_filetypes = { "markdown" } end, ft = { "markdown" }, }, { "ggandor/leap.nvim", config = function() require("leap").add_default_mappings() end, }, -- LSPs { "neovim/nvim-lspconfig", config = function(_, _) require("plugins.configs.lspconfig") local on_attach = require("plugins.configs.lspconfig").on_attach local capabilities = require("plugins.configs.lspconfig").capabilities local lspconfig = require("lspconfig") local servers = { -- lua stuff "lua_ls", -- shell "bashls", -- "awk_ls", -- c "clangd", -- rust "rust_analyzer", -- web dev "cssls", "html", "tsserver", "jsonls", "tailwindcss", "eslint", -- python "pyright", -- yaml "yamlls", } for _, lsp in ipairs(servers) do lspconfig[lsp].setup({ on_attach = on_attach, capabilities = capabilities, }) end end, }, { "jose-elias-alvarez/null-ls.nvim", event = { "BufReadPre", "BufNewFile" }, dependencies = { "neovim/nvim-lspconfig", "mason.nvim", }, opts = function() -- null-ls -- to setup format on save local null_ls = require("null-ls") local formatting = null_ls.builtins.formatting -- to setup formatters local diagnostics = null_ls.builtins.diagnostics -- to setup linters local code_actions = null_ls.builtins.code_actions -- to setup code actions local completion = null_ls.builtins.completion -- to setup completions local lsp_formatting_group = vim.api.nvim_create_augroup("LspFormatting", {}) -- configure null_ls return { debug = false, -- setup formatters & linters sources = { completion.spell, code_actions.gitsigns, -- lua formatting.stylua, -- web stuffs formatting.prettier.with({ extra_filetypes = { "svelte" }, }), -- js/ts formatter diagnostics.eslint_d.with({ -- js/ts linter -- only enable eslint if root has .eslintrc.js (not in youtube nvim video) condition = function(utils) return utils.root_has_file(".eslintrc.js") or utils.root_has_file(".eslintrc.cjs") -- change file extension if you use something else end, filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "svelte", }, }), code_actions.eslint_d.with({ filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "svelte", }, }), -- php diagnostics.php, formatting.blade_formatter, -- formatting.pint, -- python formatting.black, -- shell formatting.shfmt, formatting.jq, -- rust formatting.rustfmt, -- c / c++ formatting.clang_format, -- nix formatting.nixpkgs_fmt, -- formatting.nixfmt, -- config formatting.taplo, }, -- configure format on save on_attach = function(current_client, bufnr) if current_client.supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = lsp_formatting_group, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = lsp_formatting_group, buffer = bufnr, callback = function() -- print("HERE 1", current_client.name) -- vim.lsp.buf.formatting_sync() vim.lsp.buf.format({ bufnr = bufnr, filter = function(client) -- print("HERE 2", current_client.name, client.name) -- only use null-ls for formatting instead of lsp server return client.name == "null-ls" end, }) end, }) end end, } end, }, { "williamboman/mason.nvim", opts = function() return { ensure_installed = { -- lua stuff "lua-language-server", "stylua", -- shell "bash-language-server", -- "awk-language-server", "shfmt", "shellcheck", -- c "clangd", -- rust "rust-analyzer", "rustfmt", -- web dev "css-lsp", "html-lsp", "typescript-language-server", "json-lsp", "tailwindcss-language-server", "eslint-lsp", -- python "pyright", -- javascript "prettier", "prettierd", -- yaml "yaml-language-server", -- toml "taplo", }, } end, }, { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) opts.ignore_install = { 'help' } return vim.tbl_deep_extend("force", require("plugins.configs.treesitter"), { ensure_installed = { "c", "cpp", "css", "go", "lua", "python", "rust", "typescript", "svelte", "html", "java", "help", "nix", "markdown", "markdown_inline", }, }) end, }, { "hrsh7th/nvim-cmp", opts = function() return vim.tbl_deep_extend("force", require("plugins.configs.cmp"), { sources = { { name = "luasnip" }, { name = "copilot" }, { name = "nvim_lsp" }, { name = "buffer" }, { name = "nvim_lua" }, { name = "path" }, }, }) end, }, }