nvf icon indicating copy to clipboard operation
nvf copied to clipboard

Error while calling lua chunk:attempt to index local 'clangd_cap' (a nil value)

Open shier1 opened this issue 5 months ago • 2 comments

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

  1. install nvf as a home-manager module
  2. set vim.languages.clang.lsp.enable = true this 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})

shier1 avatar Sep 07 '25 15:09 shier1

working on a fix

you can workaround this issue by enabling vim.lsp.enable I think

horriblename avatar Sep 13 '25 14:09 horriblename

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

horriblename avatar Sep 13 '25 14:09 horriblename