aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugin_specs.lua
diff options
context:
space:
mode:
authorMichal Hanus <mikehanus@protonmail.com>2025-12-29 19:02:55 +0100
committerMichal Hanus <mikehanus@protonmail.com>2025-12-29 19:02:55 +0100
commit5eda7770be54f222e27e87190a95847e6d0e2c8c (patch)
tree6974ac951d1f955f1a05144f1504a41fcf990251 /.config/nvim/lua/plugin_specs.lua
parent688a636a43e70da5337c8dd671d4269621fae80b (diff)
nvim setup
Diffstat (limited to '.config/nvim/lua/plugin_specs.lua')
-rw-r--r--.config/nvim/lua/plugin_specs.lua503
1 files changed, 503 insertions, 0 deletions
diff --git a/.config/nvim/lua/plugin_specs.lua b/.config/nvim/lua/plugin_specs.lua
new file mode 100644
index 0000000..a585ee1
--- /dev/null
+++ b/.config/nvim/lua/plugin_specs.lua
@@ -0,0 +1,503 @@
+local utils = require("utils")
+
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system {
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", -- latest stable release
+ lazypath,
+ }
+end
+vim.opt.rtp:prepend(lazypath)
+
+-- check if firenvim is active
+local firenvim_not_active = function()
+ return not vim.g.started_by_firenvim
+end
+
+local plugin_specs = {
+ -- auto-completion engine
+ {
+ "hrsh7th/nvim-cmp",
+ -- event = 'InsertEnter',
+ event = "VeryLazy",
+ dependencies = {
+ "hrsh7th/cmp-nvim-lsp",
+ "onsails/lspkind-nvim",
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-buffer",
+ "hrsh7th/cmp-omni",
+ "hrsh7th/cmp-emoji",
+ "quangnguyen30192/cmp-nvim-ultisnips",
+ },
+ config = function()
+ require("config.nvim-cmp")
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ event = { "BufRead", "BufNewFile" },
+ config = function()
+ require("config.lsp")
+ end,
+ },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ enabled = function()
+ if vim.g.is_mac then
+ return true
+ end
+ return false
+ end,
+ event = "VeryLazy",
+ build = ":TSUpdate",
+ config = function()
+ require("config.treesitter")
+ end,
+ },
+
+ -- Python indent (follows the PEP8 style)
+ { "Vimjas/vim-python-pep8-indent", ft = { "python" } },
+
+ -- Python-related text object
+ { "jeetsukumaran/vim-pythonsense", ft = { "python" } },
+
+ { "machakann/vim-swap", event = "VeryLazy" },
+
+ -- IDE for Lisp
+ -- 'kovisoft/slimv'
+ {
+ "vlime/vlime",
+ enabled = function()
+ if utils.executable("sbcl") then
+ return true
+ end
+ return false
+ end,
+ config = function(plugin)
+ vim.opt.rtp:append(plugin.dir .. "/vim")
+ end,
+ ft = { "lisp" },
+ },
+
+ -- Super fast buffer jump
+ {
+ "smoka7/hop.nvim",
+ event = "VeryLazy",
+ config = function()
+ require("config.nvim_hop")
+ end,
+ },
+
+ -- Show match number and index for searching
+ {
+ "kevinhwang91/nvim-hlslens",
+ branch = "main",
+ keys = { "*", "#", "n", "N" },
+ config = function()
+ require("config.hlslens")
+ end,
+ },
+ {
+ "Yggdroot/LeaderF",
+ cmd = "Leaderf",
+ build = function()
+ if not vim.g.is_win then
+ vim.cmd(":LeaderfInstallCExtension")
+ end
+ end,
+ },
+ "nvim-lua/plenary.nvim",
+ {
+ "nvim-telescope/telescope.nvim",
+ cmd = "Telescope",
+ dependencies = {
+ "nvim-telescope/telescope-symbols.nvim",
+ },
+ },
+ {
+ "lukas-reineke/headlines.nvim",
+ dependencies = "nvim-treesitter/nvim-treesitter",
+ config = true, -- or `opts = {}`
+ },
+ -- A list of colorscheme plugin you may want to try. Find what suits you.
+ { "navarasu/onedark.nvim", lazy = true },
+ { "sainnhe/edge", lazy = true },
+ { "sainnhe/sonokai", lazy = true },
+ { "sainnhe/gruvbox-material", lazy = true },
+ { "sainnhe/everforest", lazy = true },
+ { "EdenEast/nightfox.nvim", lazy = true },
+ { "catppuccin/nvim", name = "catppuccin", lazy = true },
+ { "olimorris/onedarkpro.nvim", lazy = true },
+ { "marko-cerovac/material.nvim", lazy = true },
+
+ { "nvim-tree/nvim-web-devicons", event = "VeryLazy" },
+
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ cond = firenvim_not_active,
+ config = function()
+ require("config.statusline")
+ end,
+ },
+
+ {
+ "akinsho/bufferline.nvim",
+ event = { "BufEnter" },
+ cond = firenvim_not_active,
+ config = function()
+ require("config.bufferline")
+ end,
+ },
+
+ -- fancy start screen
+ {
+ "nvimdev/dashboard-nvim",
+ cond = firenvim_not_active,
+ config = function()
+ require("config.dashboard-nvim")
+ end,
+ },
+
+ {
+ "lukas-reineke/indent-blankline.nvim",
+ event = "VeryLazy",
+ main = 'ibl',
+ config = function()
+ require("config.indent-blankline")
+ end,
+ },
+
+ -- Highlight URLs inside vim
+ { "itchyny/vim-highlighturl", event = "VeryLazy" },
+
+ -- notification plugin
+ {
+ "rcarriga/nvim-notify",
+ event = "VeryLazy",
+ config = function()
+ require("config.nvim-notify")
+ end,
+ },
+
+ -- For Windows and Mac, we can open an URL in the browser. For Linux, it may
+ -- not be possible since we maybe in a server which disables GUI.
+ {
+ "tyru/open-browser.vim",
+ enabled = function()
+ if vim.g.is_win or vim.g.is_mac then
+ return true
+ else
+ return false
+ end
+ end,
+ event = "VeryLazy",
+ },
+
+ -- Only install these plugins if ctags are installed on the system
+ -- show file tags in vim window
+ {
+ "liuchengxu/vista.vim",
+ enabled = function()
+ if utils.executable("ctags") then
+ return true
+ else
+ return false
+ end
+ end,
+ cmd = "Vista",
+ },
+
+ -- Snippet engine and snippet template
+ { "SirVer/ultisnips", dependencies = {
+ "honza/vim-snippets",
+ }, event = "InsertEnter" },
+
+ -- Automatic insertion and deletion of a pair of characters
+ { "Raimondi/delimitMate", event = "InsertEnter" },
+
+ -- Comment plugin
+ { "tpope/vim-commentary", event = "VeryLazy" },
+
+ -- Multiple cursor plugin like Sublime Text?
+ -- 'mg979/vim-visual-multi'
+
+ -- Autosave files on certain events
+ { "907th/vim-auto-save", event = "InsertEnter" },
+
+ -- Show undo history visually
+ { "simnalamburt/vim-mundo", cmd = { "MundoToggle", "MundoShow" } },
+
+ -- better UI for some nvim actions
+ { "stevearc/dressing.nvim" },
+
+ -- Manage your yank history
+ {
+ "gbprod/yanky.nvim",
+ cmd = { "YankyRingHistory" },
+ config = function()
+ require("config.yanky")
+ end,
+ },
+
+ -- Handy unix command inside Vim (Rename, Move etc.)
+ { "tpope/vim-eunuch", cmd = { "Rename", "Delete" } },
+
+ -- Repeat vim motions
+ { "tpope/vim-repeat", event = "VeryLazy" },
+
+ { "nvim-zh/better-escape.vim", event = { "InsertEnter" } },
+
+ {
+ "lyokha/vim-xkbswitch",
+ enabled = function()
+ if vim.g.is_mac and utils.executable("xkbswitch") then
+ return true
+ end
+ return false
+ end,
+ event = { "InsertEnter" },
+ },
+
+ {
+ "Neur1n/neuims",
+ enabled = function()
+ if vim.g.is_win then
+ return true
+ end
+ return false
+ end,
+ event = { "InsertEnter" },
+ },
+
+ -- Auto format tools
+ { "sbdchd/neoformat", cmd = { "Neoformat" } },
+
+ -- Git command inside vim
+ {
+ "tpope/vim-fugitive",
+ event = "User InGitRepo",
+ config = function()
+ require("config.fugitive")
+ end,
+ },
+
+ -- Better git log display
+ { "rbong/vim-flog", cmd = { "Flog" } },
+ { "akinsho/git-conflict.nvim", version = "*", config = true },
+ {
+ "ruifm/gitlinker.nvim",
+ event = "User InGitRepo",
+ config = function()
+ require("config.git-linker")
+ end,
+ },
+
+ -- Show git change (change, delete, add) signs in vim sign column
+ {
+ "lewis6991/gitsigns.nvim",
+ config = function()
+ require("config.gitsigns")
+ end,
+ },
+
+ -- Better git commit experience
+ { "rhysd/committia.vim", lazy = true },
+
+ {
+ "sindrets/diffview.nvim"
+ },
+
+ {
+ "kevinhwang91/nvim-bqf",
+ ft = "qf",
+ config = function()
+ require("config.bqf")
+ end,
+ },
+
+ -- Another markdown plugin
+ { "preservim/vim-markdown", ft = { "markdown" } },
+
+ -- Faster footnote generation
+ { "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } },
+
+ -- Vim tabular plugin for manipulate tabular, required by markdown plugins
+ { "godlygeek/tabular", cmd = { "Tabularize" } },
+
+ -- Markdown previewing (only for Mac and Windows)
+ {
+ "iamcco/markdown-preview.nvim",
+ enabled = function()
+ if vim.g.is_win or vim.g.is_mac then
+ return true
+ end
+ return false
+ end,
+ build = "cd app && npm install",
+ ft = { "markdown" },
+ },
+
+ {
+ "folke/zen-mode.nvim",
+ cmd = "ZenMode",
+ config = function()
+ require("config.zen-mode")
+ end,
+ },
+
+ {
+ "rhysd/vim-grammarous",
+ enabled = function()
+ if vim.g.is_mac then
+ return true
+ end
+ return false
+ end,
+ ft = { "markdown" },
+ },
+
+ { "chrisbra/unicode.vim", event = "VeryLazy" },
+
+ -- Additional powerful text object for vim, this plugin should be studied
+ -- carefully to use its full power
+ { "wellle/targets.vim", event = "VeryLazy" },
+
+ -- Plugin to manipulate character pairs quickly
+ { "machakann/vim-sandwich", event = "VeryLazy" },
+
+ -- Add indent object for vim (useful for languages like Python)
+ { "michaeljsmith/vim-indent-object", event = "VeryLazy" },
+
+ -- Only use these plugin on Windows and Mac and when LaTeX is installed
+ {
+ "lervag/vimtex",
+ enabled = function()
+ if utils.executable("latex") then
+ return true
+ end
+ return false
+ end,
+ ft = { "tex" },
+ },
+
+ -- Since tmux is only available on Linux and Mac, we only enable these plugins
+ -- for Linux and Mac
+ -- .tmux.conf syntax highlighting and setting check
+ {
+ "tmux-plugins/vim-tmux",
+ enabled = function()
+ if utils.executable("tmux") then
+ return true
+ end
+ return false
+ end,
+ ft = { "tmux" },
+ },
+
+ -- Modern matchit implementation
+ { "andymass/vim-matchup", event = "BufRead" },
+ { "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } },
+
+ -- Asynchronous command execution
+ { "skywind3000/asyncrun.vim", lazy = true, cmd = { "AsyncRun" } },
+ { "cespare/vim-toml", ft = { "toml" }, branch = "main" },
+
+ -- Edit text area in browser using nvim
+ {
+ "glacambre/firenvim",
+ enabled = function()
+ if vim.g.is_win or vim.g.is_mac then
+ return true
+ end
+ return false
+ end,
+ build = function()
+ vim.fn["firenvim#install"](0)
+ end,
+ lazy = true,
+ },
+
+ -- Debugger plugin
+ {
+ "sakhnik/nvim-gdb",
+ enabled = function()
+ if vim.g.is_win or vim.g.is_linux then
+ return true
+ end
+ return false
+ end,
+ build = { "bash install.sh" },
+ lazy = true,
+ },
+
+ -- Session management plugin
+ { "tpope/vim-obsession", cmd = "Obsession" },
+
+ {
+ "ojroques/vim-oscyank",
+ enabled = function()
+ if vim.g.is_linux then
+ return true
+ end
+ return false
+ end,
+ cmd = { "OSCYank", "OSCYankReg" },
+ },
+
+ -- The missing auto-completion for cmdline!
+ {
+ "gelguy/wilder.nvim",
+ build = ":UpdateRemotePlugins",
+ },
+
+ -- showing keybindings
+ {
+ "folke/which-key.nvim",
+ event = "VeryLazy",
+ config = function()
+ require("config.which-key")
+ end,
+ },
+
+ -- show and trim trailing whitespaces
+ { "jdhao/whitespace.nvim", event = "VeryLazy" },
+
+ -- file explorer
+ {
+ "nvim-tree/nvim-tree.lua",
+ keys = { "<space>s" },
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ config = function()
+ require("config.nvim-tree")
+ end,
+ },
+
+ { "ii14/emmylua-nvim", ft = "lua" },
+ {
+ "j-hui/fidget.nvim",
+ event = "VeryLazy",
+ tag = "legacy",
+ config = function()
+ require("config.fidget-nvim")
+ end,
+ },
+}
+
+-- configuration for lazy itself.
+local lazy_opts = {
+ ui = {
+ border = "rounded",
+ title = "Plugin Manager",
+ title_pos = "center",
+ },
+}
+
+require("lazy").setup(plugin_specs, lazy_opts)