nvf
nvf copied to clipboard
Error while calling lua chunk:attempt to index local 'clangd_cap' (a nil value)
I have confirmed that this is a bug related to nvf
- [x] This is a bug, and not an user error or a support request. I understand that my issue will be closed if it is not a bug in nvf.
- [x] I have checked the issues tab and confirmed that my issue has not yet been reported. I understand that my issue will be closed if it is a duplicate.
Description
Error detected while processing VIMINIT..script /nix/store/qbys1xciljbhrarf5a8qqinsil4ynkkh-mnw-configDir/init.lua:
E5113: Error while calling lua chunk: /nix/store/chksz5gwhp6jiqyxszb7brbh5dbybzhl-init.lua:150: attempt to index local 'clangd_cap' (a nil value)
stack traceback:
/nix/store/chksz5gwhp6jiqyxszb7brbh5dbybzhl-init.lua:150: in main chunk
[C]: in function 'dofile'
.../qbys1xciljbhrarf5a8qqinsil4ynkkh-mnw-configDir/init.lua:5: in main chunk
Installation Method
Home Manager Module (homeManagerModules.default)
Installation Method (Other)
No response
nvf Version
v0.8
Reproduction steps
- install nvf as a home-manager module
- set
vim.languages.clang.lsp.enable = truethis is my nvf configuration
{confg, pkgs, ...}:
{
programs.nvf = {
enable = true;
settings = {
vim = {
theme = {
enable = true;
name = "gruvbox";
style = "dark";
};
statusline.lualine.enable = true;
telescope.enable = true;
autocomplete.blink-cmp.enable = true;
filetree.neo-tree.enable = true;
utility.preview.markdownPreview.enable = true;
languages = {
nix = {
enable = true;
format.enable = true;
lsp.enable = true;
treesitter.enable = true;
};
python = {
enable = true;
format.enable = true;
lsp.enable = true;
treesitter.enable = true;
};
clang = {
enable = true;
cHeader = true;
lsp.enable = true;
treesitter.enable = true;
};
bash = {
enable =true;
extraDiagnostics.enable = true;
format.enable = true;
lsp.enable = true;
treesitter.enable = true;
};
};
};
};
};
}
vim.languages.clang.lsp.enable = false;,it runs normally
Expected behavior
no error
Actual Behavior
error
System Information
- system: `"x86_64-linux"`
- host os: `Linux 6.12.44, NixOS, 25.05 (Warbler), 25.05.20250904.fe83bbd`
- multi-user?: `yes`
- sandbox: `yes`
- version: `nix-env (Nix) 2.28.4`
- nixpkgs: `/nix/store/7xjjbj14r58g4k9iihcrb9r6j6ib9mi2-source
Relevant log output
-- SECTION: theme
-- Gruvbox theme
require("gruvbox").setup({
terminal_colors = true, -- add neovim terminal colors
undercurl = true,
underline = true,
bold = true,
italic = {
strings = true,
emphasis = true,
comments = true,
operators = false,
folds = true,
},
strikethrough = true,
invert_selection = false,
invert_signs = false,
invert_tabline = false,
invert_intend_guides = false,
inverse = true,
contrast = "",
palette_overrides = {},
overrides = {},
dim_inactive = false,
transparent_mode = false,
})
vim.o.background = "dark"
vim.cmd("colorscheme gruvbox")
-- SECTION: globalsScript
vim.g.editorconfig = true
vim.g.mapleader = " "
vim.g.maplocalleader = ","
vim.g.mkdp_auto_close = true
vim.g.mkdp_auto_start = false
vim.g.mkdp_command_for_global = false
vim.g.mkdp_filetypes = {"markdown"}
vim.g.mkdp_open_ip = ""
vim.g.mkdp_open_to_the_world = false
vim.g.mkdp_port = ""
vim.g.mkdp_refresh_slow = false
-- SECTION: basic
vim.o.smartcase = false
vim.o.ignorecase = false
-- SECTION: optionsScript
vim.o.autoindent = true
vim.o.backup = false
vim.o.cmdheight = 1
vim.o.cursorlineopt = "line"
vim.o.encoding = "utf-8"
vim.o.errorbells = false
vim.o.expandtab = true
vim.o.hidden = true
vim.o.mouse = "nvi"
vim.o.number = true
vim.o.relativenumber = true
vim.o.shiftwidth = 8
vim.o.signcolumn = "yes"
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.swapfile = false
vim.o.tabstop = 8
vim.o.termguicolors = true
vim.o.tm = 500
vim.o.updatetime = 300
vim.o.visualbell = false
vim.o.wrap = true
vim.o.writebackup = false
-- SECTION: lazyConfigs
require('lz.n').load({{"blink-cmp",["after"] = function()
require("blink.cmp").setup({["cmdline"] = {["keymap"] = {["<C-Space>"] = {"show","fallback"},["<C-d>"] = {"scroll_documentation_up","fallback"},["<C-e>"] = {"hide","fallback"},["<C-f>"] = {"scroll_documentation_down","fallback"},["<S-Tab>"] = {"select_prev","fallback"},["<Tab>"] = {"select_next","show","fallback"},["preset"] = "none"}},["completion"] = {["documentation"] = {["auto_show"] = true,["auto_show_delay_ms"] = 200},["menu"] = {["auto_show"] = true}},["fuzzy"] = {["implementation"] = "prefer_rust",["prebuilt_binaries"] = {["download"] = false}},["keymap"] = {["<C-Space>"] = {"show","fallback"},["<C-d>"] = {"scroll_documentation_up","fallback"},["<C-e>"] = {"hide","fallback"},["<C-f>"] = {"scroll_documentation_down","fallback"},["<CR>"] = {"accept","fallback"},["<S-Tab>"] = {"select_prev","snippet_backward","fallback"},["<Tab>"] = {"select_next","snippet_forward",function(cmp)
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
has_words_before = col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
if has_words_before then
return cmp.show()
end
end
,"fallback"},["preset"] = "none"},["sources"] = {["default"] = {"lsp","path","snippets","buffer"},["providers"] = {}}})
end
},{"neo-tree-nvim",["after"] = function()
require("neo-tree").setup({["add_blank_line_at_top"] = false,["auto_clean_after_session_restore"] = false,["default_source"] = "filesystem",["enable_cursor_hijack"] = false,["enable_diagnostics"] = true,["enable_git_status"] = true,["enable_modified_markers"] = true,["enable_opened_markers"] = true,["enable_refresh_on_write"] = true,["filesystem"] = {["hijack_netrw_behavior"] = "open_default"},["git_status_async"] = false,["hide_root_node"] = false,["log_level"] = "info",["log_to_file"] = false,["open_files_do_not_replace_types"] = {"terminal","Trouble","qf","edgy"},["open_files_in_last_window"] = true,["retain_hidden_root_indent"] = false})
end
,["cmd"] = {"Neotree"}},{"telescope",["after"] = function()
require("telescope").setup({["defaults"] = {["color_devicons"] = false,["entry_prefix"] = " ",["extensions"] = {},["file_ignore_patterns"] = {"node_modules","%.git/","dist/","build/","target/","result/"},["initial_mode"] = "insert",["layout_config"] = {["height"] = 0.800000,["horizontal"] = {["preview_width"] = 0.550000,["prompt_position"] = "top"},["preview_cutoff"] = 120,["vertical"] = {["mirror"] = false},["width"] = 0.800000},["layout_strategy"] = "horizontal",["path_display"] = {"absolute"},["pickers"] = {["find_command"] = {"/nix/store/2b8r4c96g0by5kr9gr0rw37nhh13mhv5-fd-10.2.0/bin/fd"}},["prompt_prefix"] = " ",["selection_caret"] = " ",["selection_strategy"] = "reset",["set_env"] = {["COLORTERM"] = "truecolor"},["sorting_strategy"] = "ascending",["vimgrep_arguments"] = {"/nix/store/09by8p0biz9r7lr1iy12h0jy01sh462v-ripgrep-14.1.1/bin/rg","--color=never","--no-heading","--with-filename","--line-number","--column","--smart-case","--hidden","--no-ignore"},["winblend"] = 0},["pickers"] = {["find_files"] = {["find_command"] = {"/nix/store/2b8r4c96g0by5kr9gr0rw37nhh13mhv5-fd-10.2.0/bin/fd","--type=file"}}}})
local telescope = require("telescope")
end
,["before"] = function()
vim.g.loaded_telescope = nil
end
,["cmd"] = {"Telescope"},["keys"] = {{"<leader>ff","<cmd>Telescope find_files<CR>",["desc"] = "Find files [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fg","<cmd>Telescope live_grep<CR>",["desc"] = "Live grep [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fb","<cmd>Telescope buffers<CR>",["desc"] = "Buffers [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fh","<cmd>Telescope help_tags<CR>",["desc"] = "Help tags [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>ft","<cmd>Telescope<CR>",["desc"] = "Open [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fr","<cmd>Telescope resume<CR>",["desc"] = "Resume (previous search) [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fvcw","<cmd>Telescope git_commits<CR>",["desc"] = "Git commits [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fvcb","<cmd>Telescope git_bcommits<CR>",["desc"] = "Git buffer commits [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fvb","<cmd>Telescope git_branches<CR>",["desc"] = "Git branches [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fvs","<cmd>Telescope git_status<CR>",["desc"] = "Git status [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fvx","<cmd>Telescope git_stash<CR>",["desc"] = "Git stash [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fs","<cmd>Telescope treesitter<CR>",["desc"] = "Treesitter [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}}})
require('lzn-auto-require').enable()
-- SECTION: pluginConfigs
-- SECTION: lspconfig
local lspconfig = require('lspconfig')
-- SECTION: bash-lsp
lspconfig.bashls.setup{
capabilities = capabilities;
on_attach = default_on_attach;
cmd = {"/nix/store/kwshx35rb28ap4ladpxwy6w942az4pnc-bash-language-server-5.4.0/bin/bash-language-server", "start"};
}
-- SECTION: c-header
vim.g.c_syntax_for_h = 1
-- SECTION: clang-lsp
local clangd_cap = capabilities
-- use same offsetEncoding as null-ls
clangd_cap.offsetEncoding = {"utf-16"}
lspconfig.clangd.setup{
capabilities = clangd_cap;
on_attach=default_on_attach;
cmd = { "/nix/store/qzs12k12nwafwdr33dk6jq74jcy4ijzq-clang-tools-19.1.7/bin/clangd" };
}
-- SECTION: conform-nvim
require("conform").setup({["default_format_opts"] = {["lsp_format"] = "fallback"},["format_after_save"] = function()
if not vim.g.formatsave or vim.b.disableFormatSave then
return
else
return {["lsp_format"] = "fallback"}
end
end
,["format_on_save"] = function()
if not vim.g.formatsave or vim.b.disableFormatSave then
return
else
return {lsp_format = "fallback", timeout_ms = 500}
end
end
,["formatters"] = {["black"] = {["command"] = "/nix/store/69ix5rkv81dyc4jmmc2s94wb4whx6r4q-python3.12-black-25.1.0/bin/black"},["shfmt"] = {["command"] = "/nix/store/4z11av3pfqjmkv8akhj9r3ssyk4gmf6p-shfmt-3.11.0/bin/shfmt"}},["formatters_by_ft"] = {["python"] = {"black"},["sh"] = {"shfmt"}}})
-- SECTION: lualine
local lualine = require('lualine')
lualine.setup {["extensions"] = {"neo-tree"},["inactive_sections"] = {["lualine_a"] = {},["lualine_b"] = {},["lualine_c"] = {'filename'},["lualine_x"] = {'location'},["lualine_y"] = {},["lualine_z"] = {}},["options"] = {["always_divide_middle"] = true,["component_separators"] = {["left"] = "",["right"] = ""},["globalstatus"] = true,["icons_enabled"] = true,["refresh"] = {["statusline"] = 1000,["tabline"] = 1000,["winbar"] = 1000},["section_separators"] = {["left"] = "",["right"] = ""},["theme"] = "auto"},["sections"] = {["lualine_a"] = {{
"mode",
icons_enabled = true,
separator = {
left = '▎',
right = ''
},
}
,{
"",
draw_empty = true,
separator = { left = '', right = '' }
}
},["lualine_b"] = {{
"filetype",
colored = true,
icon_only = true,
icon = { align = 'left' }
}
,{
"filename",
symbols = {modified = ' ', readonly = ' '},
separator = {right = ''}
}
,{
"",
draw_empty = true,
separator = { left = '', right = '' }
}
},["lualine_c"] = {{
"diff",
colored = false,
diff_color = {
-- Same color values as the general color option can be used here.
added = 'DiffAdd', -- Changes the diff's added color
modified = 'DiffChange', -- Changes the diff's modified color
removed = 'DiffDelete', -- Changes the diff's removed color you
},
symbols = {added = '+', modified = '~', removed = '-'}, -- Changes the diff symbols
separator = {right = ''}
}
},["lualine_x"] = {{
-- Lsp server name
function()
local buf_ft = vim.bo.filetype
local excluded_buf_ft = { toggleterm = true, NvimTree = true, ["neo-tree"] = true, TelescopePrompt = true }
if excluded_buf_ft[buf_ft] then
return ""
end
local bufnr = vim.api.nvim_get_current_buf()
local clients = vim.lsp.get_clients({ bufnr = bufnr })
if vim.tbl_isempty(clients) then
return "No Active LSP"
end
local active_clients = {}
for _, client in ipairs(clients) do
table.insert(active_clients, client.name)
end
return table.concat(active_clients, ", ")
end,
icon = ' ',
separator = {left = ''},
}
,{
"diagnostics",
sources = {'nvim_lsp', 'nvim_diagnostic', 'nvim_diagnostic', 'vim_lsp', 'coc'},
symbols = {error = ' ', warn = ' ', info = ' ', hint = ' '},
colored = true,
update_in_insert = false,
always_visible = false,
diagnostics_color = {
color_error = { fg = 'red' },
color_warn = { fg = 'yellow' },
color_info = { fg = 'cyan' },
},
}
},["lualine_y"] = {{
"",
draw_empty = true,
separator = { left = '', right = '' }
}
,{
'searchcount',
maxcount = 999,
timeout = 120,
separator = {left = ''}
}
,{
"branch",
icon = ' •',
separator = {left = ''}
}
},["lualine_z"] = {{
"",
draw_empty = true,
separator = { left = '', right = '' }
}
,{
"progress",
separator = {left = ''}
}
,{"location"}
,{
"fileformat",
color = {fg='black'},
symbols = {
unix = '', -- e712
dos = '', -- e70f
mac = '', -- e711
}
}
}}}
-- SECTION: neo-tree
vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("load_neo_tree", {}),
desc = "Loads neo-tree when opening a directory",
callback = function(args)
local stats = vim.uv.fs_stat(args.file)
if not stats or stats.type ~= "directory" then
return
end
require("lz.n").trigger_load("neo-tree-nvim")
return true
end,
})
-- SECTION: nix-lsp
lspconfig.nil_ls.setup{
capabilities = capabilities,
on_attach = default_on_attach,
cmd = {"/nix/store/1av325hxyjd8601sl1y1ydm7b68j2cp5-nil-2024-08-06/bin/nil"},
settings = {
["nil"] = {
formatting = {
command = {"/nix/store/3ld518xmv8c88z7pfcszdqkvy5ngakcq-alejandra-4.0.0/bin/alejandra", "--quiet"},
},
},
},
}
-- SECTION: nvim-lint
require("lint").linters_by_ft = {["sh"] = {"shellcheck"}}
local linters = require("lint").linters
local nvf_linters = {["shellcheck"] = {["cmd"] = "/nix/store/24rsk83zn9nz5nb1zfsmxxmg37b6wq78-shellcheck-0.10.0-bin/bin/shellcheck"}}
for linter, config in pairs(nvf_linters) do
if linters[linter] == nil then
linters[linter] = config
else
for key, val in pairs(config) do
linters[linter][key] = val
end
end
end
nvf_lint = function(buf)
local ft = vim.api.nvim_get_option_value("filetype", { buf = buf })
local linters = require("lint").linters
local linters_from_ft = require("lint").linters_by_ft[ft]
-- if no linter is configured for this filetype, stops linting
if linters_from_ft == nil then return end
for _, name in ipairs(linters_from_ft) do
local linter = linters[name]
assert(linter, 'Linter with name `' .. name .. '` not available')
if type(linter) == "function" then
linter = linter()
end
-- for require("lint").lint() to work, linter.name must be set
linter.name = linter.name or name
local cwd = linter.required_files
-- if no configuration files are configured, lint
if cwd == nil then
require("lint").lint(linter)
else
-- if configuration files are configured and present in the project, lint
for _, fn in ipairs(cwd) do
local path = vim.fs.joinpath(linter.cwd or vim.fn.getcwd(), fn);
if vim.uv.fs_stat(path) then
require("lint").lint(linter)
break
end
end
end
end
end
-- SECTION: nvim-web-devicons
require("nvim-web-devicons").setup({["color_icons"] = true,["override"] = {}})
-- SECTION: python-lsp
lspconfig.basedpyright.setup{
capabilities = capabilities;
on_attach = default_on_attach;
cmd = {"/nix/store/jk3g5k6qv4rgsf269sqic04wrn5l0kpb-basedpyright-1.29.1/bin/basedpyright-langserver", "--stdio"}
}
-- SECTION: treesitter
require('nvim-treesitter.configs').setup {
-- Disable imperative treesitter options that would attempt to fetch
-- grammars into the read-only Nix store. To add additional grammars here
-- you must use the `config.vim.treesitter.grammars` option.
auto_install = false,
sync_install = false,
ensure_installed = {},
-- Indentation module for Treesitter
indent = {
enable = true,
disable = {},
},
-- Highlight module for Treesitter
highlight = {
enable = true,
disable = {},
additional_vim_regex_highlighting = false,
},
-- Indentation module for Treesitter
-- Keymaps are set to false here as they are
-- handled by `vim.maps` entries calling lua
-- functions achieving the same functionality.
incremental_selection = {
enable = true,
disable = {},
keymaps = {
init_selection = false,
node_incremental = false,
scope_incremental = false,
node_decremental = false,
},
},
}
-- SECTION: augroups
local nvf_autogroups = {}
for _, group in ipairs({{["clear"] = true,["enable"] = true,["name"] = "nvf_nvim_lint"},{["clear"] = true,["enable"] = true,["name"] = "nvf_lazy_file_hooks"}}) do
if group.name then
nvf_autogroups[group.name] = { clear = group.clear }
end
end
for group_name, options in pairs(nvf_autogroups) do
vim.api.nvim_create_augroup(group_name, options)
end
-- SECTION: autocmds
local nvf_autocommands = {{["callback"] = function(args)
nvf_lint(args.buf)
end
,["enable"] = true,["event"] = {"BufWritePost"},["nested"] = false,["once"] = false},{["command"] = "doautocmd User LazyFile",["enable"] = true,["event"] = {"BufReadPost","BufNewFile","BufWritePre"},["group"] = "nvf_lazy_file_hooks",["nested"] = false,["once"] = true}}
for _, autocmd in ipairs(nvf_autocommands) do
vim.api.nvim_create_autocmd(
autocmd.event,
{
group = autocmd.group,
pattern = autocmd.pattern,
buffer = autocmd.buffer,
desc = autocmd.desc,
callback = autocmd.callback,
command = autocmd.command,
once = autocmd.once,
nested = autocmd.nested
}
)
end
-- SECTION: lsp-servers
-- Individual LSP configurations managed by nvf.
vim.lsp.config["*"] = {["capabilities"] = capabilities,["enable"] = true,["on_attach"] = default_on_attach}
-- Enable configured LSPs explicitly
vim.lsp.enable({})
-- SECTION: mappings
vim.keymap.set({"n"}, "gnn", ":lua require('nvim-treesitter.incremental_selection').init_selection()<CR>", {["desc"] = "Init selection [treesitter]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n","x"}, "grc", "<cmd>lua require('nvim-treesitter.incremental_selection').scope_incremental()<CR>", {["desc"] = "Increment selection by scope [treesitter]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n","x"}, "grm", "<cmd>lua require('nvim-treesitter.incremental_selection').node_decremental()<CR>", {["desc"] = "Decrement selection by node [treesitter]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n","x"}, "grn", "<cmd>lua require('nvim-treesitter.incremental_selection').node_incremental()<CR>", {["desc"] = "Increment selection by node [treesitter]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
working on a fix
you can workaround this issue by enabling vim.lsp.enable I think
ok, turns out we can't fix this without big changes to the language module, so turning on vim.lsp.enable is the only workaround until we get 0.8 done