nvf icon indicating copy to clipboard operation
nvf copied to clipboard

dap.configurations.python missing

Open cristids opened this issue 10 months ago โ€ข 9 comments

โš ๏ธ Please verify that this bug has NOT been reported before.

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

Description

I tried setting nvf for python but when I hit SPACE + d +c I get an error about missing dap.configurations.python. It seams that 4 days ago python.nix was changed for exactly that.

๐Ÿ‘Ÿ Reproduction steps

Config nvf for python and start debug with space+d+c. An error indicates the missing config dap.configurations.python

๐Ÿ‘€ Expected behavior

Start debuging

๐Ÿ˜“ Actual Behavior

Error

๐Ÿ’ป Metadata

  • system: "x86_64-linux" - host os: Linux 6.14.1-zen1, NixOS, 25.05 (Warbler), 25.05.20250412.2631b0b - multi-user?: yes - sandbox: yes - version: nix-env (Nix) 2.28.1 - channels(root): "nixos-24.11, nixos-unstable" - nixpkgs: /nix/store/5ds20jm3x2s4z7wn3581r6lc9ybmh45b-source

๐Ÿ“ Relevant log output

-- SECTION: theme

-- Catppuccin theme
require('catppuccin').setup {
  flavour = "mocha",
  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 = ","
vim.g.zig_fmt_autosave = 0


-- SECTION: basic
vim.opt.clipboard:append("unnamedplus")










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 = 2
vim.o.signcolumn = "yes"
vim.o.spell = true
vim.o.spelllang = "en"
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 = false
vim.o.writebackup = false


-- SECTION: lazyConfigs
require('lz.n').load({{"cheatsheet-nvim",["after"] = function()
  
  require("cheatsheet").setup({})
  
end
,["before"] = function()
  require('lz.n').trigger_load('telescope')
end
,["cmd"] = {"Cheatsheet","CheatsheetEdit"}},{"cmp-buffer",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-buffer')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"cmp-luasnip",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-luasnip')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"cmp-nvim-lsp",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-nvim-lsp')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"cmp-path",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-path')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"cmp-treesitter",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-treesitter')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"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}}},{"copilot-cmp",["after"] = function()
  
  
  local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/copilot-cmp')
require("rtp_nvim").source_after_plugin_dir(path)

end
,["lazy"] = true},{"copilot-lua",["after"] = function()
  
  require("copilot").setup({["copilot_node_command"] = "/nix/store/ib8pmf37s9nb8gdbv8a71rhp3wgz83k3-nodejs-slim-22.14.0/bin/node",["panel"] = {["enabled"] = false,["keymap"] = {["accept"] = false,["jump_next"] = false,["jump_prev"] = false,["open"] = false,["refresh"] = false},["layout"] = {["position"] = "bottom",["ratio"] = 0.400000}},["suggestion"] = {["enabled"] = false,["keymap"] = {["accept"] = false,["accept_line"] = false,["accept_word"] = false,["dismiss"] = false,["next"] = false,["prev"] = false}}})
  require('copilot_cmp').setup()
end
,["cmd"] = {"Copilot","CopilotAuth","CopilotDetach","CopilotPanel","CopilotStop"},["event"] = {{["event"] = "User",["pattern"] = "LazyFile"}},["keys"] = {{"<CR>",function()
  local s, _ = pcall(require("copilot.panel").accept)

  if not s then
    local termcode = vim.api.nvim_replace_termcodes("<CR>", true, false, true)

    vim.fn.feedkeys(termcode, 'n')
  end
end
,["desc"] = "[copilot] Accept suggestion",["expr"] = false,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"]]",function()
  local s, _ = pcall(require("copilot.panel").jump_next)

  if not s then
    local termcode = vim.api.nvim_replace_termcodes("]]", true, false, true)

    vim.fn.feedkeys(termcode, 'n')
  end
end
,["desc"] = "[copilot] Next panel suggestion",["expr"] = false,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"[[",function()
  local s, _ = pcall(require("copilot.panel").jump_prev)

  if not s then
    local termcode = vim.api.nvim_replace_termcodes("[[", true, false, true)

    vim.fn.feedkeys(termcode, 'n')
  end
end
,["desc"] = "[copilot] Previous panel suggestion",["expr"] = false,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gr",function()
  local s, _ = pcall(require("copilot.panel").refresh)

  if not s then
    local termcode = vim.api.nvim_replace_termcodes("gr", true, false, true)

    vim.fn.feedkeys(termcode, 'n')
  end
end
,["desc"] = "[copilot] Refresh suggestion",["expr"] = false,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<M-CR>",function()
  local s, _ = pcall(function() require("copilot.panel").open({ position = "bottom", ratio = 0.400000, }) end
)

  if not s then
    local termcode = vim.api.nvim_replace_termcodes("<M-CR>", true, false, true)

    vim.fn.feedkeys(termcode, 'n')
  end
end
,["desc"] = "[copilot] Open Panel",["expr"] = false,["mode"] = {"n"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<M-l>",function() require('copilot.suggestion').accept() end,["desc"] = "[copilot] Accept suggestion",["expr"] = false,["mode"] = {"i"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<C-]>",function() require('copilot.suggestion').dismiss() end,["desc"] = "[copilot] dismiss suggestion",["expr"] = false,["mode"] = {"i"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<M-]>",function() require('copilot.suggestion').next() end,["desc"] = "[copilot] next suggestion",["expr"] = false,["mode"] = {"i"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<M-[>",function() require('copilot.suggestion').prev() end,["desc"] = "[copilot] previous suggestion",["expr"] = false,["mode"] = {"i"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}},{"diffview-nvim",["after"] = function()
  
  require("diffview").setup({})
  
end
,["cmd"] = {"DiffviewClose","DiffviewFileHistory","DiffviewFocusFiles","DiffviewLog","DiffviewOpen","DiffviewRefresh","DiffviewToggleFiles"}},{"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"},{"gitlinker-nvim",["after"] = function()
  
  require("gitlinker").setup({})
  
end
,["cmd"] = {"GitLink"}},{"icon-picker-nvim",["after"] = function()
  
  require("icon-picker").setup({["disable_legacy_commands"] = true})
  
end
,["cmd"] = {"IconPickerInsert","IconPickerNormal","IconPickerYank"}},{"leap-nvim",["after"] = function()
  
  
  require('leap').opts = {
  max_phase_one_targets = nil,
  highlight_unlabeled_phase_one_targets = false,
  max_highlighted_traversal_targets = 10,
  case_sensitive = false,
  equivalence_classes = { ' \t\r\n', },
  substitute_chars = {},
  safe_labels = {
    "s", "f", "n", "u", "t", "/",
    "S", "F", "N", "L", "H", "M", "U", "G", "T", "?", "Z"
  },
  labels = {
    "s", "f", "n",
    "j", "k", "l", "h", "o", "d", "w", "e", "m", "b",
    "u", "y", "v", "r", "g", "t", "c", "x", "/", "z",
    "S", "F", "N",
    "J", "K", "L", "H", "O", "D", "W", "E", "M", "B",
    "U", "Y", "V", "R", "G", "T", "C", "X", "?", "Z"
  },
  special_keys = {
    repeat_search = '<enter>',
    next_phase_one_target = '<enter>',
    next_target = {'<enter>', ';'},
    prev_target = {'<tab>', ','},
    next_group = '<space>',
    prev_group = '<tab>',
    multi_accept = '<enter>',
    multi_revert = '<backspace>',
  },
}

end
,["keys"] = {{"<leader>ss","<Plug>(leap-forward-to)",["desc"] = "Leap forward to",["expr"] = false,["mode"] = {"n","o","x"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>sS","<Plug>(leap-backward-to)",["desc"] = "Leap backward to",["expr"] = false,["mode"] = {"n","o","x"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>sx","<Plug>(leap-forward-till)",["desc"] = "Leap forward till",["expr"] = false,["mode"] = {"n","o","x"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<leader>sX","<Plug>(leap-backward-till)",["desc"] = "Leap backward till",["expr"] = false,["mode"] = {"n","o","x"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gs","<Plug>(leap-from-window)",["desc"] = "Leap from window",["expr"] = false,["mode"] = {"n","o","x"},["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}},{"luasnip",["after"] = function()
  
  require("luasnip").setup({["enable_autosnippets"] = false})
  require('luasnip.loaders.from_vscode').lazy_load()
end
,["lazy"] = true},{"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-cmp",["after"] = function()
  
  
  local luasnip = require('luasnip')
local cmp = require("cmp")

local kinds = require("cmp.types").lsp.CompletionItemKind
local deprio = function(kind)
  return function(e1, e2)
    if e1:get_kind() == kind then
      return false
    end
    if e2:get_kind() == kind then
      return true
    end
    return nil
  end
end

cmp.setup({["completion"] = {["completeopt"] = "menu,menuone,noinsert"},["formatting"] = {["format"] = function(entry, vim_item)
  vim_item.menu = ({["copilot"] = "[Copilot]",["luasnip"] = "[LuaSnip]",["nvim_lsp"] = "[LSP]",["treesitter"] = "[Treesitter]"})[entry.source.name]
  return vim_item
end
},["mapping"] = {["<C-Space>"] = cmp.mapping.complete(),["<C-d>"] = cmp.mapping.scroll_docs(-4),["<C-e>"] = cmp.mapping.abort(),["<C-f>"] = cmp.mapping.scroll_docs(4),["<CR>"] = cmp.mapping.confirm({ select = true }),["<S-Tab>"] = cmp.mapping(function(fallback)
  if cmp.visible() then
    cmp.select_prev_item()
    elseif luasnip.locally_jumpable(-1) then
  luasnip.jump(-1)

  else
    fallback()
  end
end)
,["<Tab>"] = cmp.mapping(function(fallback)
  local has_words_before = function()
    local line, col = unpack(vim.api.nvim_win_get_cursor(0))
    return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
  end

  if cmp.visible() then
    cmp.select_next_item()
    elseif luasnip.locally_jumpable(1) then
  luasnip.jump(1)

  elseif has_words_before() then
    cmp.complete()
  else
    fallback()
  end
end)
},["sorting"] = {["comparators"] = {deprio(kinds.Text),deprio(kinds.Snippet),cmp.config.compare.offset,cmp.config.compare.exact,cmp.config.compare.score,cmp.config.compare.kind,cmp.config.compare.length,cmp.config.compare.sort_text}},["sources"] = {{["name"] = "copilot"},{["name"] = "luasnip"},{["name"] = "nvim_lsp"},{["name"] = "treesitter"}},["window"] = {["completion"] = {["border"] = "rounded"},["documentation"] = {["border"] = "rounded"}}})

require('lz.n').trigger_load("cmp-luasnip")
require('lz.n').trigger_load("cmp-buffer")
require('lz.n').trigger_load("cmp-path")
require('lz.n').trigger_load("copilot-cmp")
require('lz.n').trigger_load("cmp-treesitter")
require('lz.n').trigger_load("cmp-nvim-lsp")

end
,["event"] = {"InsertEnter","CmdlineEnter"}},{"nvim-surround",["after"] = function()
  
  require("nvim-surround").setup({["keymaps"] = {["change"] = "gzr",["change_line"] = "gZR",["delete"] = "gzd",["insert"] = "<C-g>z",["insert_line"] = "<C-g>Z",["normal"] = "gz",["normal_cur"] = "gZ",["normal_cur_line"] = "gZZ",["normal_line"] = "gzz",["visual"] = "gz",["visual_line"] = "gZ"}})
  
end
,["event"] = {"BufReadPre","BufNewFile"},["keys"] = {{"<C-g>z",["expr"] = false,["mode"] = "i",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"<C-g>Z",["expr"] = false,["mode"] = "i",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gz",["expr"] = false,["mode"] = "x",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gZ",["expr"] = false,["mode"] = "x",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gz",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gZ",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gzz",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gZZ",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gzd",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gzr",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false},{"gZR",["expr"] = false,["mode"] = "n",["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false}}},{"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')
telescope.load_extension('projects')

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},{"<leader>fp","<cmd>Telescope projects<CR>",["desc"] = "Find projects [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: autopairs
require('nvim-autopairs').setup({})


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

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()
        
              vim.lsp.buf.format({
                bufnr = bufnr,
              })
        
      end,
    })
  end
end


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

local capabilities = vim.lsp.protocol.make_client_capabilities()
-- HACK: copied from cmp-nvim-lsp. If we ever lazy load lspconfig we
-- should re-evaluate whether we can just use `default_capabilities`
capabilities = {
  textDocument = {
    completion = {
      dynamicRegistration = false,
      completionItem = {
        snippetSupport = true,
        commitCharactersSupport = true,
        deprecatedSupport = true,
        preselectSupport = true,
        tagSupport = {
          valueSet = {
            1, -- Deprecated
          }
        },
        insertReplaceSupport = true,
        resolveSupport = {
          properties = {
            "documentation",
            "detail",
            "additionalTextEdits",
            "sortText",
            "filterText",
            "insertText",
            "textEdit",
            "insertTextFormat",
            "insertTextMode",
          },
        },
        insertTextModeSupport = {
          valueSet = {
            1, -- asIs
            2, -- adjustIndentation
          }
        },
        labelDetailsSupport = true,
      },
      contextSupport = true,
      insertTextMode = 1,
      completionList = {
        itemDefaults = {
          'commitCharacters',
          'editRange',
          'insertTextFormat',
          'insertTextMode',
          'data',
        }
      }
    },
  },
}





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

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



-- 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/lksd9rqdydlm486bihrgk4yh44f03l62-clang-tools-19.1.7/bin/clangd" };
  
}


-- 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/jvp2j7xmnj3fa1b1cjf4drqaiwwnq94a-deno-2.2.8/bin/deno"},["prettier"] = {["command"] = "/nix/store/q8pacnp434vblp7vh5b769fxdismk2qj-prettier-3.5.3/bin/prettier"}},["formatters_by_ft"] = {["markdown"] = {"deno_fmt"},["python"] = {"black"},["typescript"] = {"prettier"},["typescriptreact"] = {"prettier"}}})


-- SECTION: cursorline
require("cinnamon").setup({["keymaps"] = {["basic"] = false,["extra"] = false},["options"] = {["count_only"] = false,["mode"] = "cursor"}})


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


-- SECTION: fastaction
require('fastaction').setup({["popup"] = {["border"] = "rounded"},["register_ui_select"] = true})

-- SECTION: git-conflict
require('git-conflict').setup({["default_mappings"] = false})


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


-- SECTION: highlight-undo
require("highlight-undo").setup({["duration"] = 500})


-- SECTION: hop-nvim
require('hop').setup()


-- SECTION: html-autotag
require('nvim-ts-autotag').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: lsp-signature
-- Enable lsp signature viewer
require("lsp_signature").setup({["bind"] = true,["handler_opts"] = {["border"] = "rounded"}})


-- 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"] = {"",""},["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
  }
}
}}}


-- SECTION: markdown-lsp
lspconfig.marksman.setup{
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/fxkkz8fpk6hsjqi9zzag9v82z0nzmmj3-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.nil_ls.setup{
  capabilities = capabilities,
on_attach = default_on_attach,
  cmd = {"/nix/store/fbp9jsyga1kyhxrzrkxlfssd03wgfxyp-nil-2024-08-06/bin/nil"},
settings = {
  ["nil"] = {
formatting = {
  command = {"/nix/store/f8k0rnww886kk4vmr3qrsqqx2dpmv92v-alejandra-4.0.0/bin/alejandra", "--quiet"},
},


  },
},

}


-- 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"] = true,["vim.lsp.util.convert_input_to_markdown_lines"] = true,["vim.lsp.util.stylize_markdown"] = true},["signature"] = {["enabled"] = false}},["presets"] = {["bottom_search"] = true,["command_palette"] = true,["inc_rename"] = false,["long_message_to_split"] = true,["lsp_doc_border"] = true},["routes"] = {{["filter"] = {["event"] = "msg_show",["find"] = "written",["kind"] = ""},["opts"] = {["skip"] = true}}}})


-- SECTION: nvim-cursorline
require("nvim-cursorline").setup({["cursorline"] = {["enable"] = false,["number"] = false,["timeout"] = 1000},["cursorword"] = {["enable"] = false,["hl"] = {["underline"] = true},["min_length"] = 3,["timeout"] = 1000}})


-- 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 = {["markdown"] = {"markdownlint-cli2"},["nix"] = {"statix","deadnix"},["typescript"] = {"eslint_d"},["typescriptreact"] = {"eslint_d"}}

local linters = require("lint").linters
local nvf_linters = {["deadnix"] = {["cmd"] = "/nix/store/mg0w4wn0dcxz9a4asgnr3nq4v0jmka9s-deadnix-1.2.1/bin/deadnix"},["eslint_d"] = {["cmd"] = "/nix/store/6ywk0iip009ljw0v6cb7174fan3qhazk-eslint_d-14.3.0/bin/eslint_d",["required_files"] = {"eslint.config.js","eslint.config.mjs",".eslintrc",".eslintrc.json",".eslintrc.js",".eslintrc.yml"}},["markdownlint-cli2"] = {["cmd"] = "/nix/store/q18k1wfldz6wlrxdyvc1zvlfcsxgzg62-markdownlint-cli2-0.17.2/bin/markdownlint-cli2"},["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

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-notify
local notify = require("notify")
notify.setup({["background_colour"] = "NotifyBackground",["icons"] = {["DEBUG"] = "๏†ˆ",["ERROR"] = "๏—",["INFO"] = "๏š",["TRACE"] = "๏…Œ",["WARN"] = "๏ฑ"},["position"] = "top_right",["render"] = "compact",["stages"] = "fade_in_slide_out",["timeout"] = 1000})
vim.notify = notify.notify


-- 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"] = "underline"},["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"] = "thin",["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: project-nvim
require('project_nvim').setup({["detection_methods"] = {"lsp","pattern"},["exclude_dirs"] = {},["lsp_ignored"] = {},["manual_mode"] = true,["patterns"] = {".git","_darcs",".hg",".bzr",".svn","Makefile","package.json","flake.nix","cargo.toml"},["scope_chdir"] = "global",["show_hidden"] = false,["silent_chdir"] = true})


-- SECTION: python-debugger
dap.adapters.debugpy = function(cb, config)
  if config.request == 'attach' then
    ---@diagnostic disable-next-line: undefined-field
    local port = (config.connect or config).port
    ---@diagnostic disable-next-line: undefined-field
    local host = (config.connect or config).host or '127.0.0.1'
    cb({
      type = 'server',
      port = assert(port, '`connect.port` is required for a python `attach` configuration'),
      host = host,
      options = {
        source_filetype = 'python',
      },
    })
  else
    cb({
      type = 'executable',
      command = '/nix/store/qzx03byphidxhxssn1a33i8qjmqygivk-python3-3.12.9-env/bin/python3.12',
      args = { '-m', 'debugpy.adapter' },
      options = {
        source_filetype = 'python',
      },
    })
  end
end

dap.configurations.debugpy = {
  {
    -- The first three options are required by nvim-dap
    type = 'debugpy'; -- the type here established the link to the adapter definition: `dap.adapters.debugpy`
    request = 'launch';
    name = "Launch file";

    -- Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options

    program = "${file}"; -- This configuration will launch the current file if used.
    pythonPath = function()
      -- debugpy supports launching an application with a different interpreter then the one used to launch debugpy itself.
      -- The code below looks for a `venv` or `.venv` folder in the current directly and uses the python within.
      -- You could adapt this - to for example use the `VIRTUAL_ENV` environment variable.
      local cwd = vim.fn.getcwd()
      if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then
        return cwd .. '/venv/bin/python'
      elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then
        return cwd .. '/.venv/bin/python'
      elseif vim.fn.executable("python") == 1 then
        return vim.fn.exepath("python")
      else -- WARNING cfg.dap.package probably has NO libraries other than builtins and debugpy
        return '/nix/store/qzx03byphidxhxssn1a33i8qjmqygivk-python3-3.12.9-env/bin/python3.12'
      end
    end;
  },
}


-- SECTION: python-lsp
lspconfig.pyright.setup{
  capabilities = capabilities;
  on_attach = default_on_attach;
  cmd = {"/nix/store/i0zi018agv61nb0smyxa54xbzg881g7v-pyright-1.1.396/bin/pyright-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: treesitter-context
require("treesitter-context").setup({["line_numbers"] = true,["max_lines"] = 0,["min_window_height"] = 0,["mode"] = "cursor",["multiline_threshold"] = 20,["separator"] = "-",["trim_scope"] = "outer",["zindex"] = 20})


-- 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/lcpd2bbb0bvxlhm7j7plmbzs73mzgig9-typescript-language-server-4.3.3/bin/typescript-language-server", "--stdio"}
}


-- 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>s', desc = '+Leap' },{ '<leader>x', desc = '+Trouble' }})


-- SECTION: zig-lsp
lspconfig.zls.setup {
  capabilities = capabilities,
  on_attach = default_on_attach,
  cmd = {'/nix/store/5k61hv3sv316gp0rnd7h4xn87m2g24mm-zls-0.14.0/bin/zls'}
}




-- 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: 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>c0", "<Plug>(git-conflict-none)", {["desc"] = "Choose None [Git-Conflict]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>cb", "<Plug>(git-conflict-both)", {["desc"] = "Choose Both [Git-Conflict]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>co", "<Plug>(git-conflict-ours)", {["desc"] = "Choose Ours [Git-Conflict]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>ct", "<Plug>(git-conflict-theirs)", {["desc"] = "Choose Theirs [Git-Conflict]",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>h", "<cmd> HopPattern<CR>", {["desc"] = "Jump to occurrences [hop.nvim]",["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"}, "[x", "<Plug>(git-conflict-next-conflict)", {["desc"] = "Go to the next Conflict [Git-Conflict]",["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.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"}, "]x", "<Plug>(git-conflict-prev-conflict)", {["desc"] = "Go to the previous Conflict [Git-Conflict]",["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({"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})
vim.keymap.set({"n"}, "<F5>", ":lua require\"dap\".continue()<CR>", {["desc"] = "Start / Continue Debug",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"i"}, "jk", "<ESC>", {["desc"] = "Exit insert mode",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>nh", ":nohl<CR>", {["desc"] = "Clear search highlights",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>ff", "<cmd>Telescope find_files<cr>", {["desc"] = "Search files by name",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>lg", "<cmd>Telescope live_grep<cr>", {["desc"] = "Search files by contents",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"n"}, "<leader>fe", "<cmd>Neotree toggle<cr>", {["desc"] = "File browser toggle",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"i"}, "<C-h>", "<Left>", {["desc"] = "Move left in insert mode",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"i"}, "<C-j>", "<Down>", {["desc"] = "Move down in insert mode",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"i"}, "<C-k>", "<Up>", {["desc"] = "Move up in insert mode",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})
vim.keymap.set({"i"}, "<C-l>", "<Right>", {["desc"] = "Move right in insert mode",["expr"] = false,["noremap"] = true,["nowait"] = false,["script"] = false,["silent"] = true,["unique"] = false})


-- SECTION: spellcheck
-- Disable spellchecking for certain filetypes
-- as configured by `vim.spellcheck.ignoredFiletypes`
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
vim.api.nvim_create_autocmd({ "FileType" }, {
  group = "nvf_autocmds",
  pattern = { "toggleterm" },
  callback = function()
    vim.opt_local.spell = false
  end,
})

cristids avatar Apr 23 '25 06:04 cristids

CC @howird on this.

I don't have Python DAP set up, but my guess is we're trying to access dap.adapters.python somewhere after https://github.com/NotAShelf/nvf/pull/841

NotAShelf avatar Apr 23 '25 12:04 NotAShelf

Hi @cristids , is there possibly a .vscode/launch.json file in the codebase that you're debugging? If so, then it could be that you configured it to "type": "python", and it should be changed to "type": "debugpy" as seen here. Otherwise, could I take a look at your nvf config?

howird avatar Apr 23 '25 13:04 howird

No, just tested with a new folder and a simple hello world My whole config is at https://github.com/cristids/nixos-config . The nvf file is in modules/home/hom-manager-modules/nvf.nix :

`{ config, pkgs, nvf, ... }: { imports = [ nvf.homeManagerModules.default ];

programs.nvf = { enable = true;

settings.vim = {
  vimAlias = true;
  viAlias = true;
  withNodeJs = true;
  useSystemClipboard = true;

  theme = {
    enable = true;
    name = "catppuccin";
    style = "mocha";
    transparent = false;
  };

  options = {
    tabstop = 2;
    shiftwidth = 2;
    wrap = false;
  };


  keymaps = [
    {
      key = "<F5>";
      mode = ["n"];
      action = ":lua require\"dap\".continue()<CR>";
      desc = "Start / Continue Debug";
    }
    {
      key = "jk";
      mode = ["i"];
      action = "<ESC>";
      desc = "Exit insert mode";
    }
    {
      key = "<leader>nh";
      mode = ["n"];
      action = ":nohl<CR>";
      desc = "Clear search highlights";
    }
    {
      key = "<leader>ff";
      mode = ["n"];
      action = "<cmd>Telescope find_files<cr>";
      desc = "Search files by name";
    }
    {
      key = "<leader>lg";
      mode = ["n"];
      action = "<cmd>Telescope live_grep<cr>";
      desc = "Search files by contents";
    }
    {
      key = "<leader>fe";
      mode = ["n"];
      action = "<cmd>Neotree toggle<cr>";
      desc = "File browser toggle";
    }
    {
      key = "<C-h>";
      mode = ["i"];
      action = "<Left>";
      desc = "Move left in insert mode";
    }
    {
      key = "<C-j>";
      mode = ["i"];
      action = "<Down>";
      desc = "Move down in insert mode";
    }
    {
      key = "<C-k>";
      mode = ["i"];
      action = "<Up>";
      desc = "Move up in insert mode";
    }
    {
      key = "<C-l>";
      mode = ["i"];
      action = "<Right>";
      desc = "Move right in insert mode";
    }
  ];

  telescope.enable = true;

  spellcheck = {
    enable = true;
  };

  lsp = {
    formatOnSave = true;
    lspkind.enable = false;
    lightbulb.enable = true;
    lspsaga.enable = false;
    trouble.enable = true;
    lspSignature.enable = true;
    otter-nvim.enable = false;
    # lsplines.enable = false;
    nvim-docs-view.enable = false;
  };

  languages = {
    enableLSP = true;
    enableFormat = true;
    enableTreesitter = true;
    enableExtraDiagnostics = true;

    nix.enable = true;
    clang.enable = true;
    zig.enable = true;
    python = {
      enable = true;
      dap.enable = true;
      dap.debugger = "debugpy";
      format.enable = true;
      lsp.enable = true;
      lsp.server = "pyright";
      treesitter.enable = true;
    };

    markdown.enable = true;
    ts.enable = true;
    html.enable = true;
  };

  visuals = {
    nvim-web-devicons.enable = true;
    nvim-cursorline.enable = true;
    cinnamon-nvim.enable = true;
    fidget-nvim.enable = true;

    highlight-undo.enable = true;
    indent-blankline.enable = true;
  };

  statusline = {
    lualine = {
      enable = true;
      theme = "catppuccin";
    };
  };

  autopairs.nvim-autopairs.enable = true;

  autocomplete.nvim-cmp.enable = true;
  snippets.luasnip.enable = true;

  tabline = {
    nvimBufferline.enable = true;
  };

  treesitter.context.enable = true;

  binds = {
    whichKey.enable = true;
    cheatsheet.enable = true;
  };

  git = {
    enable = true;
    gitsigns.enable = true;
    gitsigns.codeActions.enable = false; # throws an annoying debug message
  };

  projects.project-nvim.enable = true;
  dashboard.dashboard-nvim.enable = true;

  filetree.neo-tree.enable = true;

  notify = {
    nvim-notify.enable = true;
    # nvim-notify.setupOpts.background_colour = "#${config.lib.stylix.colors.base01}";
  };

  utility = {
    ccc.enable = false;
    vim-wakatime.enable = false;
    icon-picker.enable = true;
    surround.enable = true;
    diffview-nvim.enable = true;
    motion = {
      hop.enable = true;
      leap.enable = true;
      precognition.enable = false;
    };

    images = {
      image-nvim.enable = false;
    };
  };

  ui = {
    borders.enable = true;
    noice.enable = true;
    colorizer.enable = true;
    illuminate.enable = true;
    breadcrumbs = {
      enable = false;
      navbuddy.enable = false;
    };
    smartcolumn = {
      enable = false;
    };
    fastaction.enable = true;
  };
  assistant = {
    chatgpt.enable = false;
    copilot = {
      enable = true;
      cmp.enable = true;
    };
    codecompanion-nvim.enable = false;
  };

  session = {
    nvim-session-manager.enable = false;
  };

  comments = {
    comment-nvim.enable = true;
  };
};

}; } `

cristids avatar Apr 23 '25 16:04 cristids

could you try adding programs.nvf.settings.vim.languages.enableDAP = true;?

howird avatar Apr 23 '25 18:04 howird

Tried, same error.

  languages = {
    enableLSP = true;
    enableFormat = true;
    enableTreesitter = true;
    enableExtraDiagnostics = true;
    enableDAP = true;

    nix.enable = true;
    clang.enable = true;
    zig.enable = true;
    python = {
      enable = true;
      dap.enable = true;
      dap.debugger = "debugpy";
      format.enable = true;
      lsp.enable = true;
      lsp.server = "pyright";
      treesitter.enable = true;
    };

    markdown.enable = true;
    ts.enable = true;
    html.enable = true;
  };

cristids avatar Apr 23 '25 18:04 cristids

I found the regression, see this PR if you could test it by changing your flake to: nvf.url = "github:howird/nvf"; that would be appreciated. I've tested on my own machine and it works now

howird avatar Apr 23 '25 19:04 howird

I confirm that it works with this branch: nvf.url = "github:howird/nvf"; but upon starting debug the output window has not opened automatically. Probably this is by design. I also can confirm that adding a .vscode/launch.json like the one below works perfect with nvf.url = "github:notashelf/nvf"; and also showing a menu with launch options and showing the output terminal automaticaly. I only wonder why .vscode ? The same launch.json did not work on root of the project.

{ "configurations": [ { "name": "Python Debugger: Current File (Integrated Terminal)", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal" }, { "name": "Python Debugger: Current File (External Terminal)", "type": "debugpy", "request": "launch", "program": "${file}", "console": "externalTerminal" } ] }

Thanks for all your help.

cristids avatar Apr 23 '25 19:04 cristids

No prob, thanks for testing it. If you use dap-ui (vim.debugger.nvim-dap.ui.enable = true;) it should start automatically when you connect by default, you can turn it off with vim.debugger.nvim-dap.ui.autoStart. Yea i guess it was a standard created by vscode that other daps picked up on since so many people use vscode.

howird avatar Apr 23 '25 19:04 howird

FYI the PR was merged to main so you can swap back to this repo in your flake and close the issue.

howird avatar Apr 23 '25 20:04 howird