472 lines
15 KiB
Lua
472 lines
15 KiB
Lua
-- [[ Configure and install plugins ]]
|
|
--
|
|
-- To check the current status of your plugins, run
|
|
-- :Lazy
|
|
--
|
|
-- You can press `?` in this menu for help. Use `:q` to close the window
|
|
--
|
|
-- To update plugins you can run
|
|
-- :Lazy update
|
|
--
|
|
-- NOTE: Here is where you install your plugins.
|
|
require("lazy").setup({
|
|
-- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
|
|
"tpope/vim-sleuth", -- Detect tabstop and shiftwidth automatically
|
|
|
|
-- NOTE: Plugins can also be added by using a table,
|
|
-- with the first argument being the link and the following
|
|
-- keys can be used to configure plugin behavior/loading/etc.
|
|
--
|
|
-- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded.
|
|
|
|
-- modular approach: using `require 'path/name'` will
|
|
-- include a plugin definition from file lua/path/name.lua
|
|
|
|
{
|
|
'numToStr/Comment.nvim',
|
|
opts = {
|
|
-- add any options here
|
|
}
|
|
},
|
|
-- { FIXME: Not working right now
|
|
-- 'VidocqH/lsp-lens.nvim',
|
|
-- config = function ()
|
|
-- require("lsp-lens").setup({})
|
|
-- end,
|
|
-- },
|
|
require("kickstart/plugins/orgmode"),
|
|
"ThePrimeagen/vim-be-good",
|
|
require("kickstart/plugins/nvim-dap"),
|
|
{ -- nvim-dap-lldb
|
|
"julianolf/nvim-dap-lldb",
|
|
dependencies = { "mfussenegger/nvim-dap" },
|
|
},
|
|
{ -- vimtex
|
|
"lervag/vimtex",
|
|
lazy = false, -- we don't want to lazy load VimTeX
|
|
-- tag = "v2.15", -- uncomment to pin to a specific release
|
|
init = function()
|
|
-- VimTeX configuration goes here, e.g.
|
|
vim.g.vimtex_view_method = "zathura"
|
|
vim.g.vimtex_compiler_method = "latexmk"
|
|
end,
|
|
},
|
|
require("kickstart.plugins.mason-nvim-dap"),
|
|
{ -- nvim-autopairs
|
|
"windwp/nvim-autopairs",
|
|
event = "InsertEnter",
|
|
config = true,
|
|
-- use opts = {} for passing setup options
|
|
-- this is equivalent to setup({}) function
|
|
},
|
|
-- NOTE: Plugins can also be added by using a table,
|
|
-- with the first argument being the link and the following
|
|
-- keys can be used to configure plugin behavior/loading/etc.
|
|
--
|
|
-- Use `opts = {}` to force a plugin to be loaded.
|
|
--
|
|
|
|
require("kickstart/plugins/gitsigns"),
|
|
require("kickstart/plugins/auto-save"),
|
|
|
|
{ -- markdown.nvim
|
|
"MeanderingProgrammer/markdown.nvim",
|
|
main = "render-markdown",
|
|
opts = {},
|
|
name = "render-markdown",
|
|
dependencie = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
|
|
},
|
|
{ -- Allow to move line, word, and bloc
|
|
"fedepujol/move.nvim",
|
|
config = function()
|
|
require("move").setup({})
|
|
local opts = { noremap = true, silent = true }
|
|
-- Normal-mode commands
|
|
vim.keymap.set("n", "<A-j>", ":MoveLine(1)<CR>", opts)
|
|
vim.keymap.set("n", "<A-k>", ":MoveLine(-1)<CR>", opts)
|
|
vim.keymap.set("n", "<A-l>", ":MoveWord(1)<CR>", opts)
|
|
vim.keymap.set("n", "<A-h>", ":MoveWord(-1)<CR>", opts)
|
|
vim.keymap.set("v", "<A-j>", ":MoveBlock(1)<CR>", opts)
|
|
vim.keymap.set("v", "<A-k>", ":MoveBlock(-1)<CR>", opts)
|
|
vim.keymap.set("v", "<A-l>", ":MoveHBlock(1)<CR>", opts)
|
|
vim.keymap.set("v", "<A-h>", ":MoveHBlock(-1)<CR>", opts)
|
|
end,
|
|
},
|
|
{ -- leetcode.nvim
|
|
"kawre/leetcode.nvim",
|
|
build = ":TSUpdate html",
|
|
dependencies = {
|
|
"nvim-telescope/telescope.nvim",
|
|
"nvim-lua/plenary.nvim", -- required by telescope
|
|
"MunifTanjim/nui.nvim",
|
|
|
|
-- optional
|
|
"nvim-treesitter/nvim-treesitter",
|
|
"rcarriga/nvim-notify",
|
|
"nvim-tree/nvim-web-devicons",
|
|
},
|
|
opts = {
|
|
-- configuration goes here
|
|
},
|
|
},
|
|
|
|
require("kickstart.plugins.which-key"),
|
|
|
|
-- Awesome search
|
|
require("kickstart.plugins.telescope"),
|
|
|
|
-- Highlight todo, notes, etc in comments
|
|
require("kickstart/plugins/todo-comments"),
|
|
|
|
-- Transparent background
|
|
{
|
|
"xiyaowong/transparent.nvim",
|
|
},
|
|
-- FIXME: Deactivated for now because enable to set the tabulation standard
|
|
-- NOTE: Maybe the new language support added to treesitter make this work now?
|
|
-- require("kickstart.plugins.conform"),
|
|
-- Folding
|
|
{
|
|
"kevinhwang91/nvim-ufo",
|
|
event = "BufRead",
|
|
dependencies = { "kevinhwang91/promise-async" },
|
|
config = function()
|
|
vim.o.foldcolumn = "1"
|
|
vim.o.foldlevel = 99
|
|
vim.o.foldlevelstart = 99
|
|
vim.o.foldenable = true
|
|
|
|
require("ufo").setup()
|
|
end,
|
|
},
|
|
-- LSP Plugins
|
|
require("kickstart.plugins.lspconfig"),
|
|
{ -- obsidian
|
|
"epwalsh/obsidian.nvim",
|
|
version = "*", -- recommended, use latest release instead of latest commit
|
|
lazy = true,
|
|
ft = "markdown",
|
|
-- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault:
|
|
-- event = {
|
|
-- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'.
|
|
-- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/*.md"
|
|
-- -- refer to `:h file-pattern` for more examples
|
|
-- "BufReadPre path/to/my-vault/*.md",
|
|
-- "BufNewFile path/to/my-vault/*.md",
|
|
-- },
|
|
dependencies = {
|
|
-- Required.
|
|
"nvim-lua/plenary.nvim",
|
|
|
|
-- see below for full list of optional dependencies 👇
|
|
},
|
|
opts = {
|
|
ui = {enable = false},
|
|
workspaces = (
|
|
function()
|
|
local ws = {}
|
|
|
|
if vim.fn.hostname() == "valkyrie" then
|
|
table.insert(ws, {
|
|
name = "personal",
|
|
path = vim.fn.expand("~/Nextcloud/3. Resources/Notes"),
|
|
})
|
|
end
|
|
|
|
if vim.fn.hostname() == "Ingenuity-WSL" then
|
|
table.insert(ws, {
|
|
name = "work",
|
|
path = vim.fn.expand("/mnt/c/Users/Thierry/3-Resources/Work_Notes"),
|
|
})
|
|
end
|
|
|
|
if vim.fn.hostname() == "ingenuity" then
|
|
table.insert(ws, {
|
|
name = "work",
|
|
path = vim.fn.expand("~/3-Resources/Work_Notes"),
|
|
})
|
|
end
|
|
|
|
return ws
|
|
end)(),
|
|
},
|
|
},
|
|
{ -- Autocompletion
|
|
"hrsh7th/nvim-cmp",
|
|
event = "InsertEnter",
|
|
dependencies = {
|
|
-- Snippet Engine & its associated nvim-cmp source
|
|
{
|
|
"L3MON4D3/LuaSnip",
|
|
build = (function()
|
|
-- Build Step is needed for regex support in snippets.
|
|
-- This step is not supported in many windows environments.
|
|
-- Remove the below condition to re-enable on windows.
|
|
if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
|
|
return
|
|
end
|
|
return "make install_jsregexp"
|
|
end)(),
|
|
dependencies = {
|
|
-- `friendly-snippets` contains a variety of premade snippets.
|
|
-- See the README about individual language/framework/plugin snippets:
|
|
-- https://github.com/rafamadriz/friendly-snippets
|
|
{
|
|
'rafamadriz/friendly-snippets',
|
|
config = function()
|
|
require('luasnip.loaders.from_vscode').lazy_load()
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
"saadparwaiz1/cmp_luasnip", -- snippet completion
|
|
|
|
-- Adds other completion capabilities.
|
|
-- nvim-cmp does not ship with all sources by default. They are split
|
|
-- into multiple repos for maintenance purposes.
|
|
"hrsh7th/cmp-nvim-lsp",
|
|
"hrsh7th/cmp-path",
|
|
},
|
|
config = function()
|
|
-- See `:help cmp`
|
|
local cmp = require("cmp")
|
|
local luasnip = require("luasnip")
|
|
luasnip.config.setup({})
|
|
|
|
cmp.setup({
|
|
snippet = {
|
|
expand = function(args)
|
|
luasnip.lsp_expand(args.body)
|
|
end,
|
|
},
|
|
completion = { completeopt = "menu,menuone,noinsert" },
|
|
|
|
-- For an understanding of why these mappings were
|
|
-- chosen, you will need to read `:help ins-completion`
|
|
--
|
|
-- No, but seriously. Please read `:help ins-completion`, it is really good!
|
|
mapping = cmp.mapping.preset.insert({
|
|
-- Select the [n]ext item
|
|
["<C-n>"] = cmp.mapping.select_next_item(),
|
|
-- Select the [p]revious item
|
|
["<C-p>"] = cmp.mapping.select_prev_item(),
|
|
|
|
-- Scroll the documentation window [b]ack / [f]orward
|
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
|
|
|
-- Accept ([y]es) the completion.
|
|
-- This will auto-import if your LSP supports it.
|
|
-- This will expand snippets if the LSP sent a snippet.
|
|
["<C-y>"] = cmp.mapping.confirm({ select = true }),
|
|
|
|
-- If you prefer more traditional completion keymaps,
|
|
-- you can uncomment the following lines
|
|
--['<CR>'] = cmp.mapping.confirm { select = true },
|
|
--['<Tab>'] = cmp.mapping.select_next_item(),
|
|
--['<S-Tab>'] = cmp.mapping.select_prev_item(),
|
|
|
|
-- Manually trigger a completion from nvim-cmp.
|
|
-- Generally you don't need this, because nvim-cmp will display
|
|
-- completions whenever it has completion options available.
|
|
["<C-Space>"] = cmp.mapping.complete({}),
|
|
|
|
-- Think of <c-l> as moving to the right of your snippet expansion.
|
|
-- So if you have a snippet that's like:
|
|
-- function $name($args)
|
|
-- $body
|
|
-- end
|
|
--
|
|
-- <c-l> will move you to the right of each of the expansion locations.
|
|
-- <c-h> is similar, except moving you backwards.
|
|
["<C-l>"] = cmp.mapping(function()
|
|
if luasnip.expand_or_locally_jumpable() then
|
|
luasnip.expand_or_jump()
|
|
end
|
|
end, { "i", "s" }),
|
|
["<C-h>"] = cmp.mapping(function()
|
|
if luasnip.locally_jumpable(-1) then
|
|
luasnip.jump(-1)
|
|
end
|
|
end, { "i", "s" }),
|
|
|
|
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
|
|
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
|
|
}),
|
|
sources = {
|
|
{
|
|
name = "lazydev",
|
|
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
|
|
group_index = 0,
|
|
},
|
|
{ name = "nvim_lsp" },
|
|
{ name = "luasnip" },
|
|
{ name = "path" },
|
|
},
|
|
})
|
|
end,
|
|
},
|
|
{ -- You can easily change to a different colorscheme.
|
|
-- Change the name of the colorscheme plugin below, and then
|
|
-- change the command in the config to whatever the name of that colorscheme is.
|
|
--
|
|
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
|
|
"folke/tokyonight.nvim",
|
|
priority = 1000, -- Make sure to load this before all the other start plugins.
|
|
init = function()
|
|
-- Load the colorscheme here.
|
|
-- Like many other themes, this one has different styles, and you could load
|
|
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
|
|
vim.cmd.colorscheme("retrobox")
|
|
|
|
-- You can configure highlights by doing something like:
|
|
vim.cmd.hi("Comment gui=none")
|
|
end,
|
|
},
|
|
|
|
{ -- Collection of various small independent plugins/modules
|
|
"echasnovski/mini.nvim",
|
|
config = function()
|
|
-- Better Around/Inside textobjects
|
|
--
|
|
-- Examples:
|
|
-- - va) - [V]isually select [A]round [)]paren
|
|
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
|
|
-- - ci' - [C]hange [I]nside [']quote
|
|
require("mini.ai").setup({ n_lines = 500 })
|
|
|
|
-- Add/delete/replace surroundings (brackets, quotes, etc.)
|
|
--
|
|
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
|
|
-- - sd' - [S]urround [D]elete [']quotes
|
|
-- - sr)' - [S]urround [R]eplace [)] [']
|
|
require("mini.surround").setup()
|
|
|
|
-- Simple and easy statusline.
|
|
-- You could remove this setup call if you don't like it,
|
|
-- and try some other statusline plugin
|
|
local statusline = require("mini.statusline")
|
|
-- set use_icons to true if you have a Nerd Font
|
|
statusline.setup({ use_icons = vim.g.have_nerd_font })
|
|
|
|
-- You can configure sections in the statusline by overriding their
|
|
-- default behavior. For example, here we set the section for
|
|
-- cursor location to LINE:COLUMN
|
|
---@diagnostic disable-next-line: duplicate-set-field
|
|
statusline.section_location = function()
|
|
return "%2l:%-2v"
|
|
end
|
|
|
|
-- ... and there is more!
|
|
-- Check out: https://github.com/echasnovski/mini.nvim
|
|
end,
|
|
},
|
|
{ -- Highlight, edit, and navigate code
|
|
"nvim-treesitter/nvim-treesitter",
|
|
build = ":TSUpdate",
|
|
main = "nvim-treesitter.configs", -- Sets main module to use for opts
|
|
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
|
|
opts = {
|
|
ensure_installed = {
|
|
"bash",
|
|
"c",
|
|
"cpp",
|
|
"csv",
|
|
"gitignore",
|
|
"git_config",
|
|
"haskell",
|
|
"hyprlang",
|
|
"javadoc",
|
|
"json",
|
|
"lua",
|
|
"make",
|
|
"nginx",
|
|
"requirements",
|
|
"rust",
|
|
"sql",
|
|
"ssh_config",
|
|
"tmux",
|
|
"vhdl",
|
|
"xml",
|
|
"c_sharp",
|
|
"python",
|
|
"diff",
|
|
"bash",
|
|
"html",
|
|
"lua",
|
|
"luadoc",
|
|
"markdown",
|
|
"markdown_inline",
|
|
"query",
|
|
"vim",
|
|
"vimdoc",
|
|
},
|
|
-- Autoinstall languages that are not installed
|
|
auto_install = true,
|
|
highlight = {
|
|
enable = true,
|
|
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
|
|
-- If you are experiencing weird indenting issues, add the language to
|
|
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
|
|
additional_vim_regex_highlighting = { "ruby" },
|
|
},
|
|
indent = { enable = true, disable = { "ruby" } },
|
|
},
|
|
-- There are additional nvim-treesitter modules that you can use to interact
|
|
-- with nvim-treesitter. You should go explore a few and see what interests you:
|
|
--
|
|
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
|
|
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
|
|
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
|
|
},
|
|
|
|
-- The following comments only work if you have downloaded the kickstart repo, not just copy pasted the
|
|
-- init.lua. If you want these files, they are in the repository, so you can just download them and
|
|
-- place them in the correct locations.
|
|
|
|
-- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
|
|
--
|
|
-- Here are some example plugins that I've included in the Kickstart repository.
|
|
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
|
|
--
|
|
-- require 'kickstart.plugins.debug',
|
|
-- require 'kickstart.plugins.indent_line',
|
|
-- require 'kickstart.plugins.lint',
|
|
-- require 'kickstart.plugins.autopairs',
|
|
-- require 'kickstart.plugins.neo-tree',
|
|
-- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
|
|
|
|
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
|
|
-- This is the easiest way to modularize your config.
|
|
--
|
|
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
|
|
-- { import = 'custom.plugins' },
|
|
--
|
|
-- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec`
|
|
-- Or use telescope!
|
|
-- In normal mode type `<space>sh` then write `lazy.nvim-plugin`
|
|
-- you can continue same window with `<space>sr` which resumes last telescope search
|
|
}, {
|
|
ui = {
|
|
-- If you are using a Nerd Font: set icons to an empty table which will use the
|
|
-- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
|
|
icons = vim.g.have_nerd_font and {} or {
|
|
cmd = "⌘",
|
|
config = "🛠",
|
|
event = "📅",
|
|
ft = "📂",
|
|
init = "⚙",
|
|
keys = "🗝",
|
|
plugin = "🔌",
|
|
runtime = "💻",
|
|
require = "🌙",
|
|
source = "📄",
|
|
start = "🚀",
|
|
task = "📌",
|
|
lazy = "💤 ",
|
|
},
|
|
},
|
|
})
|
|
|
|
-- vim: ts=2 sts=2 sw=2 et
|