-- ~/.config/nvim/lua/plugins/init.lua return { -- Colorschemes { "gruvbox-community/gruvbox", priority = 1000 }, { "folke/tokyonight.nvim", priority = 1000 }, { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, -- Auto-save { "okuuva/auto-save.nvim", version = "v1.*", event = { "InsertLeave", "TextChanged" }, init = function() local group = vim.api.nvim_create_augroup("autosave_message", { clear = true }) vim.api.nvim_create_autocmd("User", { pattern = "AutoSaveWritePost", group = group, callback = function(opts) local saved_buffer = opts.data and opts.data.saved_buffer if not saved_buffer then return end local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(saved_buffer), ":t") if filename == "" then filename = "[No Name]" end vim.notify("AutoSave: " .. filename, vim.log.levels.INFO, { title = "auto-save.nvim" }) end, }) end, opts = { enabled = true, trigger_events = { immediate_save = { "BufLeave", "FocusLost" }, defer_save = { "InsertLeave", "TextChanged" }, cancel_deferred_save = { "InsertEnter" }, }, }, }, -- File explorer { import = "plugins.nvim-tree" }, -- Treesitter { import = "plugins.treesitter" }, -- Rainbow delimiters { import = "plugins.rainbow_delimiters" }, -- Git integration { "lewis6991/gitsigns.nvim", event = { "BufReadPre", "BufNewFile" }, opts = { signs = { add = { text = "│" }, change = { text = "│" }, delete = { text = "_" }, topdelete = { text = "‾" }, changedelete = { text = "~" }, untracked = { text = "┆" }, }, signcolumn = false, -- Disable signs by default numhl = false, -- Disable number highlights by default linehl = false, -- Disable line highlights by default word_diff = false, current_line_blame = false, } }, { "kdheepak/lazygit.nvim", dependencies = { "nvim-lua/plenary.nvim" }, cmd = { "LazyGit", "LazyGitConfig", "LazyGitCurrentFile", "LazyGitFilter", "LazyGitFilterCurrentFile", }, keys = { { "gg", "LazyGit", desc = "LazyGit" }, }, }, -- Status line { import = "plugins.lualine" }, -- Tmux statusline generator (run :TmuxlineSnapshot ~/.config/tmux/themes/tmuxline.tmux) { "edkolev/tmuxline.vim", cmd = { "Tmuxline", "TmuxlineSnapshot" }, config = function() vim.g.tmuxline_separators = { left = "", left_alt = "", right = "", right_alt = "", space = " ", } -- Tokyo Night Moon colors, transparent background vim.g.tmuxline_theme = { a = { "#1e2030", "#82aaff" }, b = { "#82aaff", "default" }, c = { "#636da6", "default" }, x = { "#636da6", "default" }, y = { "#82aaff", "default" }, z = { "#1e2030", "#82aaff" }, win = { "#636da6", "default" }, cwin = { "#1e2030", "#c099ff" }, bg = { "#636da6", "default" }, } vim.g.tmuxline_preset = { a = "#S", win = "#I #W", cwin = "#I #W", y = "%H:%M", z = "%d %b", } end, }, -- Productivity { "windwp/nvim-autopairs", event = "InsertEnter", opts = {} }, { "tpope/vim-surround", event = "VeryLazy" }, -- Flash: jump anywhere with 2 chars (replaces f/t for long range) { "folke/flash.nvim", event = "VeryLazy", opts = {}, keys = { { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash jump" }, { "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash treesitter" }, }, }, -- Which-key: show available keybindings after leader { "folke/which-key.nvim", event = "VeryLazy", opts = { spec = { { "f", group = "find" }, { "g", group = "git" }, { "s", group = "split/spell" }, { "w", group = "write" }, { "d", group = "date" }, { "l", group = "lsp" }, }, }, }, -- Snacks: notifications + quality-of-life utilities { "folke/snacks.nvim", priority = 1000, lazy = false, opts = { notifier = { enabled = true }, words = { enabled = true }, }, }, -- -- Tmux navigation -- { "christoomey/vim-tmux-navigator" }, -- LaTeX { import = "plugins.vimtex" }, -- Org-mode { "nvim-orgmode/orgmode", dependencies = { "nvim-treesitter/nvim-treesitter" }, opts = {}, }, -- Telescope { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, keys = { { "ff", ":Telescope find_files", desc = "Find files" }, { "fg", ":Telescope live_grep", desc = "Live grep" }, { "fb", ":Telescope buffers", desc = "Buffers" }, { "fh", ":Telescope help_tags", desc = "Help tags" }, }, }, -- Yazi file manager { "mikavilpas/yazi.nvim", keys = { { "y", ":Yazi", desc = "Open Yazi" }, }, opts = { open_for_directories = false, keymaps = { show_help = "", }, }, }, -- Markdown { "SidOfc/mkdx", ft = "markdown" }, { "MeanderingProgrammer/render-markdown.nvim", dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons" }, ft = { "markdown", "norg", "rmd", "org" }, config = function() require('render-markdown').setup({ heading = { enabled = true, sign = true, position = 'overlay', icons = { '󰲡 ', '󰲣 ', '󰲥 ', '󰲧 ', '󰲩 ', '󰲫 ' }, backgrounds = { 'RenderMarkdownH1Bg', 'RenderMarkdownH2Bg', 'RenderMarkdownH3Bg', 'RenderMarkdownH4Bg', 'RenderMarkdownH5Bg', 'RenderMarkdownH6Bg', }, foregrounds = { 'RenderMarkdownH1', 'RenderMarkdownH2', 'RenderMarkdownH3', 'RenderMarkdownH4', 'RenderMarkdownH5', 'RenderMarkdownH6', }, }, }) end, }, -- Code formatting { import = "plugins.prettier" }, -- Copilot { "zbirenbaum/copilot.lua", event = "InsertEnter", opts = { suggestion = { enabled = true }, panel = { enabled = true }, }, }, -- Indent guides { "lukas-reineke/indent-blankline.nvim", main = "ibl", event = { "BufReadPost", "BufNewFile" }, opts = {}, }, -- UFO (folding) { "kevinhwang91/nvim-ufo", dependencies = { "kevinhwang91/promise-async" }, event = "BufReadPost", config = function() vim.o.foldcolumn = "0" vim.o.foldlevel = 99 vim.o.foldlevelstart = 99 vim.o.foldenable = true require("ufo").setup({ provider_selector = function(bufnr, filetype, buftype) -- Disable for latex and markdown files if filetype == "tex" or filetype == "latex" or filetype == "markdown" then return "" end return { "treesitter", "indent" } end, }) end, }, }