diff options
| author | Robert Günzler <r@gnzler.io> | 2026-02-10 12:32:48 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-02-10 12:41:25 +0100 |
| commit | 63feeb9f369fc6176e85c1c2d8fcc863caad1946 (patch) | |
| tree | 41cd5d2d1ec36e74e464caab722cc9b460153f04 /.config/nvim/lua | |
| parent | 5bd0a4aca65ecb9818ef1285982d160b6b6ff665 (diff) | |
start new
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '')
| -rw-r--r-- | .config/nvim/lua/config/diagnostics.lua (renamed from .vim/plugin/diagnostics.lua) | 14 | ||||
| -rw-r--r-- | .config/nvim/lua/config/filetypes.lua | 5 | ||||
| -rw-r--r-- | .config/nvim/lua/config/keymaps.lua | 36 | ||||
| -rw-r--r-- | .config/nvim/lua/config/lazy.lua | 63 | ||||
| -rw-r--r-- | .config/nvim/lua/config/lsp.lua | 66 | ||||
| -rw-r--r-- | .config/nvim/lua/config/options.lua (renamed from .vim/plugin/options.lua) | 4 | ||||
| -rw-r--r-- | .config/nvim/lua/config/reset.lua | 17 | ||||
| -rw-r--r-- | .config/nvim/lua/config/snippets.lua (renamed from .vim/lua/internal/snippets.lua) | 135 | ||||
| -rw-r--r-- | .config/nvim/lua/config/statuscolumn.lua (renamed from .vim/plugin/statuscolumn.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/config/statusline.lua (renamed from .vim/plugin/statusline.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/config/undo.lua (renamed from .vim/plugin/undo.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/blink.lua (renamed from .vim/lua/internal/plugins/blink.lua) | 31 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/calcium.lua | 15 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/colorizer.lua (renamed from .vim/lua/internal/plugins/colorizer.lua) | 3 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/fzf.lua (renamed from .vim/lua/internal/plugins/fzf.lua) | 16 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/gentoo.lua | 15 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/git.lua (renamed from .vim/lua/internal/plugins/git.lua) | 11 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/icons.lua (renamed from .vim/lua/internal/plugins/icons.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/indent.lua (renamed from .vim/lua/internal/plugins/indent.lua) | 2 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/lsp.lua | 6 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/markdown.lua | 82 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/mini.lua (renamed from .vim/lua/internal/plugins/mini.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/oil.lua (renamed from .vim/lua/internal/plugins/oil.lua) | 0 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/snippets.lua | 13 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/treesitter.lua (renamed from .vim/lua/internal/plugins/treesitter.lua) | 43 | ||||
| -rw-r--r-- | .config/nvim/lua/plugins/whichkey.lua (renamed from .vim/lua/internal/plugins/whichkey.lua) | 0 |
26 files changed, 450 insertions, 127 deletions
diff --git a/.vim/plugin/diagnostics.lua b/.config/nvim/lua/config/diagnostics.lua index 93ee621..6314b83 100644 --- a/.vim/plugin/diagnostics.lua +++ b/.config/nvim/lua/config/diagnostics.lua @@ -1,10 +1,10 @@ vim.diagnostic.config({ signs = { text = { - [vim.diagnostic.severity.ERROR] = '✗', - [vim.diagnostic.severity.WARN] = '▷', - [vim.diagnostic.severity.INFO] = 'ℹ', - [vim.diagnostic.severity.HINT] = '🞶', + [vim.diagnostic.severity.ERROR] = '', + [vim.diagnostic.severity.WARN] = '', + [vim.diagnostic.severity.INFO] = '', + [vim.diagnostic.severity.HINT] = '', }, linehl = { -- [vim.diagnostic.severity.ERROR] = 'Search', @@ -44,7 +44,9 @@ end, { desc = 'diagnostic: prev' }) vim.keymap.set('n', 'DD', vim.diagnostic.open_float, { desc = 'diagnostic: current line' }) -vim.keymap.set('n', '<leader>td', function() +vim.keymap.set('n', '<leader>d', '<nop>', { desc = "diagnostics" }) +vim.keymap.set('n', '<leader>dd', vim.diagnostic.open_float, { desc = 'diagnostic: current line' }) +vim.keymap.set('n', '<leader>dv', function() -- NOTE: this can be used to switch between multiple sets of diagnostics display -- currently it only toggles virtual_text local visible = vim.diagnostic.config().virtual_text @@ -58,6 +60,6 @@ vim.keymap.set('n', '<leader>td', function() end end, { desc = 'diagnostic: toggle visibility' }) -vim.keymap.set('n', '<leader>tD', function() +vim.keymap.set('n', '<leader>da', function() vim.diagnostic.enable(not vim.diagnostic.is_enabled()) end, { desc = 'diagnostic: toggle all' }) diff --git a/.config/nvim/lua/config/filetypes.lua b/.config/nvim/lua/config/filetypes.lua new file mode 100644 index 0000000..f1428d2 --- /dev/null +++ b/.config/nvim/lua/config/filetypes.lua @@ -0,0 +1,5 @@ +vim.filetype.add({ + pattern = { + ['todo.txt'] = 'todotxt', + } +}) diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..9c00f7b --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,36 @@ +local map = vim.keymap.set + +map('n', 'gb', '<cmd>bnext<cr>', { desc = 'Buffer next' }) +map('n', 'gB', '<cmd>bprevious<cr>', { desc = 'Buffer prev' }) + +map('n', '<a-j>', '<cmd>cnext<cr>', { desc = 'Quickfix next' }) +map('n', '<a-k>', '<cmd>cprev<cr>', { desc = 'Quickfix prev' }) + +map('v', '<', '<gv', { desc = 'Indent' }) +map('v', '>', '>gv', { desc = 'Outdent' }) + +map('t', '<esc>', [[ <c-\><c-n> ]], { desc = 'Terminal: Exit INSERT mode' }) + +map( + 'n', + 'gx', + '<cmd>lua vim.ui.open(vim.fn.expand("<cfile>"))<cr>', + { desc = 'Open file under cursor' } +) + +vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter'}, { + group = vim.api.nvim_create_augroup('bufclose', {}), + callback = function() + if vim.list_contains({'help', 'nofile', 'quickfix'}, vim.bo.buftype) then + map('', 'q', '<cmd>close<cr>', { desc = 'Close buffer', buffer = 0 }) + end + end, +}) + +map('n', '<leader><leader>x', function() + local file = vim.fn.expand('%') + vim.cmd.source(file) + vim.notify('** sourced ' .. file, vim.log.levels.INFO) +end, { desc = 'source current file' }) + +map('n', '<leader>a', '<cmd>edit #<cr>', { desc = 'open alternative file' }) diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..5f859f0 --- /dev/null +++ b/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,63 @@ +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, {}) + vi.fn.getchar() -- let user ack + os.exit(1) + end +end + +vim.opt.rtp:prepend(lazypath) + +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +require('lazy').setup({ + -- load plugin specs from ./plugins + spec = { { import = 'plugins' } }, + -- colorscheme for installing plugins + install = { colorscheme = { 'default' } }, + -- automatically check for plugin updates + checker = { + enabled = true, + frequency = (3600 * 24 * 3), -- 3 days + }, +}) + +vim.keymap.set({'n'}, '<leader>l', '<nop>', { desc = 'lazy' }) +vim.keymap.set({'n'}, '<leader>lz', '<cmd>Lazy<cr>', { desc = 'lazy: open ui' }) +vim.keymap.set({'n'}, '<leader>ln', function() + local pname = 'TODO' + local ppath = vim.fn.stdpath('config') .. '/lua/plugins' + + vim.ui.input({ prompt = 'Plugin name: ' }, function(input) + pname = input + end) + + vim.cmd.cd(ppath) + + vim.fn.setreg('a', [[return { + { + '$name', + cmd = {'$cmd'}, + opts = {$opts}, + keys = { + { mode = {'n'}, '$lhs', '$rhs', desc = '$desc' }, + }, + } +}]]) + + local buf = vim.api.nvim_create_buf(true, false) + vim.api.nvim_buf_set_name(buf, pname .. '.lua') + vim.api.nvim_set_option_value('filetype', 'lua', { buf = buf }) + vim.api.nvim_win_set_buf(0, buf) + + require('luasnip.extras.otf').on_the_fly('a') + +end, { desc = 'lazy: new plugin' }) diff --git a/.config/nvim/lua/config/lsp.lua b/.config/nvim/lua/config/lsp.lua new file mode 100644 index 0000000..282a3dc --- /dev/null +++ b/.config/nvim/lua/config/lsp.lua @@ -0,0 +1,66 @@ +if not vim.lsp.enable then return end + +local lsp = vim.lsp + +lsp.enable({ + 'bashls', + 'ccls', + 'clangd', + 'gopls', + 'rust_analyzer', + 'superhtml', + 'tinymist', + 'zk', + 'zls', +}) + +local capabilities = nil +if pcall(require, 'blink.cmp') then + capabilities = require('blink.cmp').get_lsp_capabilities() +end + +lsp.config('*', { + root_markers = {'.git'}, + capabilities = capabilities +}) + +vim.api.nvim_create_autocmd({'LspAttach'}, { + group = vim.api.nvim_create_augroup('lspattach', {}), + callback = function(args) + local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) + + -- TODO: what does this do? + vim.opt_local.omnifunc = 'v:lua.vim.lsp.omnifunc' + + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { desc = 'goto_definition' }) + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, { desc = 'goto declaration' }) + vim.keymap.set('n', 'gT', vim.lsp.buf.type_definition, { desc = 'goto type definition' }) + vim.keymap.set('n', 'gR', vim.lsp.buf.references, { desc = 'show references' }) + vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, { desc = 'show code actions' }) + vim.keymap.set('n', 'grr', vim.lsp.buf.rename, { desc = 'rename' }) + + if client:supports_method('textDocument/implementation') then + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, { desc = 'goto implementation' }) + end + + if client:supports_method('textDocument/completion') then + vim.lsp.completion.enable(true, client.id, args.buf, {autotrigger = false}) + end + + if client:supports_method('textDocument/formatting') then + vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { desc = 'format' }) + end + + if not client:supports_method('textDocument/willSaveWaitUntil') + and client:supports_method('textDocument/formatting') then + vim.api.nvim_create_autocmd({'BufWritePre'}, { + group = vim.api.nvim_create_augroup('lspattach', {}), + buffer = args.buf, + callback = function() + if vim.b.nofmt then return end + vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 }) + end, + }) + end + end, +}) diff --git a/.vim/plugin/options.lua b/.config/nvim/lua/config/options.lua index dba726a..073835f 100644 --- a/.vim/plugin/options.lua +++ b/.config/nvim/lua/config/options.lua @@ -15,13 +15,13 @@ opt.listchars:append({ trail = '¬', tab = '> ', -- space = '·', - lead = '·', + -- lead = '·', }) opt.showbreak = '↪ ' -- show indicator and wrap text at 80 chars opt.colorcolumn = '+1' -opt.textwidth = 79 +opt.textwidth = 80 opt.wrap = true opt.conceallevel = 2 diff --git a/.config/nvim/lua/config/reset.lua b/.config/nvim/lua/config/reset.lua new file mode 100644 index 0000000..4908c20 --- /dev/null +++ b/.config/nvim/lua/config/reset.lua @@ -0,0 +1,17 @@ +vim.g.loaded_gzip = 1 +vim.g.loaded_tar = 1 +vim.g.loaded_tarPlugin = 1 +vim.g.loaded_zip = 1 +vim.g.loaded_zipPlugin = 1 +vim.g.loaded_getscript = 1 +vim.g.loaded_getscriptPlugin = 1 +vim.g.loaded_vimball = 1 +vim.g.loaded_vimballPlugin = 1 +vim.g.loaded_matchit = 1 +vim.g.loaded_2html_plugin = 1 +vim.g.loaded_logiPat = 1 +vim.g.loaded_rrhelper = 1 +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 +vim.g.loaded_netrwSettings = 1 +vim.g.loaded_netrwFileHandlers = 1 diff --git a/.vim/lua/internal/snippets.lua b/.config/nvim/lua/config/snippets.lua index be00884..e0c260e 100644 --- a/.vim/lua/internal/snippets.lua +++ b/.config/nvim/lua/config/snippets.lua @@ -1,72 +1,12 @@ local ls = require('luasnip') local types = require('luasnip.util.types') --- attach to builtin snippet hooks - -vim.snippet.expand = ls.lsp_expand - ----@diagnostic disable-next-line: duplicate-set-field -vim.snippet.active = function(filter) - filter = filter or {} - filter.direction = filter.direction or 1 - - if filter.direction == 1 then - return ls.expand_or_jumpable() - else - return ls.jumpable(filter.direction) - end -end - ----@diagnostic disable-next-line: duplicate-set-field -vim.snippet.jump = function(direction) - if direction == 1 then - if ls.expandable() then - return ls.expand_or_jump() - else - return ls.jumpable(1) and ls.jump(1) - end - else - return ls.jumpable(-1) and ls.jump(-1) - end -end - -vim.snippet.stop = ls.unlink_current - -local snip_env = { - -- snippet helpers - nl = function() - return ls.t({ '', '' }) - end, - exec = function(command) - return ls.f(function(_, _, ...) - local job = require('plenary.job'):new({ - command = vim.env.SHELL, - args = { '-c', ... }, - enable_recording = true, - }) - local res, exitcode = job:sync() - if not exitcode == 0 or #res == 0 then - error(string.format('exec "%s" failed', ...)) - end - return res - end, {}, { user_args = { command } }) - end, - -- condition helpers - cond = { - ts = function(capture) - return function() - return vim.tbl_contains(vim.treesitter.get_captures_at_cursor(), capture) - end - end, - }, -} - +-- configure luasnip ls.config.set_config({ enable_autosnippets = true, history = true, updateevents = 'TextChanged,TextChangedI', override_builtin = true, - snip_env = vim.tbl_deep_extend('error', ls.session.config.snip_env, snip_env), ext_opts = { [types.choiceNode] = { active = { @@ -79,10 +19,41 @@ ls.config.set_config({ }, }, }, + snip_env = vim.tbl_deep_extend('error', ls.session.config.snip_env, { + -- snippet helpers + nl = function() + return ls.t({ '', '' }) + end, + exec = function(command) + return ls.f(function(_, _, ...) + local job = require('plenary.job'):new({ + command = vim.env.SHELL, + args = { '-c', ... }, + enable_recording = true, + }) + local res, exitcode = job:sync() + if not exitcode == 0 or #res == 0 then + error(string.format('exec "%s" failed', ...)) + end + return res + end, {}, { user_args = { command } }) + end, + -- condition helpers + cond = { + ts = function(capture) + return function() + return vim.tbl_contains(vim.treesitter.get_captures_at_cursor(), capture) + end + end, + }, + }), }) -require('luasnip.loaders.from_lua').lazy_load({ paths = './snippets' }) +-- snippet loaders +require('luasnip.loaders.from_lua').lazy_load() +require('luasnip.loaders.from_vscode').lazy_load({ include = {} }) +-- keymaps vim.keymap.set({ 'i', 's' }, '<c-j>', function() return vim.snippet.active({ direction = 1 }) and vim.snippet.jump(1) end, { silent = true, desc = 'snippet: jump next' }) @@ -103,8 +74,10 @@ vim.keymap.set({ 'i', 's' }, '<c-p>', function() end end, { silent = true, desc = 'snippet: prev choice' }) +-- usercmds vim.api.nvim_create_user_command('EditSnippets', require('luasnip.loaders').edit_snippet_files, {}) +-- autocmds -- vim.api.nvim_create_autocmd('User', { -- pattern = 'LuasnipChoiceNodeEnter', -- callback = function() @@ -127,3 +100,41 @@ vim.api.nvim_create_user_command('EditSnippets', require('luasnip.loaders').edit -- end) -- end, -- }) + +-- unlink luasnip session on <esc> +vim.api.nvim_create_autocmd('ModeChanged', { + pattern = '*', + callback = function() + if ((vim.v.event.old_mode == 's' and vim.v.event.new_mode == 'n') or vim.v.event.old_mode == 'i') + and ls.session.current_nodes[vim.api.nvim_get_current_buf()] + and not ls.session.jump_active + and not require("blink.cmp").is_visible() + then + ls.unlink_current() + end + end +}) + +-- attach to builtin snippet hooks +vim.snippet.expand = ls.lsp_expand +vim.snippet.active = function(filter) + filter = filter or {} + filter.direction = filter.direction or 1 + if filter.direction == 1 then + return ls.expand_or_jumpable() + else + return ls.jumpable(filter.direction) + end +end +vim.snippet.jump = function(direction) + if direction == 1 then + if ls.expandable() then + return ls.expand_or_jump() + else + return ls.jumpable(1) and ls.jump(1) + end + else + return ls.jumpable(-1) and ls.jump(-1) + end +end +vim.snippet.stop = ls.unlink_current diff --git a/.vim/plugin/statuscolumn.lua b/.config/nvim/lua/config/statuscolumn.lua index 06e8988..06e8988 100644 --- a/.vim/plugin/statuscolumn.lua +++ b/.config/nvim/lua/config/statuscolumn.lua diff --git a/.vim/plugin/statusline.lua b/.config/nvim/lua/config/statusline.lua index fed6d33..fed6d33 100644 --- a/.vim/plugin/statusline.lua +++ b/.config/nvim/lua/config/statusline.lua diff --git a/.vim/plugin/undo.lua b/.config/nvim/lua/config/undo.lua index aed6195..aed6195 100644 --- a/.vim/plugin/undo.lua +++ b/.config/nvim/lua/config/undo.lua diff --git a/.vim/lua/internal/plugins/blink.lua b/.config/nvim/lua/plugins/blink.lua index 1d0e0ae..1122bcc 100644 --- a/.vim/lua/internal/plugins/blink.lua +++ b/.config/nvim/lua/plugins/blink.lua @@ -6,14 +6,7 @@ return { lazy = false, dependencies = { - { - 'L3MON4D3/LuaSnip', - version = 'v2.*', - build = 'make install_jsregexp', - config = function() - require('internal.snippets') - end, - }, + { 'L3MON4D3/LuaSnip' }, }, init = function() @@ -26,11 +19,29 @@ return { hl(0, 'BlinkCmpLabelDescription', { link = 'Comment', force = true }) end, + opts_extend = { 'sources.default' }, + opts = { -- TODO: -- 'prefer_rust_with_warning', requires nightly rust, due to: -- https://github.com/rust-lang/rust/issues/86656 - fuzzy = { implementation = 'lua' }, + fuzzy = { + implementation = 'lua', + sorts = { + function(a, b) + local prio = { + snippets = 99, + -- everyting else 0 + } + local a_priority = prio[a.source_id] or 0 + local b_priority = prio[b.source_id] or 0 + if a_priority ~= b_priority then return a_priority > b_priority end + end, + -- defaults + 'score', + 'sort_text' + }, + }, appearance = { -- fallback to cmp highlight names @@ -42,7 +53,6 @@ return { sources = { providers = { buffer = { min_keyword_length = 3 }, - snippets = { min_keyword_length = 3 }, }, }, @@ -80,6 +90,5 @@ return { snippets = { preset = 'luasnip' }, }, - opts_extend = { 'sources.default' }, }, } diff --git a/.config/nvim/lua/plugins/calcium.lua b/.config/nvim/lua/plugins/calcium.lua new file mode 100644 index 0000000..f0ab78c --- /dev/null +++ b/.config/nvim/lua/plugins/calcium.lua @@ -0,0 +1,15 @@ +return { + { + 'necrom4/calcium.nvim', + cmd = {'Calcium'}, + opts = { + notifications = false, + default_mode = 'replace', + }, + keys = { + { mode = {'n', 'v'}, 'gl', '<nop>', desc = 'Calcium' }, + { mode = {'n', 'v'}, 'glr', ':Calcium replace<cr>', desc = 'Calcium replace', silent = true }, + { mode = {'n', 'v'}, 'gla', ':Calcium append<cr>', desc = 'Calcium append', silent = true }, + }, + } +} diff --git a/.vim/lua/internal/plugins/colorizer.lua b/.config/nvim/lua/plugins/colorizer.lua index cf55336..2608ae6 100644 --- a/.vim/lua/internal/plugins/colorizer.lua +++ b/.config/nvim/lua/plugins/colorizer.lua @@ -2,12 +2,11 @@ return { { 'NvChad/nvim-colorizer.lua', -- 'norcalli/nvim-colorizer.lua', - -- events = { 'VeryLazy' }, lazy = false, opts = { name = true, RRGGBB = true, - RRGGBBAA = false, + RRGGBBAA = true, rgb_fn = true, hsl_fn = true, mode = 'background', diff --git a/.vim/lua/internal/plugins/fzf.lua b/.config/nvim/lua/plugins/fzf.lua index e8c0a9c..efee6ef 100644 --- a/.vim/lua/internal/plugins/fzf.lua +++ b/.config/nvim/lua/plugins/fzf.lua @@ -28,11 +28,19 @@ return { ['ctrl-p'] = 'up', }, }, + -- actions = { + -- files = { + -- ['ctrl-q'] = { fn = fzf.actions.file_sel_to_qf }, + -- }, + -- }, fzf_colors = true, -- PICKER CONFIG files = { file_icons = true, }, + marks = { + marks = '[a-zA-Z]', + } }) end, keys = { @@ -41,8 +49,12 @@ return { { mode = 'n', ';b', '<cmd>FzfLua buffers<cr>', desc = 'fzf: buffers' }, { mode = 'n', ';f', '<cmd>FzfLua files<cr>', desc = 'fzf: find_files' }, { mode = 'n', ';g', '<cmd>FzfLua live_grep<cr>', desc = 'fzf: live_grep' }, - { mode = 'n', ';d', '<cmd>FzfLua diagnostics_workspace<cr>', desc = 'fzf: diagnostics' }, - { mode = 'n', ';h', '<cmd>FzfLua helptags<cr>', desc = 'fzf: diagnostics' }, + { mode = 'n', ';d', '<cmd>FzfLua diagnostics_workspace<cr>', desc = 'fzf: workspace diagnostics' }, + { mode = 'n', ';D', '<cmd>FzfLua diagnostics_document<cr>', desc = 'fzf: document diagnostics' }, + { mode = 'n', ';h', '<cmd>FzfLua helptags<cr>', desc = 'fzf: help' }, + { mode = 'n', ';s', '<cmd>FzfLua lsp_document_symbols<cr>', desc = 'fzf: document symbols' }, + { mode = 'n', ';w', '<cmd>FzfLua lsp_live_workspace_symbols<cr>', desc = 'fzf: workspace symbols' }, + { mode = 'n', ';m', '<cmd>FzfLua marks<cr>', desc = 'fzf: marks' }, { mode = 'n', ';v', diff --git a/.config/nvim/lua/plugins/gentoo.lua b/.config/nvim/lua/plugins/gentoo.lua new file mode 100644 index 0000000..470e6de --- /dev/null +++ b/.config/nvim/lua/plugins/gentoo.lua @@ -0,0 +1,15 @@ +return { + { + 'gentoo/gentoo-syntax', + -- ft = { 'ebuild' }, + -- init = function() + -- vim.api.nvim_create_autocmd('LspAttach', { + -- callback = function(args) + -- if vim.opt.filetype == 'ebuild' then + -- vim.lsp.stop_client(vim.lsp.get_clients({ bufnr = args.bufnr })) + -- end + -- end, + -- }) + -- end, + }, +} diff --git a/.vim/lua/internal/plugins/git.lua b/.config/nvim/lua/plugins/git.lua index 056cc14..2561ad9 100644 --- a/.vim/lua/internal/plugins/git.lua +++ b/.config/nvim/lua/plugins/git.lua @@ -3,10 +3,7 @@ return { 'lewis6991/gitsigns.nvim', lazy = false, opts = { - signs = { - change = { text = '▋' }, - add = { text = '▋' }, - }, + debug_mode = false, }, keys = { { @@ -31,8 +28,12 @@ return { end, desc = 'Gitsigns: prev hunk', }, + { '<leader>g', '<nop>', desc = 'git' }, + { '<leader>g<space>', '<cmd>Gitsigns<cr>', desc = 'Gitsigns: select action' }, { '<leader>gb', '<cmd>Gitsigns blame<cr>', desc = 'Gitsigns: blame' }, - { '<leader>gs', '<cmd>Gitsigns<cr>', desc = 'Gitsigns: select action' }, + { '<leader>ga', '<cmd>Gitsigns stage_hunk<cr>', desc = 'Gitsigns: stage hunk' }, + { '<leader>ga', ':Gitsigns stage_hunk<cr>', desc = 'Gitsigns: stage hunk', mode = 'x' }, + { '<leader>gd', ':Gitsigns diffthis<cr>', desc = 'Gitsigns: diff' }, { ';c', function() diff --git a/.vim/lua/internal/plugins/icons.lua b/.config/nvim/lua/plugins/icons.lua index 9a597ab..9a597ab 100644 --- a/.vim/lua/internal/plugins/icons.lua +++ b/.config/nvim/lua/plugins/icons.lua diff --git a/.vim/lua/internal/plugins/indent.lua b/.config/nvim/lua/plugins/indent.lua index a27a328..e247c5a 100644 --- a/.vim/lua/internal/plugins/indent.lua +++ b/.config/nvim/lua/plugins/indent.lua @@ -12,11 +12,13 @@ return { enabled = true, show_start = false, show_end = false, + char = '▌', }, }, }, -- detect indent from the buffer contents { + enabled = false, 'NMAC427/guess-indent.nvim', lazy = false, opts = { diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..aebf3c4 --- /dev/null +++ b/.config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,6 @@ +return { + { + 'neovim/nvim-lspconfig', + version = '^2.0', + } +} diff --git a/.config/nvim/lua/plugins/markdown.lua b/.config/nvim/lua/plugins/markdown.lua new file mode 100644 index 0000000..b21255e --- /dev/null +++ b/.config/nvim/lua/plugins/markdown.lua @@ -0,0 +1,82 @@ +return { + { + -- handy markdown commands + 'tadmccorkle/markdown.nvim', + ft = { 'markdown' }, + opts = { + mappings = false, + on_attach = function(buf) + local set = function(mode, lhs, rhs, desc) + vim.keymap.set(mode, lhs, rhs, { buffer = buf, desc = 'Markdown: ' .. desc }) + end + set('n', 'nio', '<cmd>MDListItemBelow<cr>', 'Insert list item below') + set('n', 'niO', '<cmd>MDListItemAbove<cr>', 'Insert list item above') + set({ 'n', 'v', 'x', 'i' }, '<m-x>', '<cmd>MDTaskToggle<cr>', 'Toggle task') + set('x', '<m-l>', '<esc>gv<plug>(markdown_add_link_visual)', 'Make link') + end, + }, + }, + { + -- pretty markdown + 'MeanderingProgrammer/markdown.nvim', + name = 'render-markdown', -- needed if used together with markdown.nvim above + main = 'render-markdown', + dependencies = { + 'nvim-treesitter/nvim-treesitter', + 'echasnovski/mini.icons', + }, + ft = { 'markdown' }, + opts = { + completions = { blink = { enabled = true } }, + sign = { enabled = true }, + indent = { enabled = false }, + heading = { + width = 'block', + icons = { + '▒ ', + '▒▒ ', + '▒▒▒ ', + '▒▒▒▒ ', + '▒▒▒▒▒ ', + '▒▒▒▒▒▒ ', + }, + signs = { 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ' }, + backgrounds = {}, + foregrounds = {}, + }, + bullet = { + icons = { '* ', '-', '>' }, + }, + checkbox = { + checked = { icon = ' ' }, + unchecked = { icon = ' ' }, + custom = { + todo = { raw = '[-]', rendered = ' ', highlight = 'RenderMarkdownTodo' }, + }, + }, + code = { + width = 'block', + border = 'thin', + disable_background = true, + }, + }, + init = vim.schedule_wrap(function() + local hl = vim.api.nvim_set_hl + hl(0, '@markup.bold', { link = 'markdownBold', force = true }) + hl(0, '@markup.italic', { link = 'markdownItalic', force = true }) + + -- hl(0, 'RenderMarkdownH1', { fg = 'NvimLightCyan' }) + -- hl(0, 'RenderMarkdownH1Bg', { bg = 'NvimDarkCyan' }) + -- hl(0, 'RenderMarkdownH2', { fg = 'NvimLightMagenta' }) + -- hl(0, 'RenderMarkdownH2Bg', { bg = 'NvimDarkMagenta' }) + -- hl(0, 'RenderMarkdownH3', { fg = 'NvimLightYellow' }) + -- hl(0, 'RenderMarkdownH3Bg', { bg = 'NvimDarkYellow' }) + -- hl(0, 'RenderMarkdownH4', { fg = 'NvimLightBlue' }) + -- hl(0, 'RenderMarkdownH4Bg', { bg = 'NvimDarkBlue' }) + -- hl(0, 'RenderMarkdownH5', { fg = 'NvimLightRed' }) + -- hl(0, 'RenderMarkdownH5Bg', { bg = 'NvimDarkRed' }) + + hl(0, 'RenderMarkdownBullet', { link = '@markup.list', force = true }) + end), + }, +} diff --git a/.vim/lua/internal/plugins/mini.lua b/.config/nvim/lua/plugins/mini.lua index fb4c9a6..fb4c9a6 100644 --- a/.vim/lua/internal/plugins/mini.lua +++ b/.config/nvim/lua/plugins/mini.lua diff --git a/.vim/lua/internal/plugins/oil.lua b/.config/nvim/lua/plugins/oil.lua index 401fe8b..401fe8b 100644 --- a/.vim/lua/internal/plugins/oil.lua +++ b/.config/nvim/lua/plugins/oil.lua diff --git a/.config/nvim/lua/plugins/snippets.lua b/.config/nvim/lua/plugins/snippets.lua new file mode 100644 index 0000000..97a4455 --- /dev/null +++ b/.config/nvim/lua/plugins/snippets.lua @@ -0,0 +1,13 @@ +return { + { + 'L3MON4D3/LuaSnip', + version = 'v2.*', + build = 'make install_jsregexp', + config = function() + require('config.snippets') + end, + dependencies = { + "rafamadriz/friendly-snippets", + }, + } +} diff --git a/.vim/lua/internal/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua index b8b1d56..93f396d 100644 --- a/.vim/lua/internal/plugins/treesitter.lua +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -1,41 +1,24 @@ return { { 'nvim-treesitter/nvim-treesitter', + branch = 'master', dependencies = { - -- TODO: https://github.com/nvim-treesitter/nvim-treesitter-context { 'nvim-treesitter/nvim-treesitter-refactor', lazy = false }, { 'nvim-treesitter/nvim-treesitter-textobjects', lazy = false }, - { 'nvim-treesitter/playground', cmd = { 'TSPlayground' } }, + -- { 'nvim-treesitter/playground', cmd = { 'TSPlayground' } }, }, lazy = false, build = ':TSUpdate', config = function(_, opts) - -- TODO: overwrite parser configs, insert gotmpl - require('nvim-treesitter.configs').setup(opts) -- use bash parser for gentoo ebuilds vim.treesitter.language.register('bash', 'ebuild') - - -- register mediawiki parser - -- local parser_configs = require('nvim-treesitter.parsers').get_parser_configs() - -- parser_configs.mediawiki = { - -- install_info = { - -- url = 'github.com/Ordoviz/tree-sitter-mediawiki', - -- files = { 'src/parser.c' }, - -- branch = 'main', - -- generate_requires_npm = false, - -- requires_generate_from_grammar = false, - -- }, - -- filetype = 'mediawiki', - -- } end, opts = { ensure_installed = { 'bash', - 'bibtex', 'c', - 'c_sharp', 'cmake', 'comment', 'cpp', @@ -45,37 +28,28 @@ return { 'gomod', 'gotmpl', 'gowork', - 'hare', - 'hcl', 'html', - 'java', 'javascript', 'json', 'jsonc', - 'kotlin', - 'latex', - 'ledger', 'lua', 'make', 'markdown', 'markdown_inline', 'ninja', - 'norg', 'python', - 'query', 'regex', 'rust', 'scss', 'sql', + 'todotxt', 'toml', 'typescript', + 'typst', 'vim', 'vimdoc', 'yaml', 'zig', - - -- external parsers - -- 'mediawiki', -- TODO: missing queries }, highlight = { enable = true, @@ -87,15 +61,9 @@ return { refactor = { navigation = { enable = true, - keymaps = { - goto_definition = 'gd', - }, }, smart_rename = { enable = true, - keymaps = { - smart_rename = 'grr', - }, }, }, textobjects = { @@ -112,7 +80,8 @@ return { ['al'] = '@loop.outer', ['is'] = '@scopename.inner', ['as'] = '@scopename.outer', - ['ic'] = '@comment.outer', + ['ic'] = '@comment.inner', + ['ac'] = '@comment.outer', }, selection_mode = { ['@comment.outer'] = 'V', diff --git a/.vim/lua/internal/plugins/whichkey.lua b/.config/nvim/lua/plugins/whichkey.lua index dc21eda..dc21eda 100644 --- a/.vim/lua/internal/plugins/whichkey.lua +++ b/.config/nvim/lua/plugins/whichkey.lua |