require("lz.n").load({ { "mini.nvim", event = "VimEnter", after = function() require("mini.ai").setup({ n_lines = 500 }) require("mini.surround").setup() require("mini.pairs").setup() local icons = require("mini.icons") icons.setup() icons.mock_nvim_web_devicons() end, }, { "guess-indent.nvim", event = { "BufReadPre", "BufNewFile" }, after = function() require("guess-indent").setup({}) end, }, { "nvim-treesitter", event = "FileType", after = function() require("nvim-treesitter").setup({}) vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("lux-treesitter", { clear = true }), callback = function(args) if vim.bo[args.buf].buftype ~= "" then return end if pcall(vim.treesitter.start, args.buf) then vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" end end, }) end, }, { "nvim-treesitter-textobjects", event = "FileType", after = function() require("nvim-treesitter-textobjects").setup({ select = { lookahead = true }, move = { set_jumps = true }, }) local select = require("nvim-treesitter-textobjects.select") local move = require("nvim-treesitter-textobjects.move") local objects = { { "if", "@function.inner", "Select inner function" }, { "af", "@function.outer", "Select outer function" }, { "ic", "@class.inner", "Select inner class" }, { "ac", "@class.outer", "Select outer class" }, { "ia", "@parameter.inner", "Select inner parameter" }, { "aa", "@parameter.outer", "Select outer parameter" }, { "ii", "@conditional.inner", "Select inner conditional" }, { "ai", "@conditional.outer", "Select outer conditional" }, { "il", "@loop.inner", "Select inner loop" }, { "al", "@loop.outer", "Select outer loop" }, { "ib", "@block.inner", "Select inner block" }, { "ab", "@block.outer", "Select outer block" }, } for _, object in ipairs(objects) do vim.keymap.set({ "o", "x" }, object[1], function() select.select_textobject(object[2], "textobjects") end, { desc = object[3] }) end local motions = { { "[f", move.goto_previous_start, "@function.outer", "Previous function" }, { "]f", move.goto_next_start, "@function.outer", "Next function" }, { "[c", move.goto_previous_start, "@class.outer", "Previous class" }, { "]c", move.goto_next_start, "@class.outer", "Next class" }, { "[a", move.goto_previous_start, "@parameter.inner", "Previous parameter" }, { "]a", move.goto_next_start, "@parameter.inner", "Next parameter" }, } for _, motion in ipairs(motions) do vim.keymap.set({ "n", "x", "o" }, motion[1], function() motion[2](motion[3], "textobjects") end, { desc = motion[4] }) end end, }, { "rainbow-delimiters.nvim", event = "FileType", after = function() require("rainbow-delimiters.setup").setup({}) end, }, { "nvim-ts-autotag", ft = { "svelte", "astro", "html", "javascriptreact", "typescriptreact" }, after = function() local enabled = { enable_close = true, enable_rename = true } require("nvim-ts-autotag").setup({ opts = { enable_close = false, enable_rename = false }, per_filetype = { svelte = enabled, astro = enabled, html = enabled, javascriptreact = enabled, typescriptreact = enabled, }, }) end, }, { "grug-far.nvim", cmd = "GrugFar", keys = { { "cR", function() require("grug-far").open({ prefills = { search = vim.fn.expand(""), paths = require("project").root(), }, }) end, desc = "Replace across project", }, { "cR", function() require("grug-far").with_visual_selection({ prefills = { paths = require("project").root() }, }) end, mode = "x", desc = "Replace selection across project", }, }, }, })