{lib, ...}: { programs.nvf.settings.vim = { autopairs.nvim-autopairs.enable = true; snippets.luasnip = { enable = true; setupOpts.enable_autosnippets = true; }; autocomplete = { blink-cmp = { enable = true; friendly-snippets.enable = true; setupOpts = { enabled = lib.generators.mkLuaInline /* lua */ '' --- Disable completion for markdown function() return not vim.tbl_contains({"markdown"}, vim.bo.filetype) and vim.bo.buftype ~= "prompt" and vim.b.completion ~= false end ''; cmdline = { enabled = true; sources = null; completion.menu.auto_show = false; }; completion.menu.auto_show = lib.generators.mkLuaInline /* lua */ '' function(ctx) --- Get the cursor position from the current window local row, column = unpack(vim.api.nvim_win_get_cursor(0)) --- Get the current row (1 is Neovim API giving us 1-based indexing) --- Get the current column but don't return negative numbers --- ignore_injections are to ignore embedded code --- success is the result, node is the syntax node object local success, node = pcall(vim.treesitter.get_node, { pos = {row - 1, math.max(0, column - 1)}, ignore_injections = false }) --- Types of nodes to ignore local reject = {"comment", "line_comment", "block_comment", "string_start", "string_content", "string_end" } --- If the node type is in the reject table, don't show the completion if success and node and vim.tbl_contains(reject, node:type()) then return false; end -- whatever other logic you want beyond this return true end ''; # menu.auto_show = false; completion.documentation.auto_show_delay_ms = 0; signature.enabled = true; }; }; }; utility = { motion = { hop.enable = true; # h precognition.enable = false; }; yanky-nvim.enable = true; }; }; }