nvf icon indicating copy to clipboard operation
nvf copied to clipboard

`vim.languages.<name>.lsp` suddenly stopped working in v0.7(main)

Open recluse099 opened this issue 3 months ago • 9 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

I tried to enable the lua language module today via vim.language.lua.enable and vim.language.lua.lsp.enable but it didn't work and it's the same for any new language that I enable, here is a link to my nvf configuration: https://gitlab.com/recluse0/dotfiles/-/blob/master/nvf-configuration.nix?ref_type=heads, both rust and lua don't work which I enabled today. The lsps for languages that had been already enabled earlier are working fine.

Installation Method

Standalone (flake outputs, nix profile install, etc.)

Installation Method (Other)

No response

nvf Version

master

Reproduction steps

On the master nvf branch, use my nvf-configuration which has been linked in the description and build, then open any .lua file or any file whose language wasn't already enabled(for me it was lua and rust, you may enable any new language which was disabled so far) in neovim and it will say "No Active LSP".

Expected behavior

The enabled LSPs for enabled languages should work inside neovim as they are supposed to normally.

Actual Behavior

The newly enabled LSPs for languages don't work, at least not from today onward.

System Information

λ nix run nixpkgs#nix-info -- --markdown

 - system: `"x86_64-linux"`
 - host os: `Linux 6.12.48, NixOS, 25.11 (Xantusia), 25.11.20250921.554be64`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.28.5`
 - nixpkgs: `/nix/store/yw0wijix50n0y2ii15sk8kvnwgalpq6f-source`

Relevant log output

if vim.loader then
  vim.loader.enable()
end


-- SECTION: theme

-- Catppuccin theme
require('catppuccin').setup {
  flavour = "mocha",
  transparent_background = false,
  float = {
    transparent = false,
  },
  term_colors = true,
  integrations = {
    nvimtree = {
      enabled = true,
      transparent_panel = false,
      show_root = true,
    },

    hop = true,
    gitsigns = true,
    telescope = true,
    treesitter = true,
    treesitter_context = true,
    ts_rainbow = true,
    fidget = true,
    alpha = true,
    leap = true,
    lsp_saga = true,
    markdown = true,
    noice = true,
    notify = true, -- nvim-notify
    which_key = true,
    navic = {
      enabled = true,
      custom_bg = "NONE", -- "lualine" will set background to mantle
    },
  },
}
-- setup must be called before loading
vim.cmd.colorscheme "catppuccin"




-- SECTION: globalsScript
vim.g.editorconfig = true
vim.g.haskell_backpack = 1
vim.g.haskell_enable_arrowsyntax = 1
vim.g.haskell_enable_pattern_synonyms = 1
vim.g.haskell_enable_quantification = 1
vim.g.haskell_enable_recursivedo = 1
vim.g.haskell_enable_static_pointers = 1
vim.g.haskell_enable_typeroles = 1
vim.g.mapleader = " "
vim.g.maplocalleader = ","


-- SECTION: basic
vim.cmd("syntax on")








vim.o.smartcase = false
vim.o.ignorecase = false



-- SECTION: optionsScript
vim.o.autoindent = false
vim.o.backup = false
vim.o.clipboard = "unnamed,unnamedplus"
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 = 2
vim.o.signcolumn = "yes"
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.swapfile = false
vim.o.tabstop = 2
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
},{"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/f5p1y2d1i025kbnikf9p7m2q3sm3gpnd-fd-10.3.0/bin/fd"}},["prompt_prefix"] = "     ",["selection_caret"] = "  ",["selection_strategy"] = "reset",["set_env"] = {["COLORTERM"] = "truecolor"},["sorting_strategy"] = "ascending",["vimgrep_arguments"] = {"/nix/store/5pv8jrp70w0flz9g3yqkk7fzcnr28mpx-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/f5p1y2d1i025kbnikf9p7m2q3sm3gpnd-fd-10.3.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>flsb","<cmd>Telescope lsp_document_symbols<CR>",["desc"] = "LSP Document Symbols [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>flsw","<cmd>Telescope lsp_workspace_symbols<CR>",["desc"] = "LSP Workspace Symbols [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>flr","<cmd>Telescope lsp_references<CR>",["desc"] = "LSP References [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fli","<cmd>Telescope lsp_implementations<CR>",["desc"] = "LSP Implementations [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>flD","<cmd>Telescope lsp_definitions<CR>",["desc"] = "LSP Definitions [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>flt","<cmd>Telescope lsp_type_definitions<CR>",["desc"] = "LSP Type Definitions [Telescope]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>fld","<cmd>Telescope diagnostics<CR>",["desc"] = "Diagnostics [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}}},{"typst.vim",["ft"] = {"typst"}}})
require('lzn-auto-require').enable()


-- SECTION: pluginConfigs
-- 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"] = {["stylua"] = {["command"] = "/nix/store/hijc7nwwx9qakvdvb1g4z88gvwmyfw18-stylua-2.1.0/bin/stylua"}},["formatters_by_ft"] = {["lua"] = {"stylua"}}})


-- SECTION: indent-blankline
require("ibl").setup({["debounce"] = 200,["indent"] = {["char"] = "│",["priority"] = 1,["repeat_linebreak"] = true,["smart_indent_cap"] = true},["scope"] = {["char"] = "│",["enabled"] = true,["exclude"] = {["language"] = {},["node_type"] = {["*"] = {"source_file","program"},["lua"] = {"chunk"},["python"] = {"module"}}},["include"] = {["node_type"] = {}},["injected_languages"] = true,["priority"] = 1024,["show_end"] = false,["show_exact_scope"] = false,["show_start"] = false},["viewport_buffer"] = {["max"] = 500,["min"] = 30},["whitespace"] = {["remove_blankline_trail"] = true}})


-- SECTION: lsp-setup
vim.g.formatsave = false;

local attach_keymaps = function(client, bufnr)
  vim.keymap.set('n', '<leader>lgD', vim.lsp.buf.declaration, {buffer=bufnr, noremap=true, silent=true, desc='Go to declaration'})
  vim.keymap.set('n', '<leader>lgd', vim.lsp.buf.definition, {buffer=bufnr, noremap=true, silent=true, desc='Go to definition'})
  vim.keymap.set('n', '<leader>lgt', vim.lsp.buf.type_definition, {buffer=bufnr, noremap=true, silent=true, desc='Go to type'})
  vim.keymap.set('n', '<leader>lgi', vim.lsp.buf.implementation, {buffer=bufnr, noremap=true, silent=true, desc='List implementations'})
  vim.keymap.set('n', '<leader>lgr', vim.lsp.buf.references, {buffer=bufnr, noremap=true, silent=true, desc='List references'})
  vim.keymap.set('n', '<leader>lgn', vim.diagnostic.goto_next, {buffer=bufnr, noremap=true, silent=true, desc='Go to next diagnostic'})
  vim.keymap.set('n', '<leader>lgp', vim.diagnostic.goto_prev, {buffer=bufnr, noremap=true, silent=true, desc='Go to previous diagnostic'})
  vim.keymap.set('n', '<leader>le', vim.diagnostic.open_float, {buffer=bufnr, noremap=true, silent=true, desc='Open diagnostic float'})
  vim.keymap.set('n', '<leader>lH', vim.lsp.buf.document_highlight, {buffer=bufnr, noremap=true, silent=true, desc='Document highlight'})
  vim.keymap.set('n', '<leader>lS', vim.lsp.buf.document_symbol, {buffer=bufnr, noremap=true, silent=true, desc='List document symbols'})
  vim.keymap.set('n', '<leader>lwa', vim.lsp.buf.add_workspace_folder, {buffer=bufnr, noremap=true, silent=true, desc='Add workspace folder'})
  vim.keymap.set('n', '<leader>lwr', vim.lsp.buf.remove_workspace_folder, {buffer=bufnr, noremap=true, silent=true, desc='Remove workspace folder'})
  vim.keymap.set('n', '<leader>lwl', function() vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, {buffer=bufnr, noremap=true, silent=true, desc='List workspace folders'})
  vim.keymap.set('n', '<leader>lws', vim.lsp.buf.workspace_symbol, {buffer=bufnr, noremap=true, silent=true, desc='List workspace symbols'})
  vim.keymap.set('n', '<leader>lh', vim.lsp.buf.hover, {buffer=bufnr, noremap=true, silent=true, desc='Trigger hover'})
  vim.keymap.set('n', '<leader>ls', vim.lsp.buf.signature_help, {buffer=bufnr, noremap=true, silent=true, desc='Signature help'})
  vim.keymap.set('n', '<leader>ln', vim.lsp.buf.rename, {buffer=bufnr, noremap=true, silent=true, desc='Rename symbol'})
  vim.keymap.set('n', '<leader>la', vim.lsp.buf.code_action, {buffer=bufnr, noremap=true, silent=true, desc='Code action'})
  vim.keymap.set('n', '<leader>lf', vim.lsp.buf.format, {buffer=bufnr, noremap=true, silent=true, desc='Format'})
  vim.keymap.set('n', '<leader>ltf', function() vim.b.disableFormatSave = not vim.b.disableFormatSave end, {buffer=bufnr, noremap=true, silent=true, desc='Toggle format on save'})
end


default_on_attach = function(client, bufnr)
  attach_keymaps(client, bufnr)
  
end

local capabilities = vim.lsp.protocol.make_client_capabilities()


capabilities = require('blink.cmp').get_lsp_capabilities()



-- SECTION: lspconfig
local lspconfig = require('lspconfig')




-- SECTION: lua-lsp
lspconfig.lua_ls.setup {
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/yv5gfrvadvfj68idcqkzixqnyl40phiy-lua-language-server-3.15.0/bin/lua-language-server"};
}


-- SECTION: lualine
local lualine = require('lualine')
lualine.setup {["extensions"] = {},["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",
  path = 4,
  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: nix-lsp
lspconfig.nixd.setup{
  capabilities = capabilities,
on_attach = default_on_attach,
  cmd = {"/nix/store/hvhiy4f7h95a5hkawy5x01d85aki7rbp-nixd-2.6.4/bin/nixd"},
  settings = {["nixd"] = {["formatting"] = {["command"] = {"/nix/store/7lai03z9lri0vcgp2jbyj3wsk5cwy9dx-alejandra-4.0.0/bin/alejandra","--quiet"}}}},
}


-- SECTION: nvim-dap
local dap = require("dap")
vim.fn.sign_define("DapBreakpoint", { text = "🛑", texthl = "ErrorMsg", linehl = "", numhl = "" })


-- SECTION: rainbow-delimiters
vim.g.rainbow_delimiters = {}


-- SECTION: rustaceanvim
vim.g.rustaceanvim = {
-- LSP
tools = {
  hover_actions = {
    replace_builtin_hover = false
  },
},
server = {
  cmd = {"/nix/store/13irk3d1x0qihfhz2c1jv3d170p9sbnc-rust-analyzer-2025-08-25/bin/rust-analyzer"},
  default_settings = {
    
  },
  on_attach = function(client, bufnr)
    default_on_attach(client, bufnr)
    local opts = { noremap=true, silent=true, buffer = bufnr }
    vim.keymap.set("n", "<localleader>rr", ":RustLsp runnables<CR>", opts)
    vim.keymap.set("n", "<localleader>rp", ":RustLsp parentModule<CR>", opts)
    vim.keymap.set("n", "<localleader>rm", ":RustLsp expandMacro<CR>", opts)
    vim.keymap.set("n", "<localleader>rc", ":RustLsp openCargo", opts)
    vim.keymap.set("n", "<localleader>rg", ":RustLsp crateGraph x11", opts)
    
  end
},


  
}


-- 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: ts-lsp
lspconfig.ts_ls.setup {
  capabilities = capabilities,
  on_attach = function(client, bufnr)
    attach_keymaps(client, bufnr);
    client.server_capabilities.documentFormattingProvider = false;
  end,
  cmd = {"/nix/store/255dlbbj9ilf6s10h4vvjp3lpc63vdp8-typescript-language-server-5.0.0/bin/typescript-language-server", "--stdio"}
}




-- SECTION: augroups
local nvf_autogroups = {}
for _, group in ipairs({{["clear"] = true,["enable"] = true,["name"] = "nvf_lazy_file_hooks"},{["clear"] = true,["enable"] = true,["name"] = "nvf_lsp"}}) 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 = {{["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: diagnostics
vim.diagnostic.config({["Float"] = {["scope"] = "buffer"},["float"] = true,["signs"] = false,["underline"] = true,["update_in_insert"] = false,["virtual_lines"] = false,["virtual_text"] = false})


-- SECTION: extraPluginConfigs





-- SECTION: haskell-tools-nvim
vim.g.haskell_tools = {
-- LSP
tools = {
  hover = {
    enable = true,
  },
},
hls = {
  cmd = {"/nix/store/szwhhlsmciwa6d5rc6wg98kzrgh0nbg1-haskell-language-server-2.11.0.0/bin/haskell-language-server-wrapper", "--lsp"},
  on_attach = function(client, bufnr, ht)
    default_on_attach(client, bufnr, ht)
    local opts = { noremap = true, silent = true, buffer = bufnr }
    vim.keymap.set('n', '<localleader>cl', vim.lsp.codelens.run, opts)
    vim.keymap.set('n', '<localleader>hs', ht.hoogle.hoogle_signature, opts)
    vim.keymap.set('n', '<localleader>ea', ht.lsp.buf_eval_all, opts)
    vim.keymap.set('n', '<localleader>rr', ht.repl.toggle, opts)
    vim.keymap.set('n', '<localleader>rf', function()
      ht.repl.toggle(vim.api.nvim_buf_get_name(0))
    end, opts)
    vim.keymap.set('n', '<localleader>rq', ht.repl.quit, opts)
  end,
},

dap = {
  cmd = {"/nix/store/fqxz1prv09yhkl5jgz875wx17f5pwf86-haskell-debug-adapter-0.0.42.0/bin/haskell-debug-adapter"},
},

}


-- SECTION: lsp-servers
-- Individual LSP configurations managed by nvf.
vim.lsp.config["*"] = {["capabilities"] = capabilities,["enable"] = true,["on_attach"] = default_on_attach}

vim.lsp.config["tinymist"] = {["enable"] = true,["filetypes"] = {"typ","typst"},["settings"] = {["exportPdf"] = "onType",["formatterMode"] = "typestyle",["semanticTokens"] = "enable"}}



-- Enable configured LSPs explicitly
vim.lsp.enable({"tinymist"})


-- SECTION: mappings
vim.keymap.set("n", "<leader>dc", require('dap').continue, {["desc"] = "Continue",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dR", require('dap').restart, {["desc"] = "Restart",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dq", require('dap').terminate, {["desc"] = "Terminate",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>d.", require('dap').run_last, {["desc"] = "Re-run Last Debug Session",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dr", require('dap').repl.toggle, {["desc"] = "Toggle Repl",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dh", require('dap.ui.widgets').hover, {["desc"] = "Hover",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>db", require('dap').toggle_breakpoint, {["desc"] = "Toggle breakpoint",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dgc", require('dap').run_to_cursor, {["desc"] = "Continue to the current cursor",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dgi", require('dap').step_into, {["desc"] = "Step into function",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dgo", require('dap').step_out, {["desc"] = "Step out of function",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dgj", require('dap').step_over, {["desc"] = "Next step",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dgk", require('dap').step_back, {["desc"] = "Step back",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dvo", require('dap').up, {["desc"] = "Go up stacktrace",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set("n", "<leader>dvi", require('dap').down, {["desc"] = "Go down stacktrace",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
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})


vim.keymap.set("n", "<leader>d", function()
  vim.diagnostic.open_float(nil, { focus = false, border = "rounded" })
end, { desc = "Show diagnostics at cursor" })

recluse099 avatar Sep 25 '25 17:09 recluse099

I think it's a known issue that legacy lspconfig setups break (including language modules in the main branch) when vim.lsp.servers is set. I couldn't find the original issue though

If you're feeling a little adventurous, try the v0.8 branch, otherwise I think you'll have to use the old lspconfig API

horriblename avatar Sep 25 '25 22:09 horriblename

I think it's a known issue that legacy lspconfig setups break (including language modules in the main branch) when vim.lsp.servers is set. I couldn't find the original issue though

If you're feeling a little adventurous, try the v0.8 branch, otherwise I think you'll have to use the old lspconfig API

So to use the main(0.7) branch, I'll have to use vim.lsp.servers for setting all LSPs? I don't really know how to use the vim.lspconfig as I have no clue what goes into vim.lspconfig.sources and that looks like the only available option in the manual and it just says it should be an attribute set of strings and no other info is given. @horriblename

recluse099 avatar Sep 25 '25 22:09 recluse099

you can either: 1) avoid the language module (at least for LSPs) completely, and use vim.lsp.servers to setup all your LSP, or 2) keep using the language modules, and use vim.lsp.lspconfig.sources instead:

vim.lsp.lspconfig.sources.nixd = ''
  require('lspconfig').nixd.setup({
    capabilities = capabilities,
    on_attach = default_on_attach,
    cmd = {"${pkgs.nixd}/bin/nixd", "--foo", "--bar"}
  })
'';

keep in mind that after v0.8 vim.lsp.lspconfig.sources will probably not work with the language modules instead.

I would recommend switching to v0.8 branch if you don't mind some breaking changes. We're close to release so there aren't too many major changes left.

I'm truly sorry for this mess, I had thought that the legacy lspconfig setup would keep working for longer but unfortunately not

horriblename avatar Sep 26 '25 00:09 horriblename

@horriblename I see, it's fine, I shall just switch to v0.8, don't apologize, I am grateful for all the useful quality services you folks are providing that too for free so no need to be sorry, you may close this issue.

recluse099 avatar Sep 26 '25 15:09 recluse099

Do not know if this has to do anything with this. But I recently got this error: The ´require('lspconfig')´ "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead. Feature will be removed in nvim-lspconfig v3.0.0

XanderTheDev avatar Nov 01 '25 16:11 XanderTheDev

Do not know if this has to do anything with this. But I recently got this error: The ´require('lspconfig')´ "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead. Feature will be removed in nvim-lspconfig v3.0.0

@XanderTheDev which version are you on?

recluse099 avatar Nov 01 '25 16:11 recluse099

Do not know if this has to do anything with this. But I recently got this error: The ´require('lspconfig')´ "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead. Feature will be removed in nvim-lspconfig v3.0.0

@XanderTheDev which version are you on?

I have the same warning, I'm on v0.7(main) and yes switching to v0.8 worked for me.

SeniorMatt avatar Nov 07 '25 19:11 SeniorMatt

Do not know if this has to do anything with this. But I recently got this error: The ´require('lspconfig')´ "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead. Feature will be removed in nvim-lspconfig v3.0.0

@XanderTheDev which version are you on?

I have the same warning, and I'm using flakes to install it so I think that's the latest version?

@SeniorMatt So, you are just using the default branch available in nixpkgs-unstable in your flake input? If yes, then it is 0.7, and the issue is likely due to using either vim.languages.<name>.lsp for some programming language or using the vim.lsp.lspconfig option, more likely the latter, so you may try using the vim.lsp.servers option to configure your lsps, it should probably work if you want to keep using 0.7 for now

recluse099 avatar Nov 07 '25 19:11 recluse099

Do not know if this has to do anything with this. But I recently got this error: The ´require('lspconfig')´ "framework" is deprecated, use vim.lsp.config (see :help lspconfig-nvim-0.11) instead. Feature will be removed in nvim-lspconfig v3.0.0

@XanderTheDev which version are you on?

I have the same warning, I'm on v0.7(main) and yes switching to v0.8 worked for me.

okay, good to know

recluse099 avatar Nov 07 '25 19:11 recluse099