diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2026-03-09 02:37:03 +0100 |
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2026-03-09 02:37:03 +0100 |
| commit | aee5c2d14324ed56668f18dd2c72ef0302e4069a (patch) | |
| tree | d5f19dffda42c0985663761988271ae4f991dc81 | |
| parent | b17fd7c63784c5a2a77fa06b98378b9285fb2d08 (diff) | |
nvim: Vastly simplify config
| -rw-r--r-- | .config/nvim/init.lua | 181 | ||||
| -rw-r--r-- | .config/nvim/lua/snippets.lua | 190 |
2 files changed, 5 insertions, 366 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 220c341..67bfa39 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -166,84 +166,24 @@ end require 'paq' { 'folke/todo-comments.nvim', 'folke/tokyonight.nvim', - 'hrsh7th/cmp-nvim-lsp', - 'hrsh7th/cmp-path', - 'hrsh7th/nvim-cmp', 'kylechui/nvim-surround', - 'L3MON4D3/LuaSnip', 'luckasRanarison/tree-sitter-hypr', 'Mango0x45/tree-sitter-gsp', - 'mattn/emmet-vim', - 'neovim/nvim-lspconfig', 'ngalaiko/tree-sitter-go-template', 'nvim-lua/plenary.nvim', - 'nvim-telescope/telescope.nvim', - 'nvim-telescope/telescope-ui-select.nvim', - { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate' }, + { + 'nvim-treesitter/nvim-treesitter', + branch = 'master', + build = ':TSUpdate', + }, 'nvim-treesitter/nvim-treesitter-textobjects', - 'saadparwaiz1/cmp_luasnip', 'savq/paq-nvim', 'wellle/targets.vim', } --- emmet-vim -vim.g.user_emmet_install = false - -- tokyonight.nvim vim.cmd.colorscheme 'tokyonight-night' --- telescope.nvim -local telescope = require 'telescope' -local tsactions = require 'telescope.actions' -local tsbuiltin = require 'telescope.builtin' -local tsthemes = require 'telescope.themes' - -telescope.setup { - defaults = { - scroll_strategy = 'limit', - path_display = { 'filename_first' }, - get_status_text = function(_) return '' end, - mappings = { - i = { - ['<Esc>'] = { - tsactions.close, - type = 'action', - opts = { nowait = true, silent = true }, - }, - ['<C-j>'] = { - tsactions.move_selection_next, - type = 'action', - opts = { nowait = true, silent = true }, - }, - ['<C-k>'] = { - tsactions.move_selection_previous, - type = 'action', - opts = { nowait = true, silent = true }, - }, - }, - }, - }, - extensions = { - ['ui-select'] = { tsthemes.get_dropdown() }, - } -} - -pcall(telescope.load_exetension, 'fzf') -pcall(telescope.load_exetension, 'ui-select') - -vim.keymap.set('n', '<Leader>ff', tsbuiltin.find_files, - { desc = '[F]ind [F]iles' }) -vim.keymap.set('n', '<Leader>fh', tsbuiltin.help_tags, - { desc = '[F]ind [H]elp' }) -vim.keymap.set('n', '<Leader>fg', tsbuiltin.live_grep, - { desc = '[F]ind [G]rep' }) -vim.keymap.set('n', '<Leader>/', function() - tsbuiltin.current_buffer_fuzzy_find(tsthemes.get_dropdown { - winblend = 10, - previewer = false, - }) -end, { desc = 'Fuzzily search in current buffer' }) - -- todo-comments.nvim require('todo-comments').setup { signs = false, @@ -400,116 +340,5 @@ require('nvim-surround').setup { } } --- nvim-lspconfig -local lsp = require 'lspconfig' -local caps = require('cmp_nvim_lsp').default_capabilities() - -lsp.clangd.setup { - cmd = { 'clangd', '-header-insertion=never' }, - capabilities = caps, -} -lsp.gopls.setup { - capabilities = caps, -} -lsp.rust_analyzer.setup { - capabilities = caps, -} -lsp.templ.setup { - capabilities = caps, -} -lsp.ts_ls.setup { - capabilities = caps, -} -lsp.lua_ls.setup { - settings = { - Lua = { - runtime = { - version = 'LuaJIT', - }, - diagnostics = { - globals = { - 'vim', - 'require', - }, - }, - workspace = { - library = vim.api.nvim_get_runtime_file('', true), - }, - telemetry = { - enable = false, - }, - }, - }, - capabilities = caps, -} - -vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('mango-lsp-config', { clear = true }), - callback = function(ev) - vim.diagnostic.disable() - vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' - vim.keymap.set('n', 'gK', vim.lsp.buf.hover, - { buffer = ev.buf, desc = 'View symbol hover information' }) - vim.keymap.set('n', 'gd', vim.lsp.buf.definition, - { buffer = ev.buf, desc = 'Goto [D]efinition' }) - vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, - { buffer = ev.buf, desc = 'Goto [I]mplementation' }) - vim.keymap.set('n', 'gr', vim.lsp.buf.rename, - { buffer = ev.buf, desc = '[R]ename symbol' }) - vim.keymap.set('n', 'gt', vim.lsp.buf.type_definition, - { buffer = ev.buf, desc = 'Goto [T]ype definition' }) - end, -}) - --- nvim-cmp & luasnip -local cmp = require 'cmp' -local luasnip = require 'luasnip' - -luasnip.config.setup { - history = true, - updateevents = 'TextChanged,TextChangedI', -} -require 'snippets' - -cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - completion = { completeopt = 'menu,menuone,noinsert' }, - mapping = cmp.mapping.preset.insert { - ['<CR>'] = cmp.mapping.confirm { select = true }, - ['<C-Space>'] = cmp.mapping.complete(), - ['<C-p>'] = cmp.mapping.scroll_docs(-1), - ['<C-n>'] = cmp.mapping.scroll_docs(1), - ['<C-c>'] = cmp.mapping.abort(), - ['<C-j>'] = cmp.mapping.select_next_item({ - behaviour = cmp.SelectBehavior.Select, - }), - ['<C-k>'] = cmp.mapping.select_prev_item({ - behaviour = cmp.SelectBehavior.Select, - }), - ['<C-l>'] = cmp.mapping(function() - if luasnip.expand_or_locally_jumpable() then - luasnip.expand_or_jump() - end - end, {'i', 's'}), - ['<C-h>'] = cmp.mapping(function() - if luasnip.expand_or_locally_jumpable(-1) then - luasnip.expand_or_jump(-1) - end - end, {'i', 's'}), - }, - sources = { - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - { name = 'path' }, - }, - experimental = { - ghost_text = true, - }, -} - -- Pipe require('pipe') diff --git a/.config/nvim/lua/snippets.lua b/.config/nvim/lua/snippets.lua deleted file mode 100644 index 185019c..0000000 --- a/.config/nvim/lua/snippets.lua +++ /dev/null @@ -1,190 +0,0 @@ -local ls = require('luasnip') -local ts_utils = require('nvim-treesitter.ts_utils') -local ts_locals = require('nvim-treesitter.locals') - -local c = ls.choice_node -local d = ls.dynamic_node -local f = ls.function_node -local i = ls.insert_node -local s = ls.s -local sn = ls.snippet_node -local t = ls.text_node -local fmt = require('luasnip.extras.fmt').fmt - -local function same(index) - return f(function(args) - return args[1] - end, { index }) -end - -ls.add_snippets('lua', { - s('req', fmt([[local {} = require('{}')]], { - f(function(name) - local xs = vim.split(name[1][1], '.', { plain = true }) - return xs[#xs] or '' - end, { 1 }), - i(1), - })), -}) - -local function is_ptr(str) - return string.find(str, '*', 1, true) ~= nil -end - -local function is_num(str) - return vim.regex( - '\\v^(' - .. 'u?int(8|16|32|64)?' - .. '|byte' - .. '|complex(64|128)' - .. '|float(32|64)' - .. '|rune' - .. '|uintptr' - .. ')$' - ):match_str(str) ~= nil -end - -local transforms = { - bool = 'false', - string = '""', - error = 'err', - [is_num] = '0', - [is_ptr] = 'nil', -} - -local transform = function(text) - local condition_matches = function(condition, ...) - if type(condition) == 'string' then - return condition == text - else - return condition(...) - end - end - - for condition, result in pairs(transforms) do - if condition_matches(condition, text) then - return t(result) - end - end - - return t(text .. '{}') -end - -local handlers = { - parameter_list = function(node) - local result = {} - - local count = node:named_child_count() - for idx = 0, count - 1 do - local matching_node = node:named_child(idx) - local type_node = matching_node:field('type')[1] - table.insert(result, transform( - vim.treesitter.get_node_text(type_node, 0) - )) - if idx ~= count - 1 then - table.insert(result, t({ ', ' })) - end - end - - return result - end, - - type_identifier = function(node) - local text = vim.treesitter.get_node_text(node, 0) - return { transform(text) } - end, -} - -local function_node_types = { - function_declaration = true, - method_declaration = true, - func_literal = true, -} - -local function go_result_type() - local cursor_node = ts_utils.get_node_at_cursor() - if cursor_node == nil then - print('Unable to find position') - return t('') - end - local scope = ts_locals.get_scope_tree(cursor_node, 0) - - local function_node - for _, v in ipairs(scope) do - if function_node_types[v:type()] then - function_node = v - break - end - end - - if not function_node then - print('Not inside of a function') - return t('') - end - - local query = vim.treesitter.query.parse('go', [[ - [ - (method_declaration result: (_) @id) - (function_declaration result: (_) @id) - (func_literal result: (_) @id) - ] - ]]) - for _, node in query:iter_captures(function_node, 0) do - if handlers[node:type()] then - return handlers[node:type()](node) - end - end -end - -ls.add_snippets('go', { - s( - 'ife', - fmt( - [[ - if err != nil { - return <> - } - ]], - { - d(1, function() - return sn(nil, go_result_type()) - end), - }, - { - delimiters = '<>', - } - ) - ), -}) - - -ls.add_snippets('c', { - s( - 'gu', - fmt( - [[ - #ifndef {}_H - #define {}_H - - {} - - #endif /* !{}_H */ - ]], - { i(1), same(1), i(0), same(1) } - ) - ), -}) - -ls.add_snippets('tex', { - s( - 'scope', - fmt( - [[ - \begin{{{}}} - {} - \end{{{}}} - ]], - { i(1), i(0), same(1) } - ) - ), -}) |