-- ~/.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" }, 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 = { modes = { char = { enabled = false, }, }, }, 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" }, { "epwalsh/obsidian.nvim", version = "*", lazy = true, ft = "markdown", dependencies = { "nvim-lua/plenary.nvim" }, keys = { { "on", "ObsidianNew", desc = "New note" }, { "oo", "ObsidianQuickSwitch", desc = "Quick switch" }, { "os", "ObsidianSearch", desc = "Search notes" }, { "ob", "ObsidianBacklinks", desc = "Backlinks" }, { "ot", "ObsidianTags", desc = "Tags" }, { "od", "ObsidianToday", desc = "Today's note" }, }, opts = { workspaces = { { name = "private", path = "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Private" }, { name = "work", path = "~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Work" }, }, completion = { nvim_cmp = false, min_chars = 2 }, ui = { enable = false }, -- render-markdown.nvim übernimmt das disable_frontmatter = true, }, }, { "iamcco/markdown-preview.nvim", cmd = { "MarkdownPreview", "MarkdownPreviewStop", "MarkdownPreviewToggle" }, ft = { "markdown" }, build = function() vim.fn["mkdp#util#install"]() end, keys = { { "mp", "MarkdownPreviewToggle", desc = "Markdown Preview" }, }, }, { "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, }, }