Skip to content

Null-ls doesn't attach any sources #812

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
1 task done
alapshin opened this issue Apr 7, 2025 · 8 comments
Open
1 task done

Null-ls doesn't attach any sources #812

alapshin opened this issue Apr 7, 2025 · 8 comments
Labels
bug Something isn't working

Comments

@alapshin
Copy link

alapshin commented Apr 7, 2025

⚠️ Please verify that this bug has NOT been reported before.

  • I checked all existing issues and didn't find a similar issue

Description

I am trying to migrate my existing lua based config to NVF and seemingly can't get null-ls / none-ls to work when configuring it via NVF.

👟 Reproduction steps

Setup null-ls this way

programs.nvf = {
    settings.vim = {
      extraPackages = with pkgs; [
        gitlint
        dotenv-linter
      ];

      lsp = {
        enable = true;
        inlayHints.enable = true;

        null-ls = {
          enable = true;
          setupOpts.debug = true;
          setupOpts.sources = {
            "gitcommit" = mkLuaInline ''
              require("null-ls").builtins.diagnostics.gitlint
            '';
          };
        };
      };
    };
};

👀 Expected behavior

Null-ls gitlint source is detected and attached when editing git commit message.

😓 Actual Behavior

When nvim is launched from git to edit commit message :NullLsInfo returns

	null-ls
	https://github.com/nvimtools/none-ls.nvim
	
	Supported source(s)
	* diagnostics: commitlint | gitlint
	
	* Note: current buffer has no sources attached

and gitlint warnings are not surfaced via LSP. Also :NullLsLog is empty.

💻 Metadata

  • system: "x86_64-linux" - host os: Linux 6.14.0-zen1, NixOS, 25.05 (Warbler), 25.05.20250406.da98c5d - multi-user?: yes - sandbox: yes - version: nix-env (Nix) 2.26.3 - channels(root): "nixos-21.03pre260389.ac02f26980f" - nixpkgs: /nix/store/dda1fgi0jrqh3aj4rhbmmf6svimk5ybc-source

📝 Relevant log output

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


-- SECTION: theme

-- Catppuccin theme
require('catppuccin').setup {
  flavour = "latte",
  transparent_background = 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.mapleader = " "
vim.g.maplocalleader = ","


-- 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({["appearance"] = {["kind_icons"] = require("lspkind").symbol_map
},["cmdline"] = {["keymap"] = {["preset"] = "none"},["sources"] = {}},["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","buffer","nvim-cmp","path"},["providers"] = {["buffer"] = {["module"] = "blink.compat.source",["name"] = "buffer"},["nvim-cmp"] = {["module"] = "blink.compat.source",["name"] = "nvim-cmp"},["path"] = {["module"] = "blink.compat.source",["name"] = "path"}}}})
  

end
},{"comment-nvim",["after"] = function()
  
  require("Comment").setup({["mappings"] = {["basic"] = false,["extra"] = false}})
  
end
,["keys"] = {{"gc","<Plug>(comment_toggle_linewise)",["desc"] = "Toggle line comment",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gb","<Plug>(comment_toggle_blockwise)",["desc"] = "Toggle block comment",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gcc",function()
  return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_linewise_current)'
          or '<Plug>(comment_toggle_linewise_count)'
end
,["desc"] = "Toggle current line comment",["expr"] = true,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gbc",function()
  return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_blockwise_current)'
          or '<Plug>(comment_toggle_blockwise_count)'
end
,["desc"] = "Toggle current block comment",["expr"] = true,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gc","<Plug>(comment_toggle_linewise_visual)",["desc"] = "Toggle selected comment",["expr"] = false,["mode"] = "x",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gb","<Plug>(comment_toggle_blockwise_visual)",["desc"] = "Toggle selected block",["expr"] = false,["mode"] = "x",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}},{"fidget-nvim",["after"] = function()
  
  require("fidget").setup({["integration"] = {["nvim-tree"] = {["enable"] = false},["xcodebuild-nvim"] = {["enable"] = true}},["logger"] = {["float_precision"] = 0.010000,["level"] = vim.log.levels.WARN,["max_size"] = 10000,["path"] = string.format("%s/fidget.nvim.log", vim.fn.stdpath("cache"))
},["notification"] = {["configs"] = {["default"] = require('fidget.notification').default_config},["filter"] = vim.log.levels.INFO,["history_size"] = 128,["override_vim_notify"] = false,["poll_rate"] = 10,["redirect"] = function(msg, level, opts)
  if opts and opts.on_open then
    return require("fidget.integration.nvim-notify").delegate(msg, level, opts)
  end
end
,["view"] = {["group_separator"] = "---",["group_separator_hl"] = "Comment",["icon_separator"] = " ",["render_message"] = function(msg, cnt)
  return cnt == 1 and msg or string.format("(%dx) %s", cnt, msg)
end
,["stack_upwards"] = true},["window"] = {["align"] = "bottom",["border"] = "rounded",["max_height"] = 0,["max_width"] = 0,["normal_hl"] = "Comment",["relative"] = "editor",["winblend"] = 100,["x_padding"] = 1,["y_padding"] = 0,["zindex"] = 45}},["progress"] = {["display"] = {["done_icon"] = "",["done_style"] = "Constant",["done_ttl"] = 3,["format_annote"] = function(msg) return msg.title end
,["format_group_name"] = function(group) return tostring(group) end
,["format_message"] = require("fidget.progress.display").default_format_message
,["group_style"] = "Title",["icon_style"] = "Question",["overrides"] = {},["priority"] = 30,["progress_icon"] = {["pattern"] = "dots",["period"] = 1},["progress_style"] = "WarningMsg",["progress_ttl"] = 99999,["render_limit"] = 16,["skip_history"] = true},["ignore"] = {},["ignore_done_already"] = false,["ignore_empty_message"] = false,["lsp"] = {["log_handler"] = false,["progress_ringbuf_size"] = 100},["notification_group"] = function(msg)
  return msg.lsp_client.name
end
,["poll_rate"] = 0,["suppress_on_insert"] = false}})
  
end
,["event"] = "LspAttach"},{"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"}},{"nvim-ufo",["after"] = function()
  
  require("ufo").setup({})
  
end
},{"telescope",["after"] = function()
  
  require("telescope").setup({["defaults"] = {["color_devicons"] = true,["entry_prefix"] = "  ",["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"},["prompt_prefix"] = "",["selection_caret"] = "  ",["selection_strategy"] = "reset",["set_env"] = {["COLORTERM"] = "truecolor"},["sorting_strategy"] = "ascending",["vimgrep_arguments"] = {"/nix/store/sbn6iya0mr3z14xvrz8s4ink4mi6w7in-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/xkxzdvaq86qfww3r8k0a1qaplk8w58aw-fd-10.2.0/bin/fd","--type=file"}}}})
  local telescope = require("telescope")
telescope.load_extension('noice')
telescope.load_extension('notify')


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}}},{"trouble",["after"] = function()
  
  require("trouble").setup({})
  
end
,["cmd"] = "Trouble",["keys"] = {{"<leader>lwd","<cmd>Trouble toggle diagnostics<CR>",["desc"] = "Workspace diagnostics [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>ld","<cmd>Trouble toggle diagnostics filter.buf=0<CR>",["desc"] = "Document diagnostics [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>lr","<cmd>Trouble toggle lsp_references<CR>",["desc"] = "LSP References [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>xq","<cmd>Trouble toggle quickfix<CR>",["desc"] = "QuickFix [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>xl","<cmd>Trouble toggle loclist<CR>",["desc"] = "LOCList [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>xs","<cmd>Trouble toggle symbols<CR>",["desc"] = "Symbols [trouble]",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}}})
require('lzn-auto-require').enable()


-- SECTION: pluginConfigs
-- 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

-- Enable formatting
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})

format_callback = function(client, bufnr)
  if vim.g.formatsave then
    vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
    vim.api.nvim_create_autocmd("BufWritePre", {
      group = augroup,
      buffer = bufnr,
      callback = function()
        if vim.b.disableFormatSave then
  return
end

local function is_null_ls_formatting_enabled(bufnr)
    local file_type = vim.api.nvim_buf_get_option(bufnr, "filetype")
    local generators = require("null-ls.generators").get_available(
        file_type,
        require("null-ls.methods").internal.FORMATTING
    )
    return #generators > 0
end

if is_null_ls_formatting_enabled(bufnr) then
   vim.lsp.buf.format({
      bufnr = bufnr,
      filter = function(client)
        return client.name == "null-ls"
      end
    })
else
    vim.lsp.buf.format({
      bufnr = bufnr,
    })
end

      end,
    })
  end
end

local navic = require("nvim-navic")
default_on_attach = function(client, bufnr)
  attach_keymaps(client, bufnr)
  format_callback(client, bufnr)
  -- let navic attach to buffers
if client.server_capabilities.documentSymbolProvider then
  navic.attach(client, bufnr)
end

end

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


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



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

require('lspconfig.ui.windows').default_options.border = "rounded"



-- SECTION: bash-lsp
lspconfig.bashls.setup{
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/2hrf8wkwq7rr8zbvrwkscx39gj1f2lrp-bash-language-server-5.4.0/bin/bash-language-server",  "start"};
}


-- SECTION: breadcrumbs

local navic = require("nvim-navic")
require("nvim-navic").setup {
  highlight = true
}





-- SECTION: colorizer
require('colorizer').setup({["filetypes"] = {},["user_default_options"] = {}})


-- SECTION: conform-nvim
require("conform").setup({["default_format_opts"] = {["lsp_format"] = "fallback"},["format_after_save"] = {["lsp_format"] = "fallback"},["format_on_save"] = {["lsp_format"] = "fallback",["timeout_ms"] = 500},["formatters"] = {["black"] = {["command"] = "/nix/store/zndwzs4ccfqljwaa5x96vym8isp0y71n-python3.12-black-25.1.0/bin/black"},["deno_fmt"] = {["command"] = "/nix/store/i4l161m0k42x9y871sah79gijm5wr4k2-deno-2.2.6/bin/deno"},["shfmt"] = {["command"] = "/nix/store/jki5rz8dfhaiwgzj1p0g3jqpzym8v5dz-shfmt-3.11.0/bin/shfmt"},["stylua"] = {["command"] = "/nix/store/di87il6h6vm6m2z5md1djy12xgm8109h-stylua-2.0.2/bin/stylua"}},["formatters_by_ft"] = {["lua"] = {"stylua"},["markdown"] = {"deno_fmt"},["python"] = {"black"},["sh"] = {"shfmt"}}})


-- SECTION: gitsigns
require('gitsigns').setup({})


-- 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: lightbulb
local nvim_lightbulb = require("nvim-lightbulb")
nvim_lightbulb.setup({})
vim.api.nvim_create_autocmd({"CursorHold","CursorHoldI"}, {
  pattern = "*",
  callback = function()
    nvim_lightbulb.update_lightbulb()
  end,
})



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


-- SECTION: lualine
local lualine = require('lualine')
lualine.setup {["inactive_sections"] = {["lualine_a"] = {},["lualine_b"] = {},["lualine_c"] = {'filename'},["lualine_x"] = {'location'},["lualine_y"] = {},["lualine_z"] = {}},["options"] = {["always_divide_middle"] = true,["component_separators"] = {"",""},["globalstatus"] = true,["icons_enabled"] = true,["refresh"] = {["statusline"] = 1000,["tabline"] = 1000,["winbar"] = 1000},["section_separators"] = {"",""},["theme"] = "catppuccin"},["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
  }
}
}},["winbar"] = {["lualine_c"] = {{"navic",draw_empty = true}}}}


-- SECTION: markdown-lsp
lspconfig.marksman.setup{
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/q3avc2zs6l9h6nplzg3vc9izjdgydjmw-marksman-2024-12-18/bin/marksman", "server"},
}


-- 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.nixd.setup{
  capabilities = capabilities,
on_attach = default_on_attach,
  cmd = {"/nix/store/irrhp5n75axi88waxbyhpcam2g4qz4yw-nixd-2.6.2/bin/nixd"},
settings = {
  nixd = {

formatting = {
  command = {"/nix/store/8dy4rqc44frv0wi4k6akn0a2znmj7bym-nixfmt-unstable-2025-04-04/bin/nixfmt"},
},

options = nil,
  },
},

}


-- SECTION: noice-nvim
require("noice").setup({["format"] = {["cmdline"] = {["icon"] = "",["lang"] = "vim",["pattern"] = "^:"},["filter"] = {["icon"] = "",["lang"] = "bash",["pattern"] = "^:%s*!"},["help"] = {["icon"] = "󰋖",["pattern"] = "^:%s*he?l?p?%s+"},["lua"] = {["icon"] = "",["lang"] = "lua",["pattern"] = "^:%s*lua%s+"},["search_down"] = {["icon"] = " ",["kind"] = "search",["lang"] = "regex",["pattern"] = "^/"},["search_up"] = {["icon"] = " ",["kind"] = "search",["lang"] = "regex",["pattern"] = "^%?"}},["lsp"] = {["override"] = {["cmp.entry.get_documentation"] = false,["vim.lsp.util.convert_input_to_markdown_lines"] = true,["vim.lsp.util.stylize_markdown"] = true},["signature"] = {["enabled"] = false}},["presets"] = {["bottom_search"] = false,["command_palette"] = true,["inc_rename"] = true,["long_message_to_split"] = true,["lsp_doc_border"] = true},["routes"] = {{["filter"] = {["event"] = "msg_show",["find"] = "written",["kind"] = ""},["opts"] = {["skip"] = true}}}})


-- SECTION: null_ls
require('null-ls').setup({["debounce"] = 250,["debug"] = true,["default_timeout"] = 5000,["diagnostics_format"] = "[#{m}] #{s} (#{c})",["on_attach"] = on_attach,["sources"] = {["gitcommit"] = require("null-ls").builtins.diagnostics.gitlint
}})


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


-- SECTION: nvim-lint
require("lint").linters_by_ft = {["lua"] = {"luacheck"},["markdown"] = {"markdownlint-cli2"},["nix"] = {"statix","deadnix"},["sh"] = {"shellcheck"}}

local linters = require("lint").linters
local nvf_linters = {["deadnix"] = {["cmd"] = "/nix/store/mg0w4wn0dcxz9a4asgnr3nq4v0jmka9s-deadnix-1.2.1/bin/deadnix"},["luacheck"] = {["cmd"] = "/nix/store/hrsm1r06q3daakxqylby0789sanvq1dl-luajit2.1-luacheck-1.2.0-1/bin/luacheck"},["markdownlint-cli2"] = {["cmd"] = "/nix/store/q18k1wfldz6wlrxdyvc1zvlfcsxgzg62-markdownlint-cli2-0.17.2/bin/markdownlint-cli2"},["shellcheck"] = {["cmd"] = "/nix/store/dhnqlishcv0v6i0909kymyrhmwpzq072-shellcheck-0.10.0-bin/bin/shellcheck"},["statix"] = {["cmd"] = "/nix/store/zwb51xq8svf2ls3ibp5b0037ghkrsjf3-statix-0.5.8/bin/statix"}}
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


-- SECTION: nvim-notify
local notify = require("notify")
notify.setup({["background_colour"] = "NotifyBackground",["icons"] = {["DEBUG"] = "",["ERROR"] = "",["INFO"] = "",["TRACE"] = "",["WARN"] = ""},["position"] = "top_right",["render"] = "default",["stages"] = "static",["timeout"] = 1000})
vim.notify = notify.notify


-- SECTION: nvim-scrollbar
require("scrollbar").setup({["excluded_filetypes"] = {"prompt","TelescopePrompt","noice","NvimTree","neo-tree","alpha","notify","Navbuddy","fastaction_popup"}})


-- SECTION: nvim-web-devicons
require("nvim-web-devicons").setup({["color_icons"] = true,["override"] = {}})


-- SECTION: nvimBufferline
require("bufferline").setup({["highlights"] = require("catppuccin.groups.integrations.bufferline").get()
,["options"] = {["always_show_bufferline"] = true,["auto_toggle_bufferline"] = true,["buffer_close_icon"] = " 󰅖 ",["close_command"] = function(bufnum)
  require("bufdelete").bufdelete(bufnum, false)
end
,["close_icon"] = "  ",["color_icons"] = true,["diagnostics"] = "nvim_lsp",["diagnostics_indicator"] = function(count, level, diagnostics_dict, context)
  local s = " "
    for e, n in pairs(diagnostics_dict) do
      local sym = e == "error" and "   "
        or (e == "warning" and "   " or "  " )
      s = s .. n .. sym
    end
  return s
end
,["diagnostics_update_in_insert"] = false,["duplicates_across_groups"] = true,["enforce_regular_tabs"] = false,["hover"] = {["delay"] = 200,["enabled"] = true,["reveal"] = {"close"}},["indicator"] = {["style"] = "icon"},["left_mouse_command"] = "buffer %d",["left_trunc_marker"] = "",["max_name_length"] = 18,["max_prefix_length"] = 15,["mode"] = "buffers",["modified_icon"] = "● ",["move_wraps_at_ends"] = false,["numbers"] = function(opts)
  return string.format('%s·%s', opts.raise(opts.id), opts.lower(opts.ordinal))
end
,["offsets"] = {{["filetype"] = "NvimTree",["highlight"] = "Directory",["separator"] = true,["text"] = "File Explorer"},{["filetype"] = "neo-tree",["highlight"] = "Directory",["separator"] = true,["text"] = "File Explorer"}},["persist_buffer_sort"] = true,["right_mouse_command"] = "vertical sbuffer %d",["right_trunc_marker"] = "",["separator_style"] = "slant",["show_buffer_close_icons"] = true,["show_buffer_icons"] = true,["show_close_icon"] = true,["show_duplicate_prefix"] = true,["show_tab_indicators"] = true,["sort_by"] = "extension",["style_preset"] = require('bufferline').style_preset.default,["tab_size"] = 18,["themable"] = true,["truncate_names"] = true}})


-- SECTION: python-lsp
lspconfig.basedpyright.setup{
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/gk2hyybx9n7lq89dc76c31dqaxb4jp4j-basedpyright-1.28.4/bin/basedpyright-langserver", "--stdio"}
}


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


-- SECTION: render-markdown-nvim
require("render-markdown").setup({})


-- SECTION: smartcolumn
require("smartcolumn").setup({["colorcolumn"] = "120",["custom_colorcolumn"] = {},["disabled_filetypes"] = {"help","text","markdown","NvimTree","alpha"}})


-- 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 = false,
    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: vim-illuminate
require('illuminate').configure({["filetypes_denylist"] = {"dirvish","fugitive","help","neo-tree","notify","NvimTree","TelescopePrompt"}})


-- SECTION: whichkey
local wk = require("which-key")
wk.setup ({["notify"] = true,["preset"] = "modern",["replace"] = {["<cr>"] = "RETURN",["<leader>"] = "SPACE",["<space>"] = "SPACE",["<tab>"] = "TAB"},["win"] = {["border"] = "rounded"}})
wk.add({{ '<leader>b', desc = '+Buffer' },{ '<leader>bm', desc = 'BufferLineMove' },{ '<leader>bs', desc = 'BufferLineSort' },{ '<leader>bsi', desc = 'BufferLineSortById' },{ '<leader>f', desc = '+Telescope' },{ '<leader>fl', desc = 'Telescope LSP' },{ '<leader>fm', desc = 'Cellular Automaton' },{ '<leader>fv', desc = 'Telescope Git' },{ '<leader>fvc', desc = 'Commits' },{ '<leader>g', desc = '+Gitsigns' },{ '<leader>lw', desc = '+Workspace' },{ '<leader>x', desc = '+Trouble' }})


-- SECTION: yaml-lsp


lspconfig.yamlls.setup {
  capabilities = capabilities,
  on_attach = function(client, bufnr)
  local filetype = vim.bo[bufnr].filetype
  if filetype == "helm" then
    client.stop()
  end
end,
  cmd = {"/nix/store/ap0y6xhn3i000n465ydpvfpidqmv697p-yaml-language-server-1.15.0/bin/yaml-language-server", "--stdio"},
}




-- 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()
  require("lint").try_lint()
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},{["callback"] = function(event)
  local bufnr = event.buf
  local client = vim.lsp.get_client_by_id(event.data.client_id)
  if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
    vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr })
  end
end
,["desc"] = "LSP on-attach enable inlay hints autocmd",["enable"] = true,["event"] = {"LspAttach"},["nested"] = false,["once"] = false}}
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({["signs"] = false,["underline"] = true,["update_in_insert"] = false,["virtual_lines"] = false,["virtual_text"] = false})



-- 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"}, "<leader>bc", ":BufferLinePick<CR>", {["desc"] = "Pick buffer",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bmn", ":BufferLineMoveNext<CR>", {["desc"] = "Move next buffer",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bmp", ":BufferLineMovePrev<CR>", {["desc"] = "Move previous buffer",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bn", ":BufferLineCycleNext<CR>", {["desc"] = "Next buffer",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bp", ":BufferLineCyclePrev<CR>", {["desc"] = "Previous buffer",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bsd", ":BufferLineSortByDirectory<CR>", {["desc"] = "Sort buffers by directory",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bse", ":BufferLineSortByExtension<CR>", {["desc"] = "Sort buffers by extension",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>bsi", function() require("bufferline").sort_buffers_by(function (buf_a, buf_b) return buf_a.id < buf_b.id end) end, {["desc"] = "Sort buffers by ID",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hD", function() package.loaded.gitsigns.diffthis('~') end, {["desc"] = "Diff project [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hP", package.loaded.gitsigns.preview_hunk, {["desc"] = "Preview hunk [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hR", package.loaded.gitsigns.reset_buffer, {["desc"] = "Reset buffer [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hS", package.loaded.gitsigns.stage_buffer, {["desc"] = "Stage buffer [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hb", function() package.loaded.gitsigns.blame_line{full=true} end, {["desc"] = "Blame line [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hd", package.loaded.gitsigns.diffthis, {["desc"] = "Diff this [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hr", package.loaded.gitsigns.reset_hunk, {["desc"] = "Reset hunk [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hs", package.loaded.gitsigns.stage_hunk, {["desc"] = "Stage hunk [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>hu", package.loaded.gitsigns.undo_stage_hunk, {["desc"] = "Undo stage hunk [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>tb", package.loaded.gitsigns.toggle_current_line_blame, {["desc"] = "Toggle blame [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>td", package.loaded.gitsigns.toggle_deleted, {["desc"] = "Toggle deleted [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "[c", function()
  if vim.wo.diff then return "[c" end

  vim.schedule(function() package.loaded.gitsigns.prev_hunk() end)

  return '<Ignore>'
end
, {["desc"] = "Previous hunk [Gitsigns]",["expr"] = true,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "]c", function()
  if vim.wo.diff then return "]c" end

  vim.schedule(function() package.loaded.gitsigns.next_hunk() end)

  return '<Ignore>'
end
, {["desc"] = "Next hunk [Gitsigns]",["expr"] = true,["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({"v"}, "<leader>hr", function() package.loaded.gitsigns.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end, {["desc"] = "Reset hunk [Gitsigns]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"v"}, "<leader>hs", function() package.loaded.gitsigns.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end, {["desc"] = "Stage hunk [Gitsigns]",["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})
@alapshin alapshin added the bug Something isn't working label Apr 7, 2025
@NotAShelf
Copy link
Owner

NotAShelf commented Apr 9, 2025

Quite frankly I'm sick of null-ls in general, and starting to regret supporting it as a module after migrating to conform and nvim-lint.

That aside, I think the source you are adding is missing an should_attach condition. Please refer to null-ls documentation. Alternatively it might be that other plugins take priority, and null-ls disables itself for compatibility. If you could isolate the problem to a specific module conflict, that would help me add a workaround for this edge case. Otherwise it should be solvable in null-ls config only.

@alapshin
Copy link
Author

alapshin commented Apr 9, 2025

Thanks for your response.

I'm aware of general consensus that null-ls / none-ls are brittle and it's better to migrate to combination of conform / nvim-lint but didn't have time to migrate myself yet. I will either try to pinpoint the root cause or migrate.

@niscolas
Copy link

I would like to add that this is something that started happening with the new null-ls config style, previously everything worked flawlessly.
Same problem here, not sure if null-ls is being able to parse the sources in dictionary style

@NotAShelf
Copy link
Owner

attrsOf might be the wrong type. Though I assume a Lua list would cause it to error?

Regardless, I've pushed a change to the null-ls-sources branch. If that works for you, I'll push it to main.

@niscolas
Copy link

I don't see a branch with that name in GitHub? Maybe I'm mistaken

@NotAShelf
Copy link
Owner

Looks like I had pushed it to my Forgejo mirror by accident, whoops. Now available under https://github.com/NotAShelf/nvf/tree/null-ls-sources

@NotAShelf
Copy link
Owner

Would anyone be able to update me on whether the null-ls-sources branch has resolved the issue? I'm happy to merge it into main if that solves the oustanding issue, or I might be able to take a closer look if it does not.

@alapshin
Copy link
Author

Would anyone be able to update me on whether the null-ls-sources branch has resolved the issue? I'm happy to merge it into main if that solves the oustanding issue, or I might be able to take a closer look if it does not.

I gave it go and it seems to be working although with some hiccups. My config looks like this

        null-ls = {
          enable = true;
          setupOpts.sources = [
            (mkLuaInline ''require("null-ls").builtins.diagnostics.gitlint'')
          ];
        };

When opening gitcommit buffer I get an error message:

[null-ls] failed to start null-ls client with config: {
  cmd = <function 1>,
  filetypes = { "gitcommit" },
  flags = {
    debounce_text_changes = 250
  },
  name = "null-ls",
  on_attach = <function 2>,
  on_exit = <function 3>,
  on_init = <function 4>,
  root_dir = "/home/alapshin/nixos-config"
}

But null-ls seems to be working, at least partially. I get diagnostics messages and :NullLsInfo prints:

	null-ls
	https://github.com/nvimtools/none-ls.nvim
	
	Logging
	* current level: warn
	* path: /home/alapshin/.cache/nvf/null-ls.log
	
	Active source(s)
	* name: gitlint
	* filetypes: gitcommit
	* methods: diagnostics
	
	
	Supported source(s)
	* diagnostics: commitlint | gitlint

So it at least detects builtin gitlint source. Not sure what is the reason for error message on start and :NullLsLog is still empty.

By the way, I took your advice and migrate my own setup from null-ls to a combination of nvim-lint and conform-nvim so this issue is no longer relevant but I guess it would be great to have working null-ls just in case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants