global: rewrite configuration from scratch

- Allows me to better understand what are doing the installed plugins
  and depedencies.
- Improves the structure of the configuration, in order to ease
  the maintenance.
- Improves markdown experience, even if it can still be improved.
- Documents the configuration in the README file.

Co-Authored-by: iGor milhit <igor@milhit.ch>
main
iGor milhit 2024-08-06 16:35:29 +02:00
parent 6f5f205cca
commit fe25313c23
Signed by: igor
GPG Key ID: 692D97C3D0228A99
49 changed files with 1953 additions and 948 deletions

7
.gitignore vendored
View File

@ -1,10 +1,3 @@
# `vim-plug` plugins
plugged/*
autoload
# netrw
.netrwhist
# spell
*.spl
spell/*

View File

@ -7,8 +7,103 @@ tags: [neovim, editor, configuration, README]
# [Neovim setup][1]
Missing documentation. :-P
This new configuration is written with the help of:
- [`kickstart.nvim`][4]. This is a good project to kickstart a configuration,
but then it takes time to understand what it makes, how to use it, and how to
modify it.
- *[Tutoriel : configurer Neovim comme IDE/éditeur de code à partir de
zéro][5]*. This blog post, in French, helped me a lot to understand better my
configuration and to rewrite it.
## Requirements
- Neovim > 0.10.
- [Ripgrep][2].
- A [nerd font][3].
- [`vscode-langservers-extracted`][6]. It's mandatory for the JSON LSP.
## Structure
- `init.lua` is the configuration file, with the required includes.
- `lua/` is the folder where specific configuration and plugins are.
- `lua/core` contains the basic configuration:
- `options.lua` with the global neovim options.
- `keymaps.lua` with the global neovim key mappings.
- `lua/config` contains the Lazy plugin manager installation and configuration.
- `lua/plugins` of course contains all other plugins installation and
configuration.
## Plugins
I won't provide links for each of these plugins as they are easily to be found.
- `lazy.nvim` as plugins manager.
- `plenary` to get lua functions used by many plugins.
- Adwaita for the colorscheme.
- `which-key.nvim` to find out shortkeys.
- `nvim-tree` as file explorer.
- `telescope.nvim` for the fuzzy finder interface. It has some specific
dependencies:
- `telescope-fzf-native.nvim` to get a C implementation of fzf, with improved
performances.
- `telescope-luasnip.nvim` to search for snippets. LuaSnip is a dependency
for `nvim-cmp` which provides completion.
- `telescope-ag` to use Ag or Ripgrep to filter results.
- `nvim-web-devicons` as a dependency to add icons to the interface, when it is
used (file explorer, fuzzy finder).
- `treesitter` for language grammar support (with `treesitter-textobjects` as
dependency, to improve bloc selection and navigation. It is deactivated for
markdown.
- Markdown:
- `vim-pandoc` and `vim-pandoc-syntax` to support the pandoc markdown, nice
concealing, easy folding and hard wrap automatic formatting.
- `mkdnflow.nvim` to improve links navigation, table formatting, file
creation, and so on. It improves also the link concealing.
- `markdown-preview.nvim` to provide a live HTML preview.
- Completion with `nvim-cmp` with the following dependencies:
- `cmp-buffer` to get text completion from the current buffer text.
- `cmp-path` to get path completion.
- `cmp-cmdline` to get vim cmdline completion.
- `LuaSnip` to get snippet expansion, with the nvim-cmp source for it:
`cmp_luasnip`.
- `friendly-snippets` which adds some user-friendly snippets.
- `cmp-emoji` for emoji completion after ':'.
- `lspkind.nvim` to add text symbols to spot the type of source completion.
- Language servers:
- `lsp-zero.nvim` to ease LSP configuration.
- `nvim-lspconfig` to configure LSP support and completion, with
dependencies:
- `cmp-nvim-lsp` to get LSP results in completion.
- `nvim-lsp-file-operations` to add some code actions.
- `fidget.nvim` for LSP progress message and neovim notifications.
- `mason.nvim` with `mason-lspconfig.nvim` to install automatically the
needed LSP. And also with `mason-tool-installer` to extend it's package
manager capabilities.
- `schemastore.nvim` which provides the schemas needed by JSON and YAML
validators.
- `trouble.nvim` to display all *trouble* messages (LSP, diagnostics, etc.) in
a pretty list.
- `lazdev.nvim` to improve `lua_ls` configuration.
- `vim-fugitive`.
- `gitsigns.nvim` to see changes in the sign column.
- `vim-speeddating` to increment dates, times, etc.
- `vim-surround` to improve surroundings management.
- `autopairs.nvim`.
- `Comment.nvim` to comment lines and blocs.
- `ident-blankline.nvim` to improve readability of indentation.
- `true-zen.nvim` for a good zen mode.
- `toggleterm.nvim` to quickly get a terminal. Might find a better one.
- `rainbow-csv.nvim` to manage CSV files.
- `venv-selector.nvim` to ease python virtual env.
- `vim-grammalecte` to get a good grammar checker for French.
<!-- references -->
[1]: ./README.md
[2]: https://github.com/BurntSushi/ripgrep/
[3]: https://github.com/ryanoasis/nerd-fonts/
[4]: https://github.com/nvim-lua/kickstart.nvim
[5]: https://vincent.jousse.org/blog/fr/tech/configurer-neovim-comme-ide-a-partir-de-zero-tutoriel-guide
[6]: https://github.com/hrsh7th/vscode-langservers-extracted

View File

@ -0,0 +1,7 @@
-- Specific settings for markdown files
-- Enable the autowrite feature for all commands
-- See :h awa
vim.opt.awa=true
vim.opt.foldlevel = 1
-- vim.opt.conceallevel = 2

View File

@ -3,4 +3,7 @@
-- See :h awa
vim.opt.awa=true
-- vim.opt.foldmethod = "expr"
-- vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
vim.opt.foldlevel = 1
vim.opt.conceallevel = 2

View File

@ -1,24 +0,0 @@
================================================================================
INTRODUCTION *kickstart.nvim*
Kickstart.nvim is a project to help you get started on your neovim journey.
*kickstart-is-not*
It is not:
- Complete framework for every plugin under the sun
- Place to add every plugin that could ever be useful
*kickstart-is*
It is:
- Somewhere that has a good start for the most common "IDE" type features:
- autocompletion
- goto-definition
- find references
- fuzzy finding
- and hinting at what more can be done :)
- A place to _kickstart_ your journey.
- You should fork this project and use/modify it so that it matches your
style and preferences. If you don't want to do that, there are probably
other projects that would fit much better for you (and that's great!)!
vim:tw=78:ts=8:ft=help:norl:

View File

@ -1,3 +0,0 @@
kickstart-is kickstart.txt /*kickstart-is*
kickstart-is-not kickstart.txt /*kickstart-is-not*
kickstart.nvim kickstart.txt /*kickstart.nvim*

623
init.lua
View File

@ -1,620 +1,3 @@
-- Set <space> as the leader key
-- See `:help mapleader`
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- Install package manager
-- https://github.com/folke/lazy.nvim
-- `:help lazy.nvim.txt` for more info
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)
-- NOTE: Here is where you install your plugins.
-- You can configure plugins using the `config` key.
--
-- You can also configure plugins after the setup call,
-- as they will be available in your neovim runtime.
require('lazy').setup({
-- NOTE: First, some plugins that don't require any configuration
-- Git related plugins
'tpope/vim-fugitive',
-- Detect tabstop and shiftwidth automatically
'tpope/vim-sleuth',
-- Improve surroundings management
'tpope/vim-surround',
-- NOTE: This is where your plugins related to LSP can be installed.
-- The configuration is done below. Search for lspconfig to find it below.
{
-- LSP Configuration & Plugins
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs to stdpath for neovim
{ 'williamboman/mason.nvim', config = true },
'williamboman/mason-lspconfig.nvim',
-- Useful status updates for LSP
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', tag = "legacy", opts = {} },
-- Additional lua configuration, makes nvim stuff amazing!
'folke/neodev.nvim',
},
},
{
-- Autocompletion
-- See Configure nvim-cmp at the end of this file
'hrsh7th/nvim-cmp',
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
{
'L3MON4D3/LuaSnip',
-- follow latest release
version = "v2.*",
-- install jsregexp (optional)
build = "make install_jsregexp"
},
'saadparwaiz1/cmp_luasnip',
-- Adds LSP completion capabilities
'hrsh7th/cmp-nvim-lsp',
-- Adds completion capabilities for text in buffers
'hrsh7th/cmp-buffer',
-- Adds path completion capabilities
'hrsh7th/cmp-path',
-- Adds a number of user-friendly snippets
'rafamadriz/friendly-snippets',
},
},
-- Useful plugin to show you pending keybinds.
{ 'folke/which-key.nvim', opts = {} },
{
-- Adds git releated signs to the gutter, as well as utilities for managing changes
'lewis6991/gitsigns.nvim',
opts = {
-- See `:help gitsigns.txt`
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
},
on_attach = function(bufnr)
vim.keymap.set('n', '[c', require('gitsigns').prev_hunk, { buffer = bufnr, desc = 'Go to Previous Hunk' })
vim.keymap.set('n', ']c', require('gitsigns').next_hunk, { buffer = bufnr, desc = 'Go to Next Hunk' })
vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' })
end,
},
},
-- Adwaita colorscheme
{
"Mofiqul/adwaita.nvim",
lazy = false,
priority = 1000,
config = function()
vim.cmd('colorscheme adwaita')
end
},
{
-- Set lualine as statusline
'nvim-lualine/lualine.nvim',
-- See `:help lualine.txt`
opts = {
options = {
icons_enabled = true,
theme = 'adwaita',
component_separators = '|',
section_separators = '',
},
},
},
{
-- Add indentation guides even on blank lines
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help indent_blankline.txt`
main = "ibl",
opts = {
indent = {char = ''},
whitespace = {remove_blankline_trail = false},
},
},
-- "gc" to comment visual regions/lines
{ 'numToStr/Comment.nvim', opts = {} },
-- Fuzzy Finder (files, lsp, etc)
{ 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } },
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
-- Only load if `make` is available. Make sure you have the system
-- requirements installed.
{
'nvim-telescope/telescope-fzf-native.nvim',
-- NOTE: If you are having trouble with this installation,
-- refer to the README for telescope-fzf-native for more instructions.
build = 'make',
cond = function()
return vim.fn.executable 'make' == 1
end,
},
-- Extension to telescope to use Ag (or ripgrep) to filter results
{
'kelly-lin/telescope-ag'
},
-- Allow to search for snippets
{
'benfowler/telescope-luasnip.nvim'
},
{
-- Highlight, edit, and navigate code
'nvim-treesitter/nvim-treesitter',
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
},
build = ':TSUpdate',
},
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
-- These are some example plugins that I've included in the kickstart repository.
-- Uncomment any of the lines below to enable them.
-- require 'kickstart.plugins.autoformat',
-- require 'kickstart.plugins.debug',
-- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping
-- up-to-date with whatever is in the kickstart repo.
--
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
{ import = 'custom.plugins' },
}, {})
-- Restore the site folder of .local/share/nvim/ in the runtime rewritten by
-- lazy. See https://github.com/neovim/neovim/issues/23082#issuecomment-1510812311
vim.opt.rtp:append (vim.fn.stdpath ('data') .. '/site')
-- [[ Setting options ]]
-- See `:help vim.o`
-- NOTE: You can change these options as you wish!
-- Set highlight on search
vim.o.hlsearch = true
-- Set breakindent in order to improve vim-pandoc handling of lists
vim.o.breakindent = true
-- Preview changes when searching and substituing
-- nosplit avoid to display the preview in a separate split
vim.o.inccommand = "nosplit"
-- Make line numbers default
vim.wo.number = true
-- Set the maximum width of a line
vim.opt.textwidth = 79
-- Display the cusor column at 79+1 column
vim.opt.colorcolumn:append('+1')
-- Enable mouse mode
vim.o.mouse = 'a'
-- Sync clipboard between OS and Neovim.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
vim.o.clipboard = 'unnamedplus'
-- Indent
vim.o.shiftwidth = 4
vim.o.softtabstop = 4
-- Enable break indent
vim.o.breakindent = true
-- Save undo history
vim.o.undofile = true
-- Case insensitive searching UNLESS /C or capital in search
vim.o.ignorecase = true
vim.o.smartcase = true
-- Keep signcolumn on by default
vim.wo.signcolumn = 'yes'
-- Decrease update time
vim.o.updatetime = 250
vim.o.timeout = true
vim.o.timeoutlen = 300
-- Set completeopt to have a better completion experience
vim.o.completeopt = 'menuone,noselect'
-- NOTE: You should make sure your terminal supports this
vim.o.termguicolors = true
-- Set the spelling for English, French and German.
vim.opt.spelllang = 'en,fr,de'
-- Set the folding level to 1, to allow level 2 headers to be seen.
vim.opt.foldlevel = 1
-- Set a python virtualenv as python3 provider.
-- `vim.env.HOME` uses the neovim API to fetch the $HOME env.
-- The `..` appends strings in lua.
vim.g.python3_host_prog = vim.env.HOME .. '/.pyenv/versions/neovim3/bin/python'
-- [[ Basic Keymaps ]]
-- Keymaps for better default experience
-- See `:help vim.keymap.set()`
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
-- Remap for dealing with word wrap
vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
-- [[ Highlight on yank ]]
-- See `:help vim.highlight.on_yank()`
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
vim.api.nvim_create_autocmd('TextYankPost', {
callback = function()
vim.highlight.on_yank()
end,
group = highlight_group,
pattern = '*',
})
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
defaults = {
mappings = {
i = {
['<C-u>'] = false,
['<C-d>'] = false,
},
},
},
pickers = {
command_history = {
theme = "dropdown",
}
}
}
-- Enable telescope fzf native, if installed
pcall(require('telescope').load_extension, 'fzf')
-- Enable telescope luasnip extension, if installed
pcall(require('telescope').load_extension, 'luasnip')
-- Enable telescope-ag extension, if installed
pcall(require('telescope').load_extension, 'ag')
-- See `:help telescope.builtin`
vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' })
vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' })
vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to telescope to change theme, layout, etc.
require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
winblend = 10,
previewer = false,
})
end, { desc = '[/] Fuzzily search in current buffer' })
vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' })
vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sb', require('telescope.builtin').buffers, { desc = '[S]earch [B]uffers' })
vim.keymap.set('n', '<leader>ch', require('telescope.builtin').command_history, { desc = '[C]command [H]istory' })
vim.keymap.set('n', '<leader>ss', require'telescope'.extensions.luasnip.luasnip , { desc = '[S]earch [S]nippets' })
-- [[ Configure Treesitter ]]
-- See `:help nvim-treesitter`
require('nvim-treesitter.configs').setup {
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'vimdoc', 'vim', 'json' },
-- Do not install parses synchronously
sync_install = false,
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
auto_install = false,
-- List of parsers to ignore installing
ignore_install = {
"markdown"
},
-- Required property, but empr?
modules = {},
highlight = {
enable = true,
disable = { "markdown" },
},
indent = { enable = true, disable = { 'python' } },
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<c-space>',
node_incremental = '<c-space>',
scope_incremental = '<c-s>',
node_decremental = '<M-space>',
},
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
['aa'] = '@parameter.outer',
['ia'] = '@parameter.inner',
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
[']m'] = '@function.outer',
[']]'] = '@class.outer',
},
goto_next_end = {
[']M'] = '@function.outer',
[']['] = '@class.outer',
},
goto_previous_start = {
['[m'] = '@function.outer',
['[['] = '@class.outer',
},
goto_previous_end = {
['[M'] = '@function.outer',
['[]'] = '@class.outer',
},
},
swap = {
enable = true,
swap_next = {
['<leader>a'] = '@parameter.inner',
},
swap_previous = {
['<leader>A'] = '@parameter.inner',
},
},
},
}
-- Diagnostic keymaps
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
-- [[ Configure LSP ]]
-- This function gets run when an LSP connects to a particular buffer.
local on_attach = function(_, bufnr)
-- NOTE: Remember that lua is a real programming language, and as such it is possible
-- to define small helper and utility functions so you don't have to repeat yourself
-- many times.
--
-- In this case, we create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
local nmap = function(keys, func, desc)
if desc then
desc = 'LSP: ' .. desc
end
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
end
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- See `:help K` for why this keymap
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
-- Lesser used LSP functionality
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
nmap('<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, '[W]orkspace [L]ist Folders')
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
vim.lsp.buf.format()
end, { desc = 'Format current buffer with LSP' })
end
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. They will be passed to
-- the `settings` field of the server config. You must look up that documentation yourself.
local servers = {
-- clangd = {},
-- gopls = {},
pyright = {},
-- rust_analyzer = {},
-- tsserver = {},
-- marksman = {
-- ft = {
-- 'markdown',
-- 'pandoc'
-- }
-- },
lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
},
},
texlab = {
-- build = {
-- executable = "tectonic",
-- args = {
-- "-X",
-- "compile",
-- "%f",
-- "--synctex",
-- "--keep-logs",
-- "--keep-intermediates"
-- }
-- }
},
-- Require vscode-langservers-extracted
-- https://github.com/hrsh7th/vscode-langservers-extracted
-- Configure schemastore to be used
jsonls = {
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
},
},
}
-- Setup neovim lua configuration
require('neodev').setup()
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Ensure the servers above are installed
local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys(servers),
}
mason_lspconfig.setup_handlers {
function(server_name)
require('lspconfig')[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = servers[server_name],
}
end,
}
-- [[ Configure nvim-cmp, and LuaSnip ]]
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {
-- Extend markdown snippets to pandoc filetype
-- https://github.com/L3MON4D3/LuaSnip/issues/132#issuecomment-1101710309
snippets = {
markdown = {},
},
luasnip.filetype_extend("pandoc", {"markdown"}),
}
-- Load snippets from ~/.config/nvim/LuaSnip/
require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/my_snippets/"})
-- Keymap to reload snippets
-- https://www.ejmastnak.com/tutorials/vim-latex/luasnip/#refreshing-snippets-from-a-separate-vim-instance
vim.keymap.set('n', '<Leader>L', '<Cmd>lua require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/my_snippets/"})<CR>', { desc = 'Reload [L]uaSnippets' })
-- [[ Configure nvim-cmp ]]
-- See `:help cmp`
local cmp = require 'cmp'
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {},
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
sources = {
{ name = 'nvim_lsp' },
{
name = 'buffer',
option = {
keyword_length = 4,
keyword_pattern = [[\k\+]],
},
},
{ name = 'luasnip' },
{ name = 'path' },
},
}
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et
-- Load options from core
require("core")
require("config.lazy")

530
init.lua.save 100644
View File

@ -0,0 +1,530 @@
-- Load options from core
require("core")
require("config.lazy")
-- Install package manager
-- https://github.com/folke/lazy.nvim
-- `:help lazy.nvim.txt` for more info
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)
-- NOTE: Here is where you install your plugins.
-- You can configure plugins using the `config` key.
--
-- You can also configure plugins after the setup call,
-- as they will be available in your neovim runtime.
require('lazy').setup({
-- NOTE: First, some plugins that don't require any configuration
-- Git related plugins
'tpope/vim-fugitive',
-- Detect tabstop and shiftwidth automatically
'tpope/vim-sleuth',
-- Improve surroundings management
'tpope/vim-surround',
-- NOTE: This is where your plugins related to LSP can be installed.
-- The configuration is done below. Search for lspconfig to find it below.
{
-- LSP Configuration & Plugins
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs to stdpath for neovim
{ 'williamboman/mason.nvim', config = true },
'williamboman/mason-lspconfig.nvim',
-- Useful status updates for LSP
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', tag = "legacy", opts = {} },
-- Additional lua configuration, makes nvim stuff amazing!
'folke/neodev.nvim',
},
},
{
-- Autocompletion
-- See Configure nvim-cmp at the end of this file
'hrsh7th/nvim-cmp',
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
{
'L3MON4D3/LuaSnip',
-- follow latest release
version = "v2.*",
-- install jsregexp (optional)
build = "make install_jsregexp"
},
'saadparwaiz1/cmp_luasnip',
-- Adds LSP completion capabilities
'hrsh7th/cmp-nvim-lsp',
-- Adds completion capabilities for text in buffers
'hrsh7th/cmp-buffer',
-- Adds path completion capabilities
'hrsh7th/cmp-path',
-- Adds a number of user-friendly snippets
'rafamadriz/friendly-snippets',
},
},
-- Useful plugin to show you pending keybinds.
{ 'folke/which-key.nvim', opts = {} },
{
-- Adds git releated signs to the gutter, as well as utilities for managing changes
'lewis6991/gitsigns.nvim',
opts = {
-- See `:help gitsigns.txt`
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '‾' },
changedelete = { text = '~' },
},
on_attach = function(bufnr)
vim.keymap.set('n', '[c', require('gitsigns').prev_hunk, { buffer = bufnr, desc = 'Go to Previous Hunk' })
vim.keymap.set('n', ']c', require('gitsigns').next_hunk, { buffer = bufnr, desc = 'Go to Next Hunk' })
vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' })
end,
},
},
{
-- Set lualine as statusline
'nvim-lualine/lualine.nvim',
-- See `:help lualine.txt`
opts = {
options = {
icons_enabled = true,
theme = 'adwaita',
component_separators = '|',
section_separators = '',
},
},
},
{
-- Add indentation guides even on blank lines
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help indent_blankline.txt`
main = "ibl",
opts = {
indent = {char = '┊'},
whitespace = {remove_blankline_trail = false},
},
},
-- "gc" to comment visual regions/lines
{ 'numToStr/Comment.nvim', opts = {} },
-- Fuzzy Finder (files, lsp, etc)
{ 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim' } },
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
-- Only load if `make` is available. Make sure you have the system
-- requirements installed.
{
'nvim-telescope/telescope-fzf-native.nvim',
-- NOTE: If you are having trouble with this installation,
-- refer to the README for telescope-fzf-native for more instructions.
build = 'make',
cond = function()
return vim.fn.executable 'make' == 1
end,
},
-- Extension to telescope to use Ag (or ripgrep) to filter results
{
'kelly-lin/telescope-ag'
},
-- Allow to search for snippets
{
'benfowler/telescope-luasnip.nvim'
},
{
-- Highlight, edit, and navigate code
'nvim-treesitter/nvim-treesitter',
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
},
build = ':TSUpdate',
},
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
-- These are some example plugins that I've included in the kickstart repository.
-- Uncomment any of the lines below to enable them.
-- require 'kickstart.plugins.autoformat',
-- require 'kickstart.plugins.debug',
-- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping
-- up-to-date with whatever is in the kickstart repo.
--
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
{ import = 'custom.plugins' },
}, {})
-- Restore the site folder of .local/share/nvim/ in the runtime rewritten by
-- lazy. See https://github.com/neovim/neovim/issues/23082#issuecomment-1510812311
vim.opt.rtp:append (vim.fn.stdpath ('data') .. '/site')
-- [[ Setting options ]]
-- See `:help vim.o`
-- NOTE: You can change these options as you wish!
-- Set a python virtualenv as python3 provider.
-- `vim.env.HOME` uses the neovim API to fetch the $HOME env.
-- The `..` appends strings in lua.
-- vim.g.python3_host_prog = vim.env.HOME .. '/.pyenv/versions/neovim3/bin/python'
-- [[ Basic Keymaps ]]
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
defaults = {
mappings = {
i = {
['<C-u>'] = false,
['<C-d>'] = false,
},
},
},
pickers = {
command_history = {
theme = "dropdown",
}
}
}
-- Enable telescope fzf native, if installed
pcall(require('telescope').load_extension, 'fzf')
-- Enable telescope luasnip extension, if installed
pcall(require('telescope').load_extension, 'luasnip')
-- Enable telescope-ag extension, if installed
pcall(require('telescope').load_extension, 'ag')
-- See `:help telescope.builtin`
vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' })
vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' })
vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to telescope to change theme, layout, etc.
require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
winblend = 10,
previewer = false,
})
end, { desc = '[/] Fuzzily search in current buffer' })
vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' })
vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sb', require('telescope.builtin').buffers, { desc = '[S]earch [B]uffers' })
vim.keymap.set('n', '<leader>ch', require('telescope.builtin').command_history, { desc = '[C]command [H]istory' })
vim.keymap.set('n', '<leader>ss', require'telescope'.extensions.luasnip.luasnip , { desc = '[S]earch [S]nippets' })
-- [[ Configure Treesitter ]]
-- See `:help nvim-treesitter`
require('nvim-treesitter.configs').setup {
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'vimdoc', 'vim', 'json' },
-- Do not install parses synchronously
sync_install = false,
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
auto_install = false,
-- List of parsers to ignore installing
ignore_install = {
"markdown"
},
-- Required property, but empr?
modules = {},
highlight = {
enable = true,
disable = { "markdown" },
},
indent = { enable = true, disable = { 'python' } },
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<c-space>',
node_incremental = '<c-space>',
scope_incremental = '<c-s>',
node_decremental = '<M-space>',
},
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
['aa'] = '@parameter.outer',
['ia'] = '@parameter.inner',
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
[']m'] = '@function.outer',
[']]'] = '@class.outer',
},
goto_next_end = {
[']M'] = '@function.outer',
[']['] = '@class.outer',
},
goto_previous_start = {
['[m'] = '@function.outer',
['[['] = '@class.outer',
},
goto_previous_end = {
['[M'] = '@function.outer',
['[]'] = '@class.outer',
},
},
swap = {
enable = true,
swap_next = {
['<leader>a'] = '@parameter.inner',
},
swap_previous = {
['<leader>A'] = '@parameter.inner',
},
},
},
}
-- Diagnostic keymaps
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
-- [[ Configure LSP ]]
-- This function gets run when an LSP connects to a particular buffer.
local on_attach = function(_, bufnr)
-- NOTE: Remember that lua is a real programming language, and as such it is possible
-- to define small helper and utility functions so you don't have to repeat yourself
-- many times.
--
-- In this case, we create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
local nmap = function(keys, func, desc)
if desc then
desc = 'LSP: ' .. desc
end
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
end
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- See `:help K` for why this keymap
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
-- Lesser used LSP functionality
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
nmap('<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, '[W]orkspace [L]ist Folders')
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
vim.lsp.buf.format()
end, { desc = 'Format current buffer with LSP' })
end
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. They will be passed to
-- the `settings` field of the server config. You must look up that documentation yourself.
local servers = {
-- clangd = {},
-- gopls = {},
pyright = {},
-- rust_analyzer = {},
-- tsserver = {},
-- marksman = {
-- ft = {
-- 'markdown',
-- 'pandoc'
-- }
-- },
lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
},
},
texlab = {
-- build = {
-- executable = "tectonic",
-- args = {
-- "-X",
-- "compile",
-- "%f",
-- "--synctex",
-- "--keep-logs",
-- "--keep-intermediates"
-- }
-- }
},
-- Require vscode-langservers-extracted
-- https://github.com/hrsh7th/vscode-langservers-extracted
-- Configure schemastore to be used
jsonls = {
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
},
},
}
-- Setup neovim lua configuration
require('neodev').setup()
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Ensure the servers above are installed
local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys(servers),
}
mason_lspconfig.setup_handlers {
function(server_name)
require('lspconfig')[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = servers[server_name],
}
end,
}
-- [[ Configure nvim-cmp, and LuaSnip ]]
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {
-- Extend markdown snippets to pandoc filetype
-- https://github.com/L3MON4D3/LuaSnip/issues/132#issuecomment-1101710309
snippets = {
markdown = {},
},
luasnip.filetype_extend("pandoc", {"markdown"}),
}
-- Load snippets from ~/.config/nvim/LuaSnip/
require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/my_snippets/"})
-- Keymap to reload snippets
-- https://www.ejmastnak.com/tutorials/vim-latex/luasnip/#refreshing-snippets-from-a-separate-vim-instance
vim.keymap.set('n', '<Leader>L', '<Cmd>lua require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/my_snippets/"})<CR>', { desc = 'Reload [L]uaSnippets' })
-- [[ Configure nvim-cmp ]]
-- See `:help cmp`
local cmp = require 'cmp'
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {},
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
sources = {
{ name = 'nvim_lsp' },
{
name = 'buffer',
option = {
keyword_length = 4,
keyword_pattern = [[\k\+]],
},
},
{ name = 'luasnip' },
{ name = 'path' },
},
}
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

View File

@ -0,0 +1,54 @@
-- Install lazy.nvim as package manager
-- https://github.com/folke/lazy.nvim
-- https://lazy.folke.io/installation
-- `:help lazy.nvim.txt` for more info
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"--branch=stable",
lazyrepo,
lazypath
})
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Add the site folder of .local/share/nvim/ in the runtime path
-- which is rewritten by lazy.nvim.
-- https://github.com/neovim/neovim/issues/23082#issuecomment-1510812311
vim.opt.rtp:append (vim.fn.stdpath ('data') .. '/site')
-- Configure lazy.nvim
require("lazy").setup({
spec = {
-- Import the plugins directory and subdirectories
{ import = "plugins" },
-- Markdown related plugings and configuration
{ import = "plugins.markdown" },
-- LSP related plugins and configuration
{ import = "plugins.lsp" },
},
-- Automatically check for plugin updates
checker = {
enabled = true,
notify = false
},
-- Theme during installation
install = {
colorscheme = {
"adwaita"
}
},
})

View File

@ -0,0 +1,3 @@
-- Load all module files
require("core.keymaps")
require("core.options")

View File

@ -0,0 +1,41 @@
-- Set <space> as the leader key
-- See `:help mapleader`
-- NOTE: Must happen before plugins are required
-- (otherwise wrong leader will be used)
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Keymaps for better default experience
-- See `:help vim.keymap.set()`
-- Unmap the space key (to No operation)
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
-- Remap for dealing with word wrap
vim.keymap.set(
'n',
'k',
"v:count == 0 ? 'gk' : 'k'",
{ expr = true, silent = true }
)
vim.keymap.set(
'n',
'j',
"v:count == 0 ? 'gj' : 'j'",
{ expr = true, silent = true }
)
-- [[ Highlight on yank ]]
-- See `:help vim.highlight.on_yank()`
local highlight_group = vim.api.nvim_create_augroup(
'YankHighlight',
{ clear = true }
)
vim.api.nvim_create_autocmd('TextYankPost', {
callback = function()
vim.highlight.on_yank()
end,
group = highlight_group,
pattern = '*',
})

View File

@ -0,0 +1,71 @@
-- Search and replace
-- Ignore case except when using a capital case
-- Highlight found occurrences
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.hlsearch = true
-- Preview changes when searching and substituing
-- nosplit avoid to display the preview in a separate split
vim.o.inccommand = "nosplit"
-- Display relative line numbers
-- Except to the active line
vim.opt.relativenumber = true
vim.opt.number = true
-- Set the maximum width of a line
vim.opt.textwidth = 79
-- Display the cusor column at 79+1 column
vim.o.colorcolumn = '+1'
-- Enable mouse mode
vim.opt.mouse = 'a'
-- Sync clipboard between OS and Neovim.
-- See `:help 'clipboard'`
vim.opt.clipboard = 'unnamedplus'
-- Tabs and indentation
vim.opt.tabstop = 2
vim.opt.expandtab = true
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
-- Enable break indent
vim.opt.breakindent = true
-- Look and feel
-- NOTE: You should make sure your terminal supports this
vim.opt.termguicolors = true
-- Keep signcolumn on by default
vim.opt.signcolumn = 'yes'
-- Splits
-- Display vertical split on the right, and horizontal split below
vim.opt.splitright = true
vim.opt.splitbelow = true
-- Save undo history
vim.opt.undofile = true
-- Case insensitive searching UNLESS /C or capital in search
vim.opt.ignorecase = true
vim.opt.smartcase = true
-- Decrease update time
vim.opt.updatetime = 250
vim.opt.timeout = true
vim.opt.timeoutlen = 300
-- Set completeopt to have a better completion experience
vim.opt.completeopt = 'menuone,noselect'
-- Spelling
-- Set the spelling for English, French and German
vim.opt.spelllang = 'en,fr'
-- Words with a '-' are a single (composed) word
vim.opt.iskeyword:append("-")
-- Set the folding level to 1, to allow level 2 headers to be seen.
vim.opt.foldlevel = 1

View File

@ -1,17 +0,0 @@
-- File: lua/custom/plugins/autopairs.lua
return {
"windwp/nvim-autopairs",
-- Optional dependency
dependencies = { 'hrsh7th/nvim-cmp' },
config = function()
require("nvim-autopairs").setup {}
-- If you want to automatically add `(` after selecting a function or method
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local cmp = require('cmp')
cmp.event:on(
'confirm_done',
cmp_autopairs.on_confirm_done()
)
end,
}

View File

@ -1,5 +0,0 @@
-- You can add your own plugins here or in other files in this directory!
-- I promise not to create any merge conflicts in this directory :)
--
-- See the kickstart.nvim README for more information
return {}

View File

@ -1,14 +0,0 @@
-- makdown-preview.nvim
-- installed with code found at https://github.com/iamcco/markdown-preview.nvim/issues/558#issuecomment-1514701537
return {
{
"iamcco/markdown-preview.nvim",
ft = {
'pandoc',
'markdown'
},
lazy = true,
build = "cd app && npm install && git reset --hard",
},
}

View File

@ -1,22 +0,0 @@
-- Plugin for file tree: neo-tree
-- Using the kickstart and the neo-tree documentations
-- Unless you are still migrating, remove the deprecated commands from v1.x
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]])
return {
"nvim-neo-tree/neo-tree.nvim",
version = "*",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
"MunifTanjim/nui.nvim",
},
config = function ()
require('neo-tree').setup {
window = {
width = 36
}
}
end,
}

View File

@ -1,26 +0,0 @@
-- Pandoc plugins: vim-pandoc, vim-pandoc-syntax
-- Defines the filetypes that have to be recognize by vim-pandoc. Allows
-- mardown-preview to be available with pandoc filetype.
vim.cmd([[ let g:mkdp_filetypes = ['markdown', 'pandoc', 'pandoc.markdown'] ]])
-- Sets the pandoc formatting mode to hardwrap
vim.cmd([[ let g:pandoc#formatting#mode="hA" ]])
-- Keymaps to switch to soft or hardwarp, or to toggle.
vim.keymap.set('n', '<leader>sw', '<cmd>call pandoc#formatting#UseSoftWraps()<CR>', {desc = 'Switch to softwrap'})
vim.keymap.set('n', '<leader>hw', '<cmd>call pandoc#formatting#UseHardWraps()<CR>', {desc = 'Switch to hardwrap'})
vim.keymap.set('n', '<leader>tw', '<cmd>call pandoc#formatting#ToggleAutoformat()<CR>', {desc = 'Toggle autoformat, to deactivate it'})
return {
{
"vim-pandoc/vim-pandoc",
ft = "pandoc",
lazy = true,
},
{
"vim-pandoc/vim-pandoc-syntax",
ft = "pandoc",
lazy = true,
},
}

View File

@ -1,22 +0,0 @@
-- In order to manage CSV files
return {
'cameron-wags/rainbow_csv.nvim',
lazy = true,
config = true,
ft = {
'csv',
'tsv',
'csv_semicolon',
'csv_whitespace',
'csv_pipe',
'rfc_csv',
'rfc_semicolon'
},
cmd = {
'RainbowDelim',
'RainbowDelimSimple',
'RainbowDelimQuoted',
'RainbowMultiDelim'
}
}

View File

@ -1,6 +0,0 @@
-- Plugin for schemastore
-- https://github.com/b0o/SchemaStore.nvim
return {
"b0o/schemastore.nvim",
}

View File

@ -1,17 +0,0 @@
return {
'linux-cultist/venv-selector.nvim',
branch = 'regexp',
dependencies = { 'neovim/nvim-lspconfig', 'nvim-telescope/telescope.nvim', 'mfussenegger/nvim-dap-python' },
opts = {
-- Your options go here
-- name = "venv",
-- auto_refresh = false
},
event = 'VeryLazy', -- Optional: needed only if you want to type `:VenvSelect` without a keymapping
keys = {
-- Keymap to open VenvSelector to pick a venv.
{ '<leader>vs', '<cmd>VenvSelect<cr>' },
-- Keymap to retrieve the venv from a cache (the one previously used for the same project directory).
{ '<leader>vc', '<cmd>VenvSelectCached<cr>' },
},
}

View File

@ -1,74 +0,0 @@
-- autoformat.lua
--
-- Use your language server to automatically format your code on save.
-- Adds additional commands as well to manage the behavior
return {
'neovim/nvim-lspconfig',
config = function()
-- Switch for controlling whether you want autoformatting.
-- Use :KickstartFormatToggle to toggle autoformatting on or off
local format_is_enabled = true
vim.api.nvim_create_user_command('KickstartFormatToggle', function()
format_is_enabled = not format_is_enabled
print('Setting autoformatting to: ' .. tostring(format_is_enabled))
end, {})
-- Create an augroup that is used for managing our formatting autocmds.
-- We need one augroup per client to make sure that multiple clients
-- can attach to the same buffer without interfering with each other.
local _augroups = {}
local get_augroup = function(client)
if not _augroups[client.id] then
local group_name = 'kickstart-lsp-format-' .. client.name
local id = vim.api.nvim_create_augroup(group_name, { clear = true })
_augroups[client.id] = id
end
return _augroups[client.id]
end
-- Whenever an LSP attaches to a buffer, we will run this function.
--
-- See `:help LspAttach` for more information about this autocmd event.
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-attach-format', { clear = true }),
-- This is where we attach the autoformatting for reasonable clients
callback = function(args)
local client_id = args.data.client_id
local client = vim.lsp.get_client_by_id(client_id)
local bufnr = args.buf
-- Only attach to clients that support document formatting
if not client.server_capabilities.documentFormattingProvider then
return
end
-- Tsserver usually works poorly. Sorry you work with bad languages
-- You can remove this line if you know what you're doing :)
if client.name == 'tsserver' then
return
end
-- Create an autocmd that will run *before* we save the buffer.
-- Run the formatting command for the LSP that has just attached.
vim.api.nvim_create_autocmd('BufWritePre', {
group = get_augroup(client),
buffer = bufnr,
callback = function()
if not format_is_enabled then
return
end
vim.lsp.buf.format {
async = false,
filter = function(c)
return c.id == client.id
end,
}
end,
})
end,
})
end,
}

View File

@ -1,86 +0,0 @@
-- debug.lua
--
-- Shows how to use the DAP plugin to debug your code.
--
-- Primarily focused on configuring the debugger for Go, but can
-- be extended to other languages as well. That's why it's called
-- kickstart.nvim and not kitchen-sink.nvim ;)
return {
-- NOTE: Yes, you can install new plugins here!
'mfussenegger/nvim-dap',
-- NOTE: And you can specify dependencies as well
dependencies = {
-- Creates a beautiful debugger UI
'rcarriga/nvim-dap-ui',
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here
'leoluz/nvim-dap-go',
},
config = function()
local dap = require 'dap'
local dapui = require 'dapui'
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations
automatic_setup = true,
-- You can provide additional configuration to the handlers,
-- see mason-nvim-dap README for more information
handlers = {},
-- You'll need to check that you have the required things installed
-- online, please don't ask me how to install them :)
ensure_installed = {
-- Update this to ensure that you have the debuggers for the langs you want
'delve',
},
}
-- Basic debugging keymaps, feel free to change to your liking!
vim.keymap.set('n', '<F5>', dap.continue)
vim.keymap.set('n', '<F1>', dap.step_into)
vim.keymap.set('n', '<F2>', dap.step_over)
vim.keymap.set('n', '<F3>', dap.step_out)
vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint)
vim.keymap.set('n', '<leader>B', function()
dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ')
end)
-- Dap UI setup
-- For more information, see |:help nvim-dap-ui|
dapui.setup {
-- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices.
icons = { expanded = '', collapsed = '', current_frame = '*' },
controls = {
icons = {
pause = '',
play = '',
step_into = '',
step_over = '',
step_out = '',
step_back = 'b',
run_last = '▶▶',
terminate = '',
disconnect = "",
},
},
}
-- toggle to see last session result. Without this ,you can't see session output in case of unhandled exception.
vim.keymap.set("n", "<F7>", dapui.toggle)
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config
require('dap-go').setup()
end,
}

View File

@ -0,0 +1,9 @@
-- Adwaita colorscheme
return {
"Mofiqul/adwaita.nvim",
lazy = false,
priority = 1000,
config = function()
vim.cmd('colorscheme adwaita')
end
}

View File

@ -0,0 +1,38 @@
-- Install and configure nvim-autopairs
-- https://github.com/windwp/nvim-autopairs
return {
"windwp/nvim-autopairs",
event = { "InsertEnter" },
dependencies = {
"hrsh7th/nvim-cmp",
},
config = function()
-- Import nvim-autopairs
local autopairs = require("nvim-autopairs")
-- Configure autopairs
autopairs.setup({
-- Enable treesitter
check_ts = true,
disable_filetype = { "TelescopePrompt" },
ts_config = {
-- Don't add pairs in lua string treesitter nodes
lua = { "string" },
-- Don't add pairs in javscript template_string treesitter nodes
javascript = { "template_string" },
-- don't check treesitter on java
java = false,
},
})
-- Import nvim-autopairs completion functionality
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
-- Import nvim-cmp plugin (completions plugin)
local cmp = require("cmp")
-- Make autopairs and completion work together
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
end,
}

View File

@ -0,0 +1,6 @@
-- Install and configure Comment.nvim
-- "gc" to comment visual regions/lines
return {
'numToStr/Comment.nvim',
opts = {}
}

View File

@ -0,0 +1,65 @@
return {
"lewis6991/gitsigns.nvim",
event = { "BufReadPre", "BufNewFile" },
opts = {
signs = {
add = { text = "+" },
change = { text = "~" },
delete = { text = "_" },
topdelete = { text = "" },
changedelete = { text = "~" },
},
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local function map(mode, l, r, desc)
vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc })
end
-- Navigation
map("n", "]h", gs.next_hunk, "Next Hunk")
map("n", "[h", gs.prev_hunk, "Prev Hunk")
-- Actions
map("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
map("n", "<leader>hr", gs.reset_hunk, "Reset hunk")
map("v", "<leader>hs", function()
gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, "Stage hunk")
map("v", "<leader>hr", function()
gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, "Reset hunk")
map("n", "<leader>hS", gs.stage_buffer, "Stage buffer")
map("n", "<leader>hR", gs.reset_buffer, "Reset buffer")
map("n", "<leader>hu", gs.undo_stage_hunk, "Undo stage hunk")
map("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
map("n", "<leader>hb", function()
gs.blame_line({ full = true })
end, "Blame line")
map(
"n",
"<leader>hB",
gs.toggle_current_line_blame,
"Toggle line blame"
)
map("n", "<leader>hd", gs.diffthis, "Diff this")
map("n", "<leader>hD", function()
gs.diffthis("~")
end, "Diff this ~")
-- Text object
map(
{ "o", "x" },
"ih",
":<C-U>Gitsigns select_hunk<CR>",
"Gitsigns select hunk"
)
end,
},
}

View File

@ -0,0 +1,13 @@
-- Install and configure indent-blankline.nvim
-- See `:help indent_blankline.txt`
return {
-- Add indentation guides even on blank lines
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
main = "ibl",
opts = {
indent = {char = ''},
whitespace = {remove_blankline_trail = false},
},
}

View File

@ -0,0 +1,11 @@
return {
-- Install plenary.nvim
-- Plenary is a ensemble of lua functions used by many plugins
"nvim-lua/plenary.nvim",
-- Vim plugin for Git, of Git plugin for Vim
"tpope/vim-fugitive",
-- Use <C-a>/<C-x> to increment dates, times, and more
"tpope/vim-speeddating",
-- Improve surroundings management
"tpope/vim-surround"
}

View File

@ -0,0 +1,8 @@
-- Install and configure lazydev.nvim
-- Configure properly lua_ls for editing neovim configuration
return {
"folke/lazydev.nvim",
ft = "lua",
opts = {},
}

View File

@ -0,0 +1,10 @@
-- Install lsp-zero, to ease LSP support configuration
-- https://lsp-zero.netlify.app
-- https://github.com/VonHeikemen/lsp-zero.nvim/
return {
"VonHeikemen/lsp-zero.nvim",
branch = "v4.x",
lazy = true,
config = false,
}

View File

@ -0,0 +1,161 @@
-- Install and configure nvim-lspconfig
return {
"neovim/nvim-lspconfig",
event = { "BufReadPre", "BufNewFile" },
dependencies = {
-- Send LSP results to autocompletion nvim-cmp
"hrsh7th/cmp-nvim-lsp",
-- Adds code actions, such as smart file renaming, etc
{ "antosha417/nvim-lsp-file-operations", config = true },
-- 💫 Extensible UI for Neovim notifications and LSP progress messages
{ 'j-hui/fidget.nvim', tag = "legacy", opts = {} },
},
config = function()
-- Import lsp-zero
local lsp_zero = require("lsp-zero")
-- Activate some functionalities when a LSP is activated to the current
-- file
local lsp_attach = function(_, bufnr)
local opts = { buffer = bufnr, silent = true }
-- Keymaps
opts.desc = "Show LSP references"
vim.keymap.set(
"n",
"gR",
"<cmd>Telescope lsp_references<CR>",
opts
)
opts.desc = "Go to declaration"
vim.keymap.set(
"n",
"gD",
vim.lsp.buf.declaration,
opts
)
opts.desc = "Show LSP definitions"
vim.keymap.set(
"n",
"gd",
"<cmd>Telescope lsp_definitions<CR>",
opts
)
opts.desc = "Show LSP implementations"
vim.keymap.set(
"n",
"gi",
"<cmd>Telescope lsp_implementations<CR>",
opts
)
opts.desc = "Show LSP type definitions"
vim.keymap.set(
"n",
"gt",
"<cmd>Telescope lsp_type_definitions<CR>",
opts
)
opts.desc = "Show LSP signature help"
vim.keymap.set(
"n",
"gs",
vim.lsp.buf.signature_help,
opts
)
opts.desc = "See available code actions"
vim.keymap.set(
{ "n", "v" },
"<leader>ca",
vim.lsp.buf.code_action,
opts
)
opts.desc = "Smart rename"
vim.keymap.set(
"n",
"<leader>rn",
vim.lsp.buf.rename,
opts
)
opts.desc = "Show buffer diagnostics"
vim.keymap.set(
"n",
"<leader>D",
"<cmd>Telescope diagnostics bufnr=0<CR>",
opts
)
opts.desc = "Show line diagnostics"
vim.keymap.set(
"n",
"<leader>d",
vim.diagnostic.open_float,
opts
)
opts.desc = "Go to previous diagnostic"
vim.keymap.set("n", "[d", function()
vim.diagnostic.jump({ count = -1, float = true })
end, opts) -- jump to previous diagnostic in buffer
opts.desc = "Go to next diagnostic"
vim.keymap.set("n", "]d", function()
vim.diagnostic.jump({ count = 1, float = true })
end, opts) -- jump to next diagnostic in buffer
opts.desc = "Show documentation for what is under cursor"
vim.keymap.set(
"n",
"K",
vim.lsp.buf.hover,
opts
)
opts.desc = "Format buffer"
vim.keymap.set(
{ "n", "x" },
"F",
"<cmd>lua vim.lsp.buf.format({async = true})<cr>",
opts
)
opts.desc = "Restart LSP"
vim.keymap.set(
"n",
"<leader>rs",
":LspRestart<CR>",
opts
)
end
lsp_zero.extend_lspconfig({
-- Display diagnostic signs in the sign column
sign_text = true,
-- Attach the keymap function
lsp_attach = lsp_attach,
-- Extend the default completion capabilities by LSP suggestions
capabilities = require("cmp_nvim_lsp").default_capabilities(),
})
-- Use lsp_zero to configure interface
lsp_zero.ui({
float_border = "rounded",
sign_text = {
error = "",
warn = "",
hint = "󰠠 ",
info = "",
},
})
end,
}

View File

@ -0,0 +1,120 @@
-- Install and configure mason.nvim which will install automatically the needed
-- LSP
return {
"williamboman/mason.nvim",
dependencies = {
"williamboman/mason-lspconfig.nvim",
"WhoIsSethDaniel/mason-tool-installer.nvim",
},
config = function()
-- Import mason
local mason = require("mason")
-- Import mason-lspconfig
local mason_lspconfig = require("mason-lspconfig")
-- Import lspconfig
local lspconfig = require("lspconfig")
-- Import mason-tool-installer
local mason_tool_installer = require("mason-tool-installer")
-- Activate mason and set icones
mason.setup({
ui = {
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
})
mason_tool_installer.setup({
ensure_installed = {
"black",
"isort",
"prettier",
"stylua",
"tree-sitter-cli",
}
})
mason_lspconfig.setup({
-- LSP to be installed by default
-- Available LSP: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
-- LSP can be installed with :Mason
-- But installing LSP through the following list is better
ensure_installed = {
"cssls",
"html",
"jsonls",
"lua_ls",
"pylsp",
"yamlls",
},
handlers = {
-- Function called for each LSP from the ensure_installed list loaded
function(server_name)
-- Activate all LSP from the ensure_installed list with its default
-- configuration
lspconfig[server_name].setup({})
end,
-- Then, configure each LSP as needed
-- See https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
--
-- To deactivate a LSP:
-- lsp_name = require("lsp-zero").noop,
-- The LSP name before`= function()` has to be the same than after
-- `lspconfig.`
-- The first one is the mason_lspconfig key, the seconde one is the
-- lspconfig key. They are identical to the ensure_installed entries.
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylsp
pylsp = function()
lspconfig.pylsp.setup({
settings = {
pylsp = {
plugins = {
pyflakes = { enabled = false },
pycodestyle = {
enabled = true,
ignore = { "E501" },
},
},
},
},
})
end,
lua_ls = function()
lspconfig.lua_ls.setup({
settings = {
Lua = {
diagnostics = {
-- Force LSP to recognize global variable `vim`.
globals = { "vim" },
disable = { "missing-fields" },
}
}
}
})
end,
jsonls = function()
lspconfig.lua_ls.setup({
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
}
}
})
end
},
})
end,
}

View File

@ -0,0 +1,12 @@
-- Install schemastore.nvim which provides schemas for
-- JSON and YAML.
-- Needed for jsonls LSP
return {
"b0o/schemastore.nvim",
lazy = true,
ft = {
"json",
"yaml",
}
}

View File

@ -0,0 +1,63 @@
-- Install and configure lualine
-- https://github.com/nvim-lualine/lualine.nvim
return {
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
local lualine = require("lualine")
-- Display the lazy update count
local lazy_status = require("lazy.status")
-- configuration de lualine
lualine.setup({
options = {
icons_enabled = true,
theme = "auto",
component_separators = "|",
section_separators = "",
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
},
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch", "diff", "diagnostics" },
lualine_c = { { "filename", path = 1 } },
lualine_x = {
{
lazy_status.updates,
cond = lazy_status.has_updates,
-- color = { fg = "#ff9e64" },
},
{ "encoding" },
{ "fileformat" },
{ "filetype" },
},
lualine_y = { "progress" },
lualine_z = { "location" },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {},
})
end,
}

View File

@ -0,0 +1,16 @@
-- Install and configure makdown-preview.nvim
-- https://github.com/iamcco/markdown-preview.nvim
-- https://github.com/iamcco/markdown-preview.nvim/issues/558#issuecomment-1514701537
return {
{
"iamcco/markdown-preview.nvim",
ft = {
'pandoc',
'markdown',
'pandoc.markdown'
},
lazy = true,
build = "cd app && npm install && git reset --hard",
},
}

View File

@ -1,17 +1,23 @@
-- Mkdownflow plugin.
-- Install and Configure Mkdownflow plugin.
-- Allows to follow links, anchors, create links, and many more.
-- https://github.com/jakewvincent/mkdnflow.nvim
-- Keymaps for mkdnflow.
-- Table
vim.keymap.set({'n','x','v'}, '<leader>tf', '<cmd>MkdnTableFormat<CR>', {desc = 'Format table under cursor'})
vim.keymap.set(
{'n','x','v'},
'<leader>tf',
'<cmd>MkdnTableFormat<CR>',
{desc = 'Format table under cursor'}
)
return {
{
"jakewvincent/mkdnflow.nvim",
ft = {
'pandoc',
'markdown'
'markdown',
'pandoc.markdown',
},
lazy = true,
config = function ()

View File

@ -0,0 +1,50 @@
-- Install and configure Pandoc plugins: vim-pandoc, vim-pandoc-syntax
-- Defines the filetypes that should be recognize by vim-pandoc. Allows
-- mardown-preview to be available with pandoc filetype.
vim.cmd([[ let g:mkdp_filetypes = ['markdown', 'pandoc', 'pandoc.markdown'] ]])
-- Sets the pandoc formatting mode to hardwrap
vim.cmd([[ let g:pandoc#formatting#mode="hA" ]])
-- Keymaps to switch to soft or hardwarp, or to toggle.
vim.keymap.set(
'n',
'<leader>sw',
'<cmd>call pandoc#formatting#UseSoftWraps()<CR>',
{desc = 'Switch to softwrap'}
)
vim.keymap.set(
'n',
'<leader>hw',
'<cmd>call pandoc#formatting#UseHardWraps()<CR>',
{desc = 'Switch to hardwrap'}
)
vim.keymap.set('n',
'<leader>tw',
'<cmd>call pandoc#formatting#ToggleAutoformat()<CR>',
{desc = 'Toggle autoformat, to deactivate it'}
)
return {
{
"vim-pandoc/vim-pandoc",
ft = {
'markdown',
'pandoc',
'pandoc.markdown'
},
lazy = true,
},
{
"vim-pandoc/vim-pandoc-syntax",
ft = {
'markdown',
'pandoc',
'pandoc.markdown'
},
lazy = true,
},
}

View File

@ -0,0 +1,135 @@
-- Install and configure nvim-cmp to provide completion
-- Install nvim-cmp and dependencies
return {
"hrsh7th/nvim-cmp",
event = { "InsertEnter", "CmdlineEnter" },
dependencies = {
-- Adds completion capabilities for text in buffers
"hrsh7th/cmp-buffer",
-- Adds path completion capabilities
"hrsh7th/cmp-path",
-- Adds vim cmdline completion capabilities
"hrsh7th/cmp-cmdline",
-- Snippet Engine & its associated nvim-cmp source
{
"L3MON4D3/LuaSnip",
-- Follow latest release
version = "v2.*",
-- Install jsregexp (optional)
build = "make install_jsregexp",
},
"saadparwaiz1/cmp_luasnip",
-- Adds a number of user-friendly snippets
"rafamadriz/friendly-snippets",
-- Adds emoji completion after ':' (to be evaluated)
"hrsh7th/cmp-emoji",
-- vs-code pictrograms
"onsails/lspkind.nvim",
},
-- Configure nvim-cmp
config = function()
local cmp = require("cmp")
local luasnip = require("luasnip")
local lspkind = require("lspkind")
luasnip.config.setup {
-- Extend markdown snippets to pandoc filetype
-- https://github.com/L3MON4D3/LuaSnip/issues/132#issuecomment-1101710309
snippets = {
markdown = {},
},
luasnip.filetype_extend("pandoc", {"markdown"}),
}
-- Load snippets from ~/.config/nvim/my_snippets/
require("luasnip.loaders.from_lua").lazy_load(
{paths = "~/.config/nvim/my_snippets/"}
)
require("luasnip.loaders.from_vscode").lazy_load()
cmp.setup({
completion = {
completeopt = "menu,menuone,preview,noselect",
},
snippet = { -- on utilise luasnip comme moteur de snippets
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = {
["<C-p>"] = cmp.mapping.select_prev_item(),
["<C-n>"] = cmp.mapping.select_next_item(),
["<C-d>"] = cmp.mapping.scroll_docs(-1),
["<C-f>"] = cmp.mapping.scroll_docs(1),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
-- Insert current selection.
-- `false` insert only explicitly selected items
["<CR>"] = cmp.mapping.confirm({ select = true }),
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
-- Autocompletion sources
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "nvim_lua" },
{ name = "lazydev" },
{ name = "luasnip" }, -- snippets
{
name = "buffer",
option = {
keyword_length = 4,
keyword_pattern = [[\k\+]],
},
},
{ name = "path" },
{ name = "emoji" },
}),
formatting = {
-- Default behavior
expandable_indicator = true,
-- Default display fields
fields = { "abbr", "kind", "menu" },
format = lspkind.cmp_format({
mode = "symbol_text",
-- Each entry is prefixed by it's type
menu = {
nvim_lsp = "[LSP]",
buffer = "[Buffer]",
luasnip = "[LuaSnip]",
nvim_lua = "[Lua]",
lazydev = "[Lazydev]",
path = "[Path]",
emoji = "[Emoji]",
},
}),
},
})
end,
}

View File

@ -0,0 +1,27 @@
-- Install a file explorer
-- https://github.com/nvim-tree/nvim-tree.lua
-- nvim-tree as replacement for neo-tree
return {
"nvim-tree/nvim-tree.lua",
version = "*",
lazy = false,
dependencies = {
"nvim-tree/nvim-web-devicons",
},
config = function()
-- disable netrw at the very start of your init.lua
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
require("nvim-tree").setup({})
-- <leader>e to toggle the explorer buffer
vim.keymap.set(
"n",
"<leader>e",
"<cmd>NvimTreeFindFileToggle<CR>",
{ desc = "Toggle the file explorer" }
)
end,
}

View File

@ -0,0 +1,23 @@
-- Install and configure rainbow_csv.nvim
-- In order to manage CSV files
return {
'cameron-wags/rainbow_csv.nvim',
lazy = true,
config = true,
ft = {
'csv',
'tsv',
'csv_semicolon',
'csv_whitespace',
'csv_pipe',
'rfc_csv',
'rfc_semicolon'
},
cmd = {
'RainbowDelim',
'RainbowDelimSimple',
'RainbowDelimQuoted',
'RainbowMultiDelim'
}
}

View File

@ -0,0 +1,135 @@
-- Install and configure Telescope
-- https://github.com/nvim-telescope/telescope.nvim
return {
"nvim-telescope/telescope.nvim",
branch = "0.1.x",
dependencies = {
"nvim-lua/plenary.nvim",
-- C implementation of fzf to improve performance
{
"nvim-telescope/telescope-fzf-native.nvim",
build = "make"
},
"nvim-tree/nvim-web-devicons",
-- Extension to telescope to use Ag (or ripgrep) to filter results
'kelly-lin/telescope-ag',
-- Allow to search for snippets
'benfowler/telescope-luasnip.nvim',
-- Highlight, edit, and navigate code
'nvim-treesitter/nvim-treesitter',
'nvim-treesitter/nvim-treesitter-textobjects',
},
-- Configure Telescope
config = function()
local telescope = require("telescope")
local actions = require("telescope.actions")
telescope.setup({
defaults = {
-- Parce que c'est joli
prompt_prefix = "",
selection_caret = "",
path_display = { "smart" },
file_ignore_patterns = { ".git/", "node_modules" },
mappings = {
i = {
},
},
pickers = {
command_history = {
theme = "dropdown",
}
}
},
})
telescope.load_extension("fzf")
-- telescope.load_extension("luasnip")
-- telescope.load_extension("ag")
-- set keymaps
-- <leader>of for oldfiles
vim.keymap.set(
"n",
"<leader>of",
"<cmd>Telescope oldfiles<cr>",
{ desc = " [?] Find recently opened files " }
)
-- <leader>sb
vim.keymap.set(
"n",
"<leader>sb",
"<cmd>Telescope buffers<cr>",
{ desc = "[S]earch [B]uffers " }
)
-- <leader>/ to fuzzily search in current buffer
vim.keymap.set(
'n',
'<leader>/',
"<cmd>Telescope current_buffer_fuzzy_find<cr>",
{ desc = '[/] Fuzzily search in current buffer' })
-- <leader>sh to search help
vim.keymap.set(
"n",
"<leader>sh",
"<cmd>Telescope help_tags<cr>",
{ desc = "[S]earch [H]elp" }
)
-- <leader>sf to search files
vim.keymap.set(
"n",
"<leader>sf",
"<cmd>Telescope find_files<cr>",
{ desc = "[S]earch [F]iles" }
)
-- <leader>gf to search files in git history
vim.keymap.set(
"n",
"<leader>gf",
"<cmd>Telescope git_files<cr>",
{ desc = "Search [G]it [F]iles" }
)
-- <leader>sg to (rip)grep through files
vim.keymap.set(
"n",
"<leader>sg",
"<cmd>Telescope live_grep<cr>",
{ desc = "[S]earch by [G]rep" }
)
-- <leader>sw to search for other occurrences of the current word
vim.keymap.set(
"n",
"<leader>sw",
"<cmd>Telescope grep_string<cr>",
{ desc = "[S]earch current [W]ord" }
)
-- <leader>ch to search in the command history
vim.keymap.set(
"n",
"<leader>ch",
"<cmd>Telescope command_history<cr>",
{ desc = "[C]ommand [H]istory" }
)
-- <leader>sk to search for keymaps
vim.keymap.set(
"n",
"<leader>sk",
"<cmd>Telescope keymaps<cr>",
{ desc = "[S]earch [K]eymaps" }
)
end,
}

View File

@ -0,0 +1,137 @@
-- Diagnostic keymaps
vim.keymap.set(
'n',
'[d',
vim.diagnostic.goto_prev,
{ desc = 'Go to previous diagnostic message' }
)
vim.keymap.set(
'n',
']d',
vim.diagnostic.goto_next,
{ desc = 'Go to next diagnostic message' }
)
vim.keymap.set(
'n',
'<leader>e',
vim.diagnostic.open_float,
{ desc = 'Open floating diagnostic message' }
)
vim.keymap.set(
'n',
'<leader>q',
vim.diagnostic.setloclist,
{ desc = 'Open diagnostics list' }
)
-- Install and configure treesitter
return {
"nvim-treesitter/nvim-treesitter",
dependencies = {
"nvim-treesitter/nvim-treesitter-textobjects",
},
build = ":TSUpdate",
-- Configure treesitter
config = function()
local config = require("nvim-treesitter.configs")
config.setup({
-- Enable color syntax
highlight = {
enable = true,
disable = { "markdown" },
},
-- Enable better indentation management
indent = { enable = true },
-- Installed and configured languages
ensure_installed = {
"bash",
"dot",
"gitignore",
"html",
"json",
"latex",
"lua",
"python",
"vim",
"yaml",
},
-- List of parsers to ignore installing
ignore_install = {
"markdown",
"markdown_inline"
},
-- Do not install parses synchronously
sync_install = false,
-- Do not install automatically missing parsers
auto_install = false,
-- <Ctrl-space> select the current bloc
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<C-space>",
node_incremental = "<C-space>",
scope_incremental = false,
node_decremental = "<bs>",
},
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj
keymaps = {
-- You can use the capture groups defined in textobjects.scm
['aa'] = '@parameter.outer',
['ia'] = '@parameter.inner',
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
[']m'] = '@function.outer',
[']]'] = '@class.outer',
},
goto_next_end = {
[']M'] = '@function.outer',
[']['] = '@class.outer',
},
goto_previous_start = {
['[m'] = '@function.outer',
['[['] = '@class.outer',
},
goto_previous_end = {
['[M'] = '@function.outer',
['[]'] = '@class.outer',
},
},
swap = {
enable = true,
swap_next = {
['<leader>a'] = '@parameter.inner',
},
swap_previous = {
['<leader>A'] = '@parameter.inner',
},
},
},
})
end,
}

View File

@ -0,0 +1,43 @@
-- Install and configure trouble.nvim
-- https://github.com/folke/trouble.nvim
return{
"folke/trouble.nvim",
opts = {
-- For default options, refer to the configuration section
-- for custom setup.
},
cmd = "Trouble",
keys = {
{
"<leader>xx",
"<cmd>Trouble diagnostics toggle<cr>",
desc = "Diagnostics (Trouble)",
},
{
"<leader>xX",
"<cmd>Trouble diagnostics toggle filter.buf=0<cr>",
desc = "Buffer Diagnostics (Trouble)",
},
{
"<leader>cs",
"<cmd>Trouble symbols toggle focus=false<cr>",
desc = "Symbols (Trouble)",
},
{
"<leader>cl",
"<cmd>Trouble lsp toggle focus=false win.position=right<cr>",
desc = "LSP Definitions / references / ... (Trouble)",
},
{
"<leader>xL",
"<cmd>Trouble loclist toggle<cr>",
desc = "Location List (Trouble)",
},
{
"<leader>xQ",
"<cmd>Trouble qflist toggle<cr>",
desc = "Quickfix List (Trouble)",
},
},
}

View File

@ -0,0 +1,33 @@
-- Install and configure venv-selector
-- to manage python virtual env from neovim
return {
'linux-cultist/venv-selector.nvim',
branch = 'regexp',
dependencies = {
'neovim/nvim-lspconfig',
'nvim-telescope/telescope.nvim',
'mfussenegger/nvim-dap-python'
},
opts = {
-- Your options go here
-- name = "venv",
-- auto_refresh = false
},
-- Optional: needed only if you want to type `:VenvSelect` without a
-- keymapping
event = 'VeryLazy',
keys = {
-- Keymap to open VenvSelector to pick a venv.
{
'<leader>vs',
'<cmd>VenvSelect<cr>'
},
-- Keymap to retrieve the venv from a cache
-- (the one previously used for the same project directory).
{
'<leader>vc',
'<cmd>VenvSelectCached<cr>'
},
},
}

View File

@ -0,0 +1,18 @@
-- Install and configure the which-key plugin
-- which helps to figure out which shortcut
-- you're trying to type
-- https://github.com/folke/which-key.nvim
return {
"folke/which-key.nvim",
event = "VeryLazy",
opts = {},
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = true })
end,
desc = "Buffer Local Keymaps (which-key)",
},
},
}

View File

@ -1,3 +1,6 @@
-- TODO: Rewrite it accordingly to new configuration.
-- TODO: Also, make it actually minimal. 😉
-- Set <space> as the leader key
-- See `:help mapleader`
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
@ -24,7 +27,6 @@ require('lazy').setup({
{
"Mofiqul/adwaita.nvim",
-- "shaunsingh/nord.nvim",
lazy = false,
priority = 1000,
config = function()