Compare commits

..

2 Commits

22 changed files with 441 additions and 844 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
lazy-lock.json
spell/

View File

@@ -1,15 +1,46 @@
--[[
-- Contains fixes for mappings created by plugins
-- Useful because of bépo
-- NOTE: not in use right now
--]]
-- Comments.nvim adds `gbc` command, which conflicts with `gb/gé` to move
-- between tabs
--[[ if vim.fn.maparg("gbc") ~= "" then
if vim.fn.maparg("gbc") ~= "" then
vim.keymap.del("n", "gbc")
vim.keymap.set('n', 'gBc', function()
return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_blockwise_current)'
or '<Plug>(comment_toggle_blockwise_count)'
end, { expr = true, desc = 'Comment toggle current block' })
end ]]
end
-- [[ vimtex ]]
-- Some BÉPO mappings for vimtex
local texgroup = vim.api.nvim_create_augroup("latex-after", { clear = true })
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
pattern = { "*.tex", "*.bib", "*.cls", "*.tikz", },
group = texgroup,
callback = function()
local vimtex_remaps = {
-- c <-> t
{ mode = "n", source = "csd", target = "lsd", command = "<Plug>(vimtex-delim-change-math)" },
{ mode = "n", source = "csc", target = "lsc", command = "<Plug>(vimtex-cmd-change)" },
{ mode = "n", source = "cse", target = "lse", command = "<Plug>(vimtex-env-change)" },
{ mode = "n", source = "cs$", target = "ls$", command = "<Plug>(vimtex-env-change-math))" },
-- t <-> j
{ mode = { "x", "n" }, source = "tsD", target = "jsD", command = "<Plug>(vimtex-delim-toggle-modifier-reverse)" },
{ mode = { "x", "n" }, source = "tsd", target = "jsd", command = "<Plug>(vimtex-delim-toggle-modifier)" },
{ mode = { "x", "n" }, source = "tsf", target = "jsf", command = "<Plug>(vimtex-cmd-toggle-frac)" },
{ mode = "n", source = "tsc", target = "jsc", command = "<Plug>(vimtex-cmd-toggle-star)" },
{ mode = "n", source = "ts$", target = "js$", command = "<Plug>(vimtex-env-toggle-math)" },
{ mode = "n", source = "tse", target = "jse", command = "<Plug>(vimtex-env-toggle-star)" },
}
for _, remap in pairs(vimtex_remaps) do
if vim.fn.maparg(remap.source) ~= "" then
vim.keymap.del(remap.mode, remap.source, { buffer = true })
vim.keymap.set(remap.mode, remap.target, remap.command, { silent = true, noremap = true, buffer = true })
end
end
end,
})

View File

@@ -28,7 +28,7 @@ vim.opt.rtp:prepend(lazypath)
--
-- You can also configure plugins after the setup call,
-- as they will be available in your neovim runtime.
require('plugins-configure')
require('lazy-configure')
-- [[ Setting options ]]
require('general-options')
@@ -62,10 +62,8 @@ require('complete')
-- [[ Configure neorg ]]
require('neorg-configure')
-- [[ Configure status line ]]
require('statusline')
-- Customizations
-- require('bepo')
require('restore-position')
require('autocommands')

View File

@@ -1,48 +0,0 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "de10d8414235b0a8cabfeba60d07c24304e71f5c" },
"blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
"fidget.nvim": { "branch": "main", "commit": "4d5858bd4c471c895060e1b9f3575f1551184dc5" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" },
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"lua-utils.nvim": { "branch": "main", "commit": "e565749421f4bbb5d2e85e37c3cef9d56553d8bd" },
"lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" },
"luarocks.nvim": { "branch": "main", "commit": "1db9093915eb16ba2473cfb8d343ace5ee04130a" },
"luvit-meta": { "branch": "main", "commit": "1df30b60b1b4aecfebc785aa98943db6c6989716" },
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
"mini.icons": { "branch": "main", "commit": "f9a177c11daa7829389b7b6eaaec8b8a5c47052d" },
"mini.nvim": { "branch": "main", "commit": "0ffc2af38b3c5293076317b138635d6d7c80a40f" },
"neorg": { "branch": "main", "commit": "790b0444c0c654131a722817dc893332e06c72b9" },
"neorg-interim-ls": { "branch": "main", "commit": "52bdf8a8cd246a9205756449776aa057bd593d61" },
"neorg-telescope": { "branch": "main", "commit": "7fb6ca6a632c3c095601d379a664c0c1f802dc6c" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-dap": { "branch": "master", "commit": "968f89f8aac11b6bdbfc942c71d3436658c1435f" },
"nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-lspconfig": { "branch": "master", "commit": "408cf07b97535825cca6f1afa908d98348712ba6" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" },
"oil.nvim": { "branch": "master", "commit": "07f80ad645895af849a597d1cac897059d89b686" },
"pathlib.nvim": { "branch": "main", "commit": "57e5598af6fe253761c1b48e0b59b7cd6699e2c1" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"rose-pine": { "branch": "main", "commit": "72a04c4065345b51b56aed4859ea1d884f734097" },
"tabular": { "branch": "master", "commit": "12437cd1b53488e24936ec4b091c9324cafee311" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope.nvim": { "branch": "0.1.x", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"typst-preview.nvim": { "branch": "master", "commit": "dea4525d5420b7c32eebda7de15a6beb9d6574fa" },
"typst.vim": { "branch": "main", "commit": "323539709e29a537ff39dfce6c05f175a8921504" },
"undotree": { "branch": "master", "commit": "28f2f54a34baff90ea6f4a735ef1813ad875c743" },
"vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" },
"vim-pandoc-syntax": { "branch": "master", "commit": "ea3fc415784bdcbae7f0093b80070ca4ff9e44c8" },
"vim-rhubarb": { "branch": "master", "commit": "5496d7c94581c4c9ad7430357449bb57fc59f501" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vim-speeddating": { "branch": "master", "commit": "c17eb01ebf5aaf766c53bab1f6592710e5ffb796" },
"vimtex": { "branch": "master", "commit": "dc90feacb86f7b85b0b791d8073eefc769a23725" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

View File

@@ -1,17 +0,0 @@
local port = os.getenv 'GDScript_Port' or '6005'
local cmd = vim.lsp.rpc.connect('127.0.0.1', tonumber(port))
return {
default_config = {
cmd = cmd,
filetypes = { 'gd', 'gdscript', 'gdscript3' },
root_markers = { '.git', 'project.godot' },
},
docs = {
description = [[
https://github.com/godotengine/godot
Language server for GDScript, used by Godot Engine.
]],
},
}

View File

@@ -1,69 +0,0 @@
local language_id_mapping = {
bib = 'bibtex',
pandoc = 'markdown',
plaintex = 'tex',
rnoweb = 'rsweave',
rst = 'restructuredtext',
tex = 'latex',
text = 'plaintext',
norg = 'neorg',
}
local function get_language_id(_, filetype)
return language_id_mapping[filetype] or filetype
end
return {
cmd = { 'ltex-ls-plus' },
filetypes = {
'markdown',
'pandoc',
'latex',
'text',
'norg',
'gitcommit',
'jj',
'jjdescription',
'rst',
'typst'
},
get_language_id = get_language_id,
single_file_support = true,
settings = {
ltex = {
enabled = {
'markdown',
'pandoc',
'latex',
'text',
'norg',
'gitcommit',
'jj',
'jjdescription',
'rst',
'typst'
},
language = "auto",
diagnosticSeverity = "information",
checkFrequency = "save",
sentenceCacheSize = 2000,
additionalRules = {
enablePickyRules = true,
motherTongue = "fr",
},
enabledRules = {
en = { "EN_CONSISTENT_APOS" },
},
disabledRules = {
fr = { "APOS_TYP", "FRENCH_WHITESPACE", "CHANGE", "ISSUE", },
en = { "DASH_RULE", "TWO_HYPHENS", "CHANGE", "ISSUE", "CHECK", "ACTUALLY", "CONSISTENT", "EN_CONSISTENT_APOS", },
},
dictionary = {
fr = { "CryptPad", "Chouhartem",
-- field names
"authors", "categories", "created", "updated", "title", "meta" },
en = { "CryptPad", },
}
}
}
}

View File

@@ -1,21 +0,0 @@
return {
cmd = { 'rust-analyzer' },
filetypes = { 'rust' },
root_markers = { '.git', 'Cargo.toml' },
settings = {
imports = {
granularity = {
group = "module",
},
prefix = "self",
},
cargo = {
buildScripts = {
enable = true,
},
},
procMacro = {
enable = true
},
}
}

View File

@@ -1,6 +1,5 @@
local markdown = vim.api.nvim_create_augroup("markdown", { clear = true })
local spelling = vim.api.nvim_create_augroup("spelling", { clear = true })
local spell_keymap = require('spelling').spell_keymap
-- Recognize .md as pandoc
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
@@ -8,20 +7,26 @@ vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
group = markdown,
callback = function()
vim.o.filetype = 'pandoc'
vim.o.commentstring = '<!--%s-->'
require('luasnip').filetype_extend("pandoc", { "markdown" })
vim.o.spell = true
spell_keymap()
vim.o.spelllang = 'en,fr'
require('spelling').spell_keymap()
vim.o.spelllang = 'en'
vim.o.formatoptions = "qj"
-- email commands: my/msy to paste the html inside the clipboard
vim.keymap.set('', '<LocalLeader>msy', ':w !pandoc -f markdown+emoji -t html5 -s | wl-copy --type text/html<CR><CR>',
vim.keymap.set('', '<LocalLeader>msy', ':w !pandoc -f markdown+emoji -t html5 -s | wl-copy<CR><CR>',
{ noremap = true, silent = true, desc = "[M]arkdown to [S]ingle page [Y]ank" })
vim.keymap.set('', '<LocalLeader>my',
':w !pandoc -f markdown+emoji --wrap=none -t html5 | wl-copy --type text/html<CR><CR>',
vim.keymap.set('', '<LocalLeader>my', ':w !pandoc -f markdown+emoji --wrap=none -t html5 | wl-copy<CR><CR>',
{ noremap = true, silent = true, desc = "[M]arkdown to HTML [Y]ank" })
vim.keymap.set('', '<LocalLeader>mp', '<Plug>MarkdownPreviewToggle',
{ noremap = true, silent = true, desc = "[M]arkdown [P]review" })
vim.keymap.set('', '<LocalLeader>mp', '<Plug>MarkdownPreviewToggle', { noremap = true, silent = true, desc = "[M]arkdown [Preview]" })
end
})
-- French markdown files
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
pattern = { "*-fr.md", },
group = markdown,
callback = function()
vim.o.spelllang = 'fr'
end
})
@@ -29,7 +34,7 @@ vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
vim.api.nvim_create_autocmd({ "OptionSet" }, {
pattern = { "spell" },
group = spelling,
callback = spell_keymap
callback = require('spelling').spell_keymap
})
-- LaTeX configuration
@@ -44,49 +49,13 @@ vim.api.nvim_create_autocmd("FileType", {
vim.g.vimtex_view_general_viewer = 'zathura'
vim.g.maplocalleader = ' '
-- Legacy shortcut from my vim-latexsuite days
-- FIX: doesnt seem to work…
vim.keymap.set("n", "<Leader>ls", ":VimtexView<CR>",
vim.api.nvim_set_keymap("n", "<Leader>ls", ":VimtexView<CR>",
{ noremap = true, silent = true, desc = 'View [L]atex Document' })
vim.o.foldmethod = 'expr'
vim.o.foldexpr = 'vimtex#fold#level(v:lnum)'
vim.o.foldtext = 'vimtex#fold#text()'
vim.o.spell = true
spell_keymap()
vim.o.spelllang = "en,fr"
require('spelling').spell_keymap()
end,
})
-- Typst bindings + spellchecking
local typstgroup = vim.api.nvim_create_augroup("typst", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
pattern = { "typst" },
group = typstgroup,
callback = function()
vim.keymap.set('', '<LocalLeader>mp', ':TypstPreview<CR>', { noremap = true, silent = true, desc = "[M]ake [P]review" })
vim.o.spell = true
spell_keymap()
vim.o.spelllang = "fr,en"
end,
})
-- Jujutsu spellchecking
local jjgroup = vim.api.nvim_create_augroup("jujustu", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
pattern = { "jj" },
group = jjgroup,
callback = function()
vim.o.spell = true
spell_keymap()
vim.o.spelllang = "en"
end,
})
-- disable LSP for password-store
vim.api.nvim_create_autocmd({"BufEnter", "BufRead" }, {
pattern = "/dev/shm/pass*",
group = vim.api.nvim_create_augroup('DisableLsp', {}),
callback = function ()
vim.lsp.stop_client(vim.lsp.get_clients())
end
})

67
lua/bepo.lua Normal file
View File

@@ -0,0 +1,67 @@
-- colorise les nbsp
-- highlight NbSp ctermbg=lightgray guibg=lightred
--hi NbSps ctermbg=lightred guibg=lightred
--match NbSps /\%xa0\|\%u202F/
-- bépo
vim.opt.listchars:append({nbsp = "·", trail = "¤", eol = ''})
vim.opt.list = true
-- {W} -> [É]
-- ——————————
-- On remappe W sur É :
-- Pour faciliter les manipulations de fenêtres, on utilise {W} comme un Ctrl+W :
local keymap = vim.keymap.set
local opts = {noremap = true, silent = true}
local map_list = {['é'] = 'w', ['É'] = 'W', ['w'] = '<C-w>'}
for key,binding in pairs(map_list) do
keymap('n', key, binding, opts)
end
-- Corollaire: on remplace les text objects aw, aW, iw et iW
-- pour effacer/remplacer un mot quand on nest pas au début (daé / laé).
local omap_list = {[''] = 'w', [''] = 'aW', [''] = 'iw', [''] = 'iW'}
for key,binding in pairs(omap_list) do
keymap('o', key, binding, opts)
end
-- [HJKL] <-> {CTSR}
-- ————————————————
map_list = {
['c'] = 'h', ['r'] = 'l', ['t'] = 'j', ['s'] = 'k', ['C'] = 'H', ['R'] = 'L', ['T'] = 'J', ['S'] = 'K', -- [HJKL] -> [CTSR]
['j'] = 't', ['J'] = 'T', ['l'] = 'c', ['L'] = 'C', ['h'] = 'r', ['H'] = 'R', ['k'] = 's', ['K'] = 'S', -- [CTSR] -> [HJKL]: J = jusqu'à, L = change, h = remplace, k = substitute
['zs'] = 'zj', ['zt'] = 'zk', -- Pour les replis
[']k'] = ']s', ['[k'] = '[s' , -- correction orthographique
}
for key, binding in pairs(map_list) do
keymap({'n', 'x'}, key, binding, opts)
end
-- Désambiguation de {g}
-- —————————————————————
-- ligne écran précédente / suivante (à l'intérieur d'une phrase)
-- onglets précédent/suivant : gé/gb, premier/dernier onglet : gÉ/gB,
-- g" = première ligne de lécran
local map_list = {['gs'] = 'gk', ['gt'] = 'gj', ['gb'] = 'gT', [''] = 'gt', ['gB'] = ':tabfirst<CR>', [''] = ':tablast<CR>', ['g"'] = 'g0', }
for key, binding in pairs(map_list) do
keymap({'n', 'x'}, key, binding, opts)
end
-- <> en direct
-- ————————————
vim.api.nvim_set_keymap('', '«', '<', {noremap = false, silent = true})
vim.api.nvim_set_keymap('', '»', '>', {noremap = false, silent = true})
-- Chiffres en accès direct
-- ————————————————————————
-- À décommenter si on souhaite les avoir
--local map_list = { ['"'] = '1', ['1'] = '"', ['«'] = '2', ['2'] = '<', ['»'] = '3', ['3'] = '>', ['('] = '4', ['4'] = '(', [')'] = '5', ['5'] = ')', ['@'] = '6', ['6'] = '@', ['+'] = '7', ['7'] = '+', ['-'] = '8', ['8'] = '-', ['/'] = '9', ['9'] = '/', ['*'] = '0', ['0'] = '*', }
--for key, binding in pairs(map_list) do
-- vim.api.nvim_set_keymap('', key, binding, { noremap = true, silent = true })
--end
-- Remaper la gestion des fenêtres
-- ———————————————————————————————
map_list = {['wt'] = '<C-w>j', ['ws'] = '<C-w>k', ['wc'] = '<C-w>h', ['wr'] = '<C-w>l', ['wd'] = '<C-w>c', ['wo'] = '<C-w>s', ['wp'] = '<C-w>o', ['w<SPACE>'] = ':split<CR>', ['w<CR>'] = ':vsplit<CR>', ['<A-w>'] = '<C-w><C-w>', }
for key, binding in pairs(map_list) do
vim.api.nvim_set_keymap('', key, binding, {noremap = true, silent = true})
end

View File

@@ -1,9 +1,55 @@
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load()
require('luasnip.loaders.from_lua').lazy_load()
luasnip.config.setup {
history = true,
updateevents = "TextChanged,TextChangedI",
enable_autosnippets = true,
}
luasnip.filetype_extend("jjdescription", { "gitcommit" })
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = {
completeopt = 'menu,menuone,noinsert',
},
mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {},
['<C-l>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<C-e>'] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }),
['<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 = 'luasnip' },
{ name = 'path' },
},
}

View File

@@ -62,5 +62,5 @@ vim.o.scrolloff = 10
vim.cmd "set formatoptions-=t"
-- Make some typographic chars visible
vim.opt.listchars:append({ nbsp = "·", trail = "¤", eol = '' })
vim.opt.listchars:append({nbsp = "·", trail = "¤", eol = ''})
vim.o.list = true

View File

@@ -10,111 +10,38 @@ require('lazy').setup({
-- NOTE: This is where your plugins related to LSP can be installed.
-- The configuration is done below. Search for lspconfig to find it below.
{
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
'folke/lazydev.nvim',
ft = 'lua',
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
},
},
},
{
'Bilal2453/luvit-meta', lazy = true
},
{
-- LSP Configuration & Plugins
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs to stdpath for neovim
'williamboman/mason.nvim',
'williamboman/mason-lspconfig.nvim',
-- Useful status updates for LSP
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', opts = {} },
},
},
-- DAP: Debug Adapter Protocol
{
'mfussenegger/nvim-dap',
dependencies = {
'rcarriga/nvim-dap-ui',
'theHamsta/nvim-dap-virtual-text',
-- Additional lua configuration, makes nvim stuff amazing!
'folke/neodev.nvim',
},
},
{
-- [[ Autocompletion ]]
'saghen/blink.cmp',
-- optional: provides snippets for the snippet source
-- Autocompletion
'hrsh7th/nvim-cmp',
dependencies = {
'rafamadriz/friendly-snippets',
-- Snippet Engine & its associated nvim-cmp source
'L3MON4D3/LuaSnip',
'saadparwaiz1/cmp_luasnip',
-- Adds LSP completion capabilities
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-path',
-- Adds a number of user-friendly snippets
'rafamadriz/friendly-snippets',
},
-- use a release tag to download pre-built binaries
version = '1.*',
-- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust
-- build = 'cargo build --release',
-- If you use nix, you can build from source using latest nightly rust with:
-- build = 'nix run .#build-plugin',
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
-- 'super-tab' for mappings similar to vscode (tab to accept)
-- 'enter' for enter to accept
-- 'none' for no mappings
--
-- All presets have the following mappings:
-- C-space: Open menu or open docs if already open
-- C-n/C-p or Up/Down: Select next/previous item
-- C-e: Hide menu
-- C-k: Toggle signature help (if signature.enabled = true)
--
-- See :h blink-cmp-config-keymap for defining your own keymap
keymap = { preset = 'default' },
appearance = {
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = 'mono'
},
snippets = { preset = 'luasnip' },
signature = { enabled = true },
-- (Default) Only show the documentation popup when manually triggered
completion = {
documentation = { auto_show = true },
list = {
selection = {
preselect = true,
auto_insert = false,
},
},
-- menu = { auto_show = false },
},
-- Default list of enabled providers defined so that you can extend it
-- elsewhere in your config, without redefining it, due to `opts_extend`
sources = {
default = { 'lsp', 'path', 'snippets', 'buffer', },
},
-- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
-- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
-- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
--
-- See the fuzzy documentation for more information
fuzzy = {
implementation = "prefer_rust_with_warning",
}
},
opts_extend = { "sources.default" }
},
-- Useful plugin to show you pending keybinds.
@@ -207,8 +134,25 @@ require('lazy').setup({
end,
},
-- Set lualine as statusline
'nvim-lualine/lualine.nvim',
{
-- Set lualine as statusline
'nvim-lualine/lualine.nvim',
-- See `:help lualine.txt`
opts = {
options = {
icons_enabled = true,
theme = 'rose-pine',
component_separators = '|',
section_separators = '',
},
symbols = {
error = "",
warn = "",
info = "",
hint = "",
}
},
},
{
-- Add indentation guides even on blank lines
@@ -226,7 +170,6 @@ require('lazy').setup({
{
'nvim-telescope/telescope.nvim',
branch = '0.1.x',
commit = 'b4da76be54691e854d3e0e02c36b0245f945c2c7',
dependencies = {
'nvim-lua/plenary.nvim',
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
@@ -310,47 +253,10 @@ require('lazy').setup({
},
{
"nvim-neorg/neorg",
dependencies = { "luarocks.nvim", { "nvim-lua/plenary.nvim" }, { "nvim-neorg/neorg-telescope" }, "benlubas/neorg-interim-ls" },
lazy = false, -- Disable lazy loading as some `lazy.nvim` distributions set `lazy = true` by default
-- version = "*", -- Pin Neorg to the latest stable release
config = function()
require("neorg").setup {
load = {
["core.defaults"] = {},
["core.keybinds"] = {},
["core.completion"] = {
config = {
engine = { module_name = "external.lsp-completion" }
},
},
["core.concealer"] = {
config = {
icon_preset = "diamond",
}
},
["core.dirman"] = {
config = {
workspaces = {
notes = "~/Sync/neorg",
},
default_workspace = "notes",
}
},
["core.export"] = {
config = {
export_dir = "<export-dir>/<language>",
},
},
["core.esupports.metagen"] = {
config = {
author = "Chouhartem",
type = "empty",
},
},
["core.integrations.telescope"] = {},
}
}
end,
dependencies = { "luarocks.nvim" },
lazy = false, -- Disable lazy loading as some `lazy.nvim` distributions set `lazy = true` by default
version = "*", -- Pin Neorg to the latest stable release
config = true,
},
-- vim-speeddating
'tpope/vim-speeddating',
@@ -361,36 +267,7 @@ require('lazy').setup({
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown", "pandoc" },
-- build = function() vim.fn["mkdp#util#install"]() end,
build = "cd app && npm install && git restore .",
},
{
'kaarmu/typst.vim',
ft = 'typst',
lazy = false,
},
{
'chomosuke/typst-preview.nvim',
lazy = false, -- or ft = 'typst'
version = '1.*',
opts = {
dependencies_bin = {
['tinymist'] = 'tinymist'
}
}, -- lazy.nvim will implicitly calls `setup {}`
},
-- oil.nvim
{
'stevearc/oil.nvim',
---@module 'oil'
---@type oil.SetupOpts
opts = {},
-- Optional dependencies
dependencies = { { "echasnovski/mini.icons", opts = {} } },
-- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons
-- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations.
lazy = false,
},
-- undotree
'mbbill/undotree',
build = function() vim.fn["mkdp#util#install"]() end,
}
}, {})

View File

@@ -1,176 +1,168 @@
local lspattach = vim.api.nvim_create_augroup("LspMapping", { clear = true })
-- This function gets run when an LSP connects to a particular buffer.
vim.api.nvim_create_autocmd("LspAttach", {
group = lspattach,
callback = function(args)
-- 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 = args.buf, silent = true, desc = desc })
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
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>c', vim.lsp.buf.code_action, '[C]ode action') -- NOTE: to see if ca is needed
nmap('<leader>f', function() -- https://stackoverflow.com/a/74303272
vim.lsp.buf.code_action({
filter = function(a)
return a.isPreferred
end,
apply = true
})
end, 'code action: [F]ix'
)
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
end
nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>dd', function()
local new_config = not vim.diagnostic.config().virtual_lines
vim.diagnostic.config({ virtual_lines = new_config })
end, '[D]iagnostic toggle virtual lines')
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
-- 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')
nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, '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')
-- 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')
-- 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')
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(args.buf, 'Format', function(_)
vim.lsp.buf.format()
end, { desc = 'Format current buffer with LSP' })
end,
})
-- 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
-- document existing key chains
require('which-key').add {
-- { "<leader>c", group = "[C]ode" },
-- { "<leader>c_", hidden = true },
{ "<leader>d", group = "[D]ocument / [D]iagnostic/ [D]ebug" },
{ "<leader>d_", hidden = true },
{ "<leader>ds", group = "[D]ebug [S]tep" },
{ "<leader>ds_", hidden = true },
{ "<leader>g", group = "[G]it" },
{ "<leader>g_", hidden = true },
{ "<leader>h", group = "Git [H]unk" },
{ "<leader>h_", hidden = true },
{ "<leader>r", group = "[R]ename" },
{ "<leader>r_", hidden = true },
{ "<leader>s", group = "[S]earch" },
{ "<leader>s_", hidden = true },
{ "<leader>t", group = "[T]oggle" },
{ "<leader>t_", hidden = true },
{ "<leader>w", group = "[W]orkspace" },
{ "<leader>w_", hidden = true },
require('which-key').register {
['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' },
['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' },
['<leader>g'] = { name = '[G]it', _ = 'which_key_ignore' },
['<leader>h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' },
['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' },
['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' },
['<leader>t'] = { name = '[T]oggle', _ = 'which_key_ignore' },
['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' },
}
-- register which-key VISUAL mode
-- required for visual <leader>hs (hunk stage) to work
require('which-key').add {
{ "<leader>", group = "VISUAL <leader>", mode = "v" },
{ "<leader>h", desc = "Git [H]unk", mode = "v" },
}
require('which-key').register({
['<leader>'] = { name = 'VISUAL <leader>' },
['<leader>h'] = { 'Git [H]unk' },
}, { mode = 'v' })
-- 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)
-- mason-lspconfig requires that these setup functions are called in this order
-- before setting up the servers.
require('mason').setup()
require('mason-lspconfig').setup()
-- [[ DAP ]]
local setup_dap = function()
local dap = require('dap');
local ui = require('dapui');
ui.setup();
require("nvim-dap-virtual-text").setup();
vim.keymap.set("n", "<Leader>b", dap.toggle_breakpoint, { desc = "Debug [B]reakpoint", silent = true });
vim.keymap.set("n", "<Leader>dr", dap.run_to_cursor, { desc = "[D]ebug [R]un to cursor" });
vim.keymap.set("n", "<Leader>de", function()
ui.eval(nil, { enter = true })
end, { desc = "[D]ebug [E]val under cursor", silent = true });
-- TODO: add some DAP configs to test
vim.keymap.set("n", "<Leader>dc", dap.continue, { desc = "[D]ebug [C]ontinue", silent = true })
vim.keymap.set("n", "<Leader>dsi", dap.step_into, { desc = "[D]ebug [S]tep [I]nto", silent = true })
vim.keymap.set("n", "<Leader>dso", dap.step_over, { desc = "[D]ebug [S]tep [O]ver", silent = true })
vim.keymap.set("n", "<Leader>dsu", dap.step_out, { desc = "[D]ebug [S]tep o[U]t", silent = true })
vim.keymap.set("n", "<Leader>dsb", dap.step_back, { desc = "[D]ebug [S]tep [B]ack", silent = true })
vim.keymap.set("n", "<Leader>dr", dap.restart, { desc = "[D]ebug [R]estart", silent = true })
dap.listeners.before.attach.dapui_config = function()
ui.open()
end
dap.listeners.before.launch.dapui_config = function()
ui.open()
end
dap.listeners.before.event_terminated.dapui_config = function()
ui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
ui.close()
end
end
setup_dap()
local setup_godot_dap = function()
local dap = require("dap")
dap.adapters.godot = {
type = "server",
host = "127.0.0.1",
port = 6006,
}
dap.configurations.gdscript = {
{
launch_game_instance = false,
launch_scene = false,
name = "Launch scene",
project = "${workspaceFolder}",
request = "launch",
type = "godot",
-- 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.
--
-- If you want to override the default filetypes that your language server will attach to you can
-- define the property 'filetypes' to the map in question.
local servers = {
clangd = {},
-- gopls = {},
pyright = {},
-- rust_analyzer = {},
tsserver = {},
-- html = { filetypes = { 'html', 'twig', 'hbs'} },
texlab = {},
ltex = {
filetypes = {
'markdown',
'latex',
'norg',
'gitcommit'
},
}
end
setup_godot_dap()
-- [[ lsp configurations ]]
vim.lsp.config("lua_ls", {
settings = {
ltex = {
language = "auto",
diagnosticSeverity = "information",
sentenceCacheSize = 2000,
additionalRules = {
enablePickyRules = true,
motherTongue = "fr",
},
disabledRules = {
fr = { "APOS_TYP", "FRENCH_WHITESPACE" }
},
}
},
lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
-- NOTE: toggle below to ignore Lua_LS's noisy `missing-fields` warnings
-- diagnostics = { disable = { 'missing-fields' } },
},
},
}
-- 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],
filetypes = (servers[server_name] or {}).filetypes,
}
end,
}
-- [[ System LSPs ]]
local lspconfig = require('lspconfig')
servers = {
rust_analyzer = {
["rust-analyzer"] = {
imports = {
granularity = {
group = "module",
},
prefix = "self",
},
cargo = {
buildScripts = {
enable = true,
},
},
procMacro = {
enable = true
},
}
},
}
for server_name, server_settings in pairs(servers) do
lspconfig[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = server_settings,
}
})
vim.diagnostic.config({ virtual_lines = true })
vim.lsp.enable({
-- managed in lsp directory
"ltex_ls_plus", "rust-analyzer", "gdscript",
-- managed by lsp-config
"tinymist", "texlab", "clangd", "pyright", "ts_ls", "eslint", "lua_ls", "bashls", "jsonls"
})
end

View File

@@ -1,8 +1,7 @@
local map_list = {
-- ["w|"] = ":vsplit", ["w-"] = ":split", -- w| / w- pour créer des splits verticaux et horizontaux
-- ["ge"] = ":bprevious", ["gn"] = ":bnext",
["W"] = ":w",
["<C-t>"] = ":tabnew",
["w|"] = ":vsplit", ["w-"] = ":split", -- w| / w- pour créer des splits verticaux et horizontaux
["ge"] = ":bprevious", ["gn"] = ":bnext",
["W"] = ":w", ["<C-t>"] = ":tabnew",
}
local keymap = vim.keymap.set
@@ -21,57 +20,18 @@ keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
-- Diagnostic keymaps
keymap('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
keymap('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
keymap('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
keymap('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
keymap({ "n", "v" }, "<Leader>y", '"+y', { noremap = true, silent = true, desc = "[Y]ank to system clipboard" })
keymap({ "n", "v" }, "<Leader>Y", '"+yg_', { noremap = true, silent = true, desc = "[Y]ank line to system clipboard" })
keymap({ "n", "v" }, "<Leader>p", '"+p', { noremap = true, silent = true, desc = "[P]ast from system clipboard" })
--[[ Folds ]]
-- z0…z9 to open folds to a certain level
for i = 0, 9 do
keymap('n', 'z' .. i, ':set fdl=' .. i .. '<CR>', { noremap = true, silent = false })
end
-- tab for folds management
keymap('n', '<Tab>', 'za', { noremap = true, silent = true, desc = 'Toggle open folds' })
keymap('n', '<S-Tab>', 'zA', { noremap = true, silent = true, desc = 'Toggle open all folds' })
-- in :terminal esc exits edit mode
keymap('t', '<Esc>', '<C-\\><C-n>', { noremap = true, silent = true })
-- Markdown scratchpads
require('which-key').add({
{ "<leader>m", group = "[M]arkdown" },
{ "<leader>m_", hidden = true },
{ "<leader>sl", group = "[S]pell[Lang]" },
{ "<leader>sl_", hidden = true },
})
-- Markdown temp files
keymap('n', '<leader>mn', ':e ~/tmp/scratch.md<CR>', { desc = '[M]arkdown [N]ew', noremap = true, silent = true })
keymap('n', '<leader>me', ':e ~/tmp/scratch-fr.md<CR>',
{ desc = '[M]arkdown new Fr[e]nch', noremap = true, silent = true })
-- Spellchecking
keymap('n', '<leader>st', ':set spell!<CR>', { desc = "Toggle [S]pellcheck", silent = true, noremap = true })
keymap('n', '<leader>sle', ':set spelllang=en<CR>',
{ desc = "Set [S]pell[L]ang to [E]nglish", silent = true, noremap = true })
keymap('n', '<leader>slf', ':set spelllang=fr<CR>',
{ desc = "Set [S]pell[L]ang to [F]rench", silent = true, noremap = true })
-- Toggle hlsearch
keymap({ 'n', 'v' }, '<C-l>', ':set hlsearch!<CR>', { silent = true, noremap = true })
-- Undotree
keymap('n', 'U', vim.cmd.UndotreeToggle, { desc = "[U]ndotree toggle", silent = true, noremap = true })
-- [[ Paste ]]
keymap('i', '<C-S-v>', '<C-r>+', { noremap = true, silent = true, desc = 'Paste from "+' })
-- [[ Some standard behaviour changes ]]
-- Y is mapped to y$, remap to yg_
keymap('n', 'Y', 'yg_', { noremap = true, silent = true, desc = '[Y]ank the line' })
-- {>,<} preserve the selection
keymap('v', '>', '>gv', { noremap = true, silent = true })
keymap('v', '<', '<gv', { noremap = true, silent = true })

View File

@@ -1,4 +1,4 @@
--vim.keymap.set('', 'à', '<Nop>', { noremap = true, silent = true })
--vim.api.nvim_set_keymap('', 'à', '<Nop>', { noremap = true, silent = true })
local neorgroup = vim.api.nvim_create_augroup("neorg", { clear = true })
vim.api.nvim_create_autocmd({ "FileType" }, {
@@ -7,78 +7,66 @@ vim.api.nvim_create_autocmd({ "FileType" }, {
callback = function()
vim.g.maplocalleader = ' '
vim.o.conceallevel = 2
vim.o.foldlevelstart = 99
vim.keymap.set("n", "<Leader>nr", ":Neorg return<CR>",
vim.api.nvim_set_keymap("n", "<Leader>nr", ":Neorg return<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [R]eturn" })
-- Neorg Telescope
vim.keymap.set("n", "<Leader>nh", "<Plug>(neorg.telescope.search_headings)",
{ noremap = true, silent = true, desc = "[N]eorg search [H]eading" })
vim.keymap.set("n", "<Leader>nb", "<Plug>(neorg.telescope.backlinks.file_backlinks)",
{ noremap = true, silent = true, desc = "[N]eorg file [B]acklinks" })
vim.keymap.set("n", "<C-l>", "<Plug>(neorg.telescope.insert_link)",
{ noremap = true, silent = true, desc = "Neorg insert [L]ink" })
-- Tasks
vim.keymap.set("n", "<LocalLeader>td", "<Plug>(neorg.qol.todo-items.todo.task-done)",
{ noremap = true, silent = true, desc = "[T]ask [D]one" })
vim.keymap.set("n", "<LocalLeader>tu", "<Plug>(neorg.qol.todo-items.todo.task-undone)",
{ noremap = true, silent = true, desc = "[T]ask [U]ndone" })
vim.keymap.set("n", "<LocalLeader>tp", "<Plug>(neorg.qol.todo-items.todo.task-pending)",
{ noremap = true, silent = true, desc = "[T]ask [P]ending" })
vim.keymap.set("n", "<LocalLeader>th", "<Plug>(neorg.qol.todo-items.todo.task-on_hold)",
{ noremap = true, silent = true, desc = "[T]ask on [H]old" })
vim.keymap.set("n", "<LocalLeader>tc", "<Plug>(neorg.qol.todo-items.todo.task-cancelled)",
{ noremap = true, silent = true, desc = "[T]ask on [C]ancelled" })
vim.keymap.set("n", "<LocalLeader>tr", "<Plug>(neorg.qol.todo-items.todo.task-recurring)",
{ noremap = true, silent = true, desc = "[T]ask on [R]ecurring" })
vim.keymap.set("n", "<LocalLeader>ti", "<Plug>(neorg.qol.todo-items.todo.task-important)",
{ noremap = true, silent = true, desc = "[T]ask on [I]mportant" })
vim.keymap.set("n", "gO", ":Neorg toc<CR>",
{ noremap = true, silent = true, desc = "[O]pen toc" })
end,
})
local function live_grep_neorg()
local neorg_root = '~/Sync/neorg' -- TODO: get it from neorg
require('telescope.builtin').live_grep {
cwd = neorg_root,
}
end
-- document existing key chains
require('which-key').add {
{ "<leader>l", group = "neorg [L]ist" },
{ "<leader>l_", hidden = true },
{ "<leader>t", group = "neorg [T]asks" },
{ "<leader>n", group = "[N]eorg" },
{ "<leader>n_", hidden = true },
{ "<leader>ne", group = "[N]eorg [E]xport" },
{ "<leader>ne_", hidden = true },
require('which-key').register {
['<leader>n'] = { name = '[N]eorg', _ = 'which_key_ignore' },
['<leader>m'] = { name = 'neorg [M]ode', _ = 'which_key_ignore' },
['<leader>l'] = { name = 'neorg [L]ist', _ = 'which_key_ignore' },
['<leader>ne'] = { name = '[N]eorg [E]xport', _ = 'which_key_ignore' },
}
vim.keymap.set("n", "<Leader>ni", ":Neorg index<CR>",
vim.api.nvim_set_keymap("n", "<Leader>ni", ":Neorg index<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [I]ndex" })
vim.keymap.set("n", "<Leader>nm", ":Neorg inject-metadata<CR>",
vim.api.nvim_set_keymap("n", "<Leader>nm", ":Neorg inject-metadata<CR>",
{ noremap = true, silent = true, desc = "[N]eorg insert [M]etadata" })
vim.keymap.set("n", "<Leader>nj", ":Neorg journal toc open<CR>",
vim.api.nvim_set_keymap("n", "<Leader>nj", ":Neorg journal toc open<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [J]ournal" })
vim.keymap.set("n", "<Leader>nt", ":Neorg journal today<CR>",
vim.api.nvim_set_keymap("n", "<Leader>nt", ":Neorg journal today<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [T]oday" })
vim.keymap.set("n", "<Leader>ns", ":Neorg journal tomorrow<CR>",
vim.api.nvim_set_keymap("n", "<Leader>ns", ":Neorg journal tomorrow<CR>",
{ noremap = true, silent = true, desc = "Neorg tomorrow" })
vim.keymap.set("n", "<Leader>ny", ":Neorg journal yesterday<CR>",
vim.api.nvim_set_keymap("n", "<Leader>ny", ":Neorg journal yesterday<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [Y]esterday" })
vim.keymap.set("n", "<Leader>neo", ":e /tmp/neorg-export.md<CR>",
vim.api.nvim_set_keymap("n", "<Leader>neo", ":e /tmp/neorg-export.md<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [E]xport [O]pen" })
vim.keymap.set("n", "<Leader>nev", ":bo vsp /tmp/neorg-export.md<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [E]xport [V]ertical open" })
vim.keymap.set("n", "<Leader>nee", ":Neorg export to-file /tmp/neorg-export.md<CR>",
vim.api.nvim_set_keymap("n", "<Leader>nee", ":Neorg export to-file /tmp/neorg-export.md<CR>",
{ noremap = true, silent = true, desc = "[N]eorg [E]xport Predefined" })
vim.keymap.set("n", "<Leader>nef", ":Neorg export to-file ",
vim.api.nvim_set_keymap("n", "<Leader>nef", ":Neorg export to-file ",
{ noremap = true, silent = true, desc = "[N]eorg [E]xport [F]ile" })
vim.keymap.set("n", "<Leader>nl", "<Plug>(neorg.telescope.find_linkable)",
{ noremap = true, silent = true, desc = "[N]eorg find [L]inkable" })
vim.keymap.set("n", "<Leader>nf", "<Plug>(neorg.telescope.find_norg_files)",
{ noremap = true, silent = true, desc = "[N]eorg find [F]ile" })
vim.keymap.set("n", "<Leader>n/", live_grep_neorg,
{ noremap = true, silent = true, desc = "[N]eorg Live Grep" })
local neorg = require('neorg')
neorg.setup {
load = {
["core.defaults"] = {},
["core.concealer"] = {
config = {
icon_preset = "diamond",
}
},
["core.dirman"] = {
config = {
workspaces = {
notes = "~/Sync/neorg",
},
default_workspace = "notes",
}
},
["core.export"] = {
config = {
export_dir = "<export-dir>/<language>",
},
},
["core.esupports.metagen"] = {
config = {
author = "Chouhartem",
type = "empty",
},
},
}
}

View File

@@ -1,48 +0,0 @@
-- Character, word and line counts
-- https://www.reddit.com/r/neovim/comments/1130kh5/comment/j8navg6/
local function counters()
local isVisualMode = vim.fn.mode():find("[Vv]")
if not isVisualMode then return "" end
local starts = vim.fn.line("v")
local ends = vim.fn.line(".")
local lines = starts <= ends and ends - starts + 1 or starts - ends + 1
local wordcount = vim.fn.wordcount()
return tostring(wordcount.visual_words) ..
"W " .. tostring(wordcount.visual_chars) .. "C " .. tostring(lines) .. "L"
end
-- See `:help lualine.txt`
require('lualine').setup({
options = {
icons_enabled = true,
theme = 'rose-pine',
component_separators = '|',
section_separators = '',
},
sections = {
lualine_c = {
{
'filename',
path = 1,
}
},
lualine_y = {
{ counters },
'progress'
}
},
inactive_sections = {
lualine_c = {
{
'filename',
path = 1,
}
},
},
symbols = {
error = "",
warn = "",
info = "",
hint = "",
}
})

View File

@@ -76,11 +76,9 @@ vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc
vim.keymap.set('n', '<leader>sG', ':LiveGrepGitRoot<cr>', { desc = '[S]earch by [G]rep on Git Root' })
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' })
vim.keymap.set('n', '<leader>sb', require('telescope.builtin').lsp_document_symbols, { desc = '[S]earch Sym[b]bol' })
vim.keymap.set('n', '<leader>sB', require('telescope.builtin').lsp_workspace_symbols, { desc = '[S]earch Sym[b]bol in workspace' })
-- vim telescope
vim.keymap.set('n', '<leader>gc', require('telescope.builtin').git_commits, { desc = '[G]it [C]ommits' })
vim.keymap.set('n', '<leader>gs', require('telescope.builtin').git_status, { desc = '[G]it [S]tatus' })
vim.keymap.set({ 'n', 'x' }, '<leader>gB', require('telescope.builtin').git_bcommits, { desc = '[G]it [B]commits' })
vim.keymap.set({'n', 'x'}, '<leader>gB', require('telescope.builtin').git_bcommits, { desc = '[G]it [B]commits' })
vim.keymap.set('n', '<leader>gb', require('telescope.builtin').git_branches, { desc = '[G]it [B]ranches' })

View File

@@ -3,9 +3,9 @@
vim.defer_fn(function()
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', 'javascript', 'typescript', 'vimdoc', 'vim', 'bash', 'norg', 'norg_meta', 'gdscript' },
ignore_install = { 'latex', 'tex', 'markdown' },
disable = { 'latex', 'tex', 'markdown' },
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'javascript', 'typescript', 'vimdoc', 'vim', 'bash', 'norg' },
ignore_install = {'latex', 'tex', 'markdown'},
disable = {'latex', 'tex', 'markdown'},
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
auto_install = false,
@@ -15,7 +15,7 @@ vim.defer_fn(function()
highlight = { enable = true },
indent = {
enable = true,
disable = { 'javascript' }
disable = {'javascript'}
},
incremental_selection = {
enable = true,
@@ -70,6 +70,5 @@ vim.defer_fn(function()
},
},
},
modules = {},
}
end, 0)

View File

@@ -1,21 +1,21 @@
local options = {
plugins = {
marks = true, -- shows a list of your marks on ' and `
marks = true, -- shows a list of your marks on ' and `
registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
-- the presets plugin, adds help for a bunch of default keybindings in Neovim
-- No actual key bindings are created
spelling = {
enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
suggestions = 20, -- how many suggestions should be shown in the list?
},
presets = {
operators = false, -- adds help for operators like d, y, ...
motions = true, -- adds help for motions
operators = false, -- adds help for operators like d, y, ...
motions = true, -- adds help for motions
text_objects = false, -- help for text objects triggered after entering an operator
windows = true, -- default bindings on <c-w>
nav = true, -- misc bindings to work with windows
z = true, -- bindings for folds, spelling and others prefixed with z
g = true, -- bindings for prefixed with g
windows = true, -- default bindings on <c-w>
nav = true, -- misc bindings to work with windows
z = true, -- bindings for folds, spelling and others prefixed with z
g = true, -- bindings for prefixed with g
},
},
-- add operators that will trigger motion and text object completion
@@ -38,27 +38,27 @@ local options = {
},
popup_mappings = {
scroll_down = "<c-d>", -- binding to scroll down inside the popup
scroll_up = "<c-u>", -- binding to scroll up inside the popup
scroll_up = "<c-u>", -- binding to scroll up inside the popup
},
window = {
border = "none", -- none, single, double, shadow
position = "bottom", -- bottom, top
margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]. When between 0 and 1, will be treated as a percentage of the screen size.
border = "none", -- none, single, double, shadow
position = "bottom", -- bottom, top
margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]. When between 0 and 1, will be treated as a percentage of the screen size.
padding = { 1, 2, 1, 2 }, -- extra window padding [top, right, bottom, left]
winblend = 0, -- value between 0-100 0 for fully opaque and 100 for fully transparent
zindex = 1000, -- positive value to position WhichKey above other floating windows.
winblend = 0, -- value between 0-100 0 for fully opaque and 100 for fully transparent
zindex = 1000, -- positive value to position WhichKey above other floating windows.
},
layout = {
height = { min = 4, max = 25 }, -- min and max height of the columns
width = { min = 20, max = 50 }, -- min and max width of the columns
spacing = 3, -- spacing between columns
align = "left", -- align columns left, center or right
height = { min = 4, max = 25 }, -- min and max height of the columns
width = { min = 20, max = 50 }, -- min and max width of the columns
spacing = 3, -- spacing between columns
align = "left", -- align columns left, center or right
},
ignore_missing = false, -- enable this to hide mappings for which you didn't specify a label
ignore_missing = false, -- enable this to hide mappings for which you didn't specify a label
hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "^:", "^ ", "^call ", "^lua " }, -- hide mapping boilerplate
show_help = true, -- show a help message in the command line for using WhichKey
show_keys = true, -- show the currently pressed key and its label as a message in the command line
triggers = "auto", -- automatically setup triggers
show_help = true, -- show a help message in the command line for using WhichKey
show_keys = true, -- show the currently pressed key and its label as a message in the command line
triggers = "auto", -- automatically setup triggers
-- triggers = {"<leader>"} -- or specifiy a list manually
-- list of triggers, where WhichKey should not wait for timeoutlen and show immediately
triggers_nowait = {
@@ -87,7 +87,4 @@ local options = {
},
}
-- XXX: temporary until upgrading the deprecated configuration above…
options = {}
return options

View File

@@ -1,32 +0,0 @@
local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local d = ls.dynamic_node
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep
return {
-- Pull Request
s({
trig = "pr", dscr = "cryptpad pull request"
},
fmta("{https://github.com/cryptpad/cryptpad/pull/<>}[#<>]", {
i(1, "number"),
rep(1),
})
),
-- Issue
s({
trig = "issue", dscr = "cryptpad issue request"
},
fmta("{https://github.com/cryptpad/cryptpad/issues/<>}[#<>]", {
i(1, "number"),
rep(1),
})
),
}

View File

@@ -1,68 +0,0 @@
local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local d = ls.dynamic_node
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep
return {
s({ trig = "frame", dscr = "Insert a beamer frame" },
fmta(
[[
\begin{frame}{<>}
<>
\end{frame}
]],
{
i(1, "title"),
i(2, "content")
}
)
),
s({ trig = "block", dscr = "Insert a beamer block" },
fmta(
[[
\begin{block}{<>}
<>
\end{block}
]],
{
i(1, "title"),
i(2, "content")
}
)
),
s({ trig = "pp", dscr = "Insert a beamer pause" },
fmt("\\pause", {})
),
s({ trig = "ii", dscr = "Insert an item" },
fmt("\\item ", {})
),
s({ trig = "ss", dscr = "Insert a small skip" },
fmt("\\smallskip", {})
),
s({ trig = "ms", dscr = "Insert a medium skip" },
fmt("\\medskip", {})
),
s({ trig = "bs", dscr = "Insert a big skip" },
fmt("\\bigskip", {})
),
s({ trig = "tw", dscr = "Insert \\textwidth" },
fmt("\\textwidth", {})
),
s({ trig = "th", dscr = "Insert \\textheight" },
fmt("\\textheight", {})
),
}

View File

@@ -1,15 +1,10 @@
In this repository lies my Neovim configuration starting from
[kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim).
The provided `init.lua` file has then been split into (tentatively) semantically
The provided `init.lua` file has then been split into (tryingly) semantically
consistent files inside `lua/` and personal customizations have been applied.
The process to design this configuration and some thoughts can be found
[here](https://blog.epheme.re/software/nvim-kickstart.html).
Note that if the global principles remain true, the blog post dates from
December 2023, and things may have changed a bit since then. Just use it as a
reference for my rationals.
The process to design this configuration and some thoughts can be found [here](https://blog.epheme.re/software/nvim-kickstart.html).
## Testing it
@@ -22,21 +17,3 @@ For instance, you can create clone this repository inside
```sh
export NVIM_APPNAME="$HOME/.config/kicknvim"
```
## LSP dependencies
This configuration requires some LSP servers to be installed on your machine.
These packages are:
- `bash-language-server`
- `clangd`
- `eslint-language-server`
- `godot` (optional)
- `json-language-server`
- `ltex-ls-plus`
- `lua-language-server`
- `pyright`
- `rust-analyzer`
- `texlab`
- `tinymist`
- `typescript-language-server`