diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua index 9e6ecfa..b95075c 100644 --- a/lua/core/default_config.lua +++ b/lua/core/default_config.lua @@ -35,10 +35,18 @@ M.ui = { -- default/round/block/arrow separators work only for default statusline theme -- round and block will work for minimal theme only separator_style = "default", - overriden_modules = nil, + overriden_modules = function(modules) + modules[1] = (function() + local noice = require("noice") + if noice.api.statusline.mode.has() then + return "%#St_CommandMode#" .. noice.api.statusline.mode.get() .. modules[1] + end + return modules[1] + end)() + end, fileInfo = function() return require("nvchad_ui.statusline.default.fileInfo").run() - end + end, }, -- lazyload it when there are 1+ buffers diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua index efcbe00..473a4af 100644 --- a/lua/core/mappings.lua +++ b/lua/core/mappings.lua @@ -59,19 +59,19 @@ M.general = { -- ["y"] = {" :w! /tmp/vimtmp", "Save into a global tmp file"}, -- ["p"] = {" :r! cat /tmp/vimtmp", "Restore from the global tmp file"}, - ["dgg"] = {":lua require('dap').continue() ", "Continue debu[g]ging"}, - ["dg"] = {":lua require('dapui').toggle() ", "Toggle DAP ui"}, - ["dgw"] = {":lua require('dapui').eval() ", "Open floating windows about current [w]ord"}, - ["dgb"] = {":lua require('dap').toggle_breakpoint() ", "Toggle [b]reakpoint"}, - ["dgf"] = {":lua require('dap-python').test_method() ", "Debug [f]unction"}, - ["dgo"] = {":lua require('dap').step_over() ", "DAP step [o]ver method"}, - ["dgt"] = {":lua require('dap').step_into() ", "DAP step in[t]o method"}, - ["dgp"] = {":lua require('dap').step_back() ", "DAP step back ([p]revious)"}, + ["dgg"] = { ":lua require('dap').continue() ", "Continue debu[g]ging" }, + ["dg"] = { ":lua require('dapui').toggle() ", "Toggle DAP ui" }, + ["dgw"] = { ":lua require('dapui').eval() ", "Open floating windows about current [w]ord" }, + ["dgb"] = { ":lua require('dap').toggle_breakpoint() ", "Toggle [b]reakpoint" }, + ["dgf"] = { ":lua require('dap-python').test_method() ", "Debug [f]unction" }, + ["dgo"] = { ":lua require('dap').step_over() ", "DAP step [o]ver method" }, + ["dgt"] = { ":lua require('dap').step_into() ", "DAP step in[t]o method" }, + ["dgp"] = { ":lua require('dap').step_back() ", "DAP step back ([p]revious)" }, ["dgs"] = { function() - local widgets = require("dap.ui.widgets") + local widgets = require "dap.ui.widgets" local sidebar = widgets.sidebar(widgets.scopes) - sidebar.open({widgth = '50%'}) + sidebar.open { widgth = "50%" } end, "DAP Show debugged [s]copes", }, @@ -98,8 +98,8 @@ M.general = { ["<"] = { ""] = { ">gv", "Indent line" }, - ["dgd"] = {":lua require('dap-python').debug_selection()", "DAP debug selection"}, - ["dgw"] = {":lua require('dap-python').eval()", "DAP eval selection"}, + ["dgd"] = { ":lua require('dap-python').debug_selection()", "DAP debug selection" }, + ["dgw"] = { ":lua require('dap-python').eval()", "DAP eval selection" }, }, x = { @@ -150,7 +150,10 @@ M.customstuffs = { -- "trim(system('git branch --show-current 2>/dev/null'))" -- ["ct"] = { ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO-' . trim(system('git branch --show-current 2>/dev/null')) . ': ' . input('Comment >'))", "Add TODO comment + add to qflist" }, - ["ct"] = { ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO: ' . input('Comment >'))", "Add TODO comment + add to qflist" }, + ["ct"] = { + ":call append(line('.') - 1, repeat(' ', indent('.')) . '# TODO: ' . input('Comment >'))", + "Add TODO comment + add to qflist", + }, ["ww"] = { ":lua require('nvim-window').pick()", "Pick window to goto" }, ["wm"] = { ":WinShift", "Enter move window mode" }, @@ -169,29 +172,28 @@ M.customstuffs = { ["glO"] = { ":lua require('gitlab').create_mr()", "Gitlab: create MR" }, ["glaa"] = { ":lua require('gitlab').add_assignee()", "Gitlab: add_assignee" }, --- vim.keymap.set("n", "glb", gitlab.choose_merge_request) --- vim.keymap.set("n", "glr", gitlab.review) --- vim.keymap.set("n", "gls", gitlab.summary) --- vim.keymap.set("n", "glA", gitlab.approve) --- vim.keymap.set("n", "glR", gitlab.revoke) --- vim.keymap.set("n", "glc", gitlab.create_comment) --- vim.keymap.set("v", "glc", gitlab.create_multiline_comment) --- vim.keymap.set("v", "glC", gitlab.create_comment_suggestion) --- vim.keymap.set("n", "glO", gitlab.create_mr) --- vim.keymap.set("n", "glm", gitlab.move_to_discussion_tree_from_diagnostic) --- vim.keymap.set("n", "gln", gitlab.create_note) --- vim.keymap.set("n", "gld", gitlab.toggle_discussions) --- vim.keymap.set("n", "glaa", gitlab.add_assignee) --- vim.keymap.set("n", "glad", gitlab.delete_assignee) --- vim.keymap.set("n", "glla", gitlab.add_label) --- vim.keymap.set("n", "glld", gitlab.delete_label) --- vim.keymap.set("n", "glra", gitlab.add_reviewer) --- vim.keymap.set("n", "glrd", gitlab.delete_reviewer) --- vim.keymap.set("n", "glp", gitlab.pipeline) --- vim.keymap.set("n", "glM", gitlab.merge) --- vim.keymap.set("n", "glu", gitlab.copy_mr_url) --- vim.keymap.set("n", "glP", gitlab.publish_all_drafts) - + -- vim.keymap.set("n", "glb", gitlab.choose_merge_request) + -- vim.keymap.set("n", "glr", gitlab.review) + -- vim.keymap.set("n", "gls", gitlab.summary) + -- vim.keymap.set("n", "glA", gitlab.approve) + -- vim.keymap.set("n", "glR", gitlab.revoke) + -- vim.keymap.set("n", "glc", gitlab.create_comment) + -- vim.keymap.set("v", "glc", gitlab.create_multiline_comment) + -- vim.keymap.set("v", "glC", gitlab.create_comment_suggestion) + -- vim.keymap.set("n", "glO", gitlab.create_mr) + -- vim.keymap.set("n", "glm", gitlab.move_to_discussion_tree_from_diagnostic) + -- vim.keymap.set("n", "gln", gitlab.create_note) + -- vim.keymap.set("n", "gld", gitlab.toggle_discussions) + -- vim.keymap.set("n", "glaa", gitlab.add_assignee) + -- vim.keymap.set("n", "glad", gitlab.delete_assignee) + -- vim.keymap.set("n", "glla", gitlab.add_label) + -- vim.keymap.set("n", "glld", gitlab.delete_label) + -- vim.keymap.set("n", "glra", gitlab.add_reviewer) + -- vim.keymap.set("n", "glrd", gitlab.delete_reviewer) + -- vim.keymap.set("n", "glp", gitlab.pipeline) + -- vim.keymap.set("n", "glM", gitlab.merge) + -- vim.keymap.set("n", "glu", gitlab.copy_mr_url) + -- vim.keymap.set("n", "glP", gitlab.publish_all_drafts) }, v = { ["n"] = { "nzz", "Next + auto center" }, @@ -402,26 +404,50 @@ M.telescope = { n = { -- Resume [""] = { " Telescope resume ", "Resume" }, + [""] = { " Telescope keymaps ", "Show (and search) all [k]eymaps" }, -- find [""] = { " Telescope find_files ", "Find files" }, [""] = { " Telescope find_files follow=true no_ignore=true hidden=true ", "Find all" }, [""] = { " Telescope live_grep ", "Live grep" }, [""] = { " Telescope buffers ", "Find buffers" }, - ["ff"] = { " lua require('telescope.builtin').live_grep({default_text='<<<<<<< HEAD'}) ", "Search for git conflicts" }, + ["ff"] = { + " lua require('telescope.builtin').live_grep({default_text='<<<<<<< HEAD'}) ", + "Search for git conflicts", + }, ["fg"] = { " lua require('telescope.builtin').live_grep({}) ", "Live grep" }, - ["fg/"] = { " lua require('telescope.builtin').live_grep({default_text=vim.fn.getreg('/')}) ", "Live grep with search term" }, - ["fgw"] = { " lua require('telescope.builtin').live_grep({default_text=vim.fn.expand('')}) ", "Live grep with current word" }, + ["fg/"] = { + " lua require('telescope.builtin').live_grep({default_text=vim.fn.getreg('/')}) ", + "Live grep with search term", + }, + ["fgw"] = { + " lua require('telescope.builtin').live_grep({default_text=vim.fn.expand('')}) ", + "Live grep with current word", + }, ["gf"] = { " lua require('telescope.builtin').find_files({}) ", "Find files" }, - ["gf/"] = { " lua require('telescope.builtin').find_files({default_text=vim.fn.getreg('/')}) ", "Find files with search term" }, - ["gfw"] = { " lua require('telescope.builtin').find_files({default_text=vim.fn.expand('')}) ", "Find files with current word" }, + ["gf/"] = { + " lua require('telescope.builtin').find_files({default_text=vim.fn.getreg('/')}) ", + "Find files with search term", + }, + ["gfw"] = { + " lua require('telescope.builtin').find_files({default_text=vim.fn.expand('')}) ", + "Find files with current word", + }, - - ["br"] = { ":execute '%s/' . input('Search term >') . '/' . input('Replace by >', '') . '/g | update' ", "Replace pattern in current buffer" }, - ["br/"] = { ":execute '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >', '') . '/g | update' ", "Replace search term pattern in current buffer" }, - ["brw"] = { ":execute '%s/' . input('Search term >', expand('')) . '/' . input('Replace by >', '') . '/g | update' ", "Replace current word pattern in current buffer" }, + ["br"] = { + ":execute '%s/' . input('Search term >') . '/' . input('Replace by >', '') . '/g | update' ", + "Replace pattern in current buffer", + }, + ["br/"] = { + ":execute '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >', '') . '/g | update' ", + "Replace search term pattern in current buffer", + }, + ["brw"] = { + ":execute '%s/' . input('Search term >', expand('')) . '/' . input('Replace by >', '') . '/g | update' ", + "Replace current word pattern in current buffer", + }, -- Quickfix list ["ql"] = { " Telescope quickfix ", "Show qflist" }, @@ -432,14 +458,32 @@ M.telescope = { ["qc"] = { ":call setqflist([]) | cclose", "Clear qflist" }, -- Quickfix replace all - ["qr"] = { ":execute 'cfdo' '%s/' . input('Search term >') . '/' . input('Replace by >') . '/gI | update' ", "Replace pattern in all qflist" }, - ["qr/"] = { ":execute 'cfdo' '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >') . '/gI | update' ", "Replace search term in all qflist" }, - ["qrw"] = { ":execute 'cfdo' '%s/' . input('Search term >', expand('')) . '/' . input('Replace by >') . '/gI | update' ", "Replace current word in all qflist" }, + ["qr"] = { + ":execute 'cfdo' '%s/' . input('Search term >') . '/' . input('Replace by >') . '/gI | update' ", + "Replace pattern in all qflist", + }, + ["qr/"] = { + ":execute 'cfdo' '%s/' . input('Search term >', getreg('/')) . '/' . input('Replace by >') . '/gI | update' ", + "Replace search term in all qflist", + }, + ["qrw"] = { + ":execute 'cfdo' '%s/' . input('Search term >', expand('')) . '/' . input('Replace by >') . '/gI | update' ", + "Replace current word in all qflist", + }, -- Quickfix "search" - ["qs"] = { ":execute 'vimgrep' '/' . input('Pattern >') . '\\C/' '**/*' ", "Add <> files in qflist" }, - ["qs/"] = { ":execute 'vimgrep' '/' . input('Pattern >', getreg('/')) . '\\C/' '**/*' ", "Add search term files in qflist" }, - ["qsw"] = { ":execute 'vimgrep' '/' . input('Pattern >', expand('')) . '\\C/' '**/*' ", "Add current word files in qflist" }, + ["qs"] = { + ":execute 'vimgrep' '/' . input('Pattern >') . '\\C/' '**/*' ", + "Add <> files in qflist", + }, + ["qs/"] = { + ":execute 'vimgrep' '/' . input('Pattern >', getreg('/')) . '\\C/' '**/*' ", + "Add search term files in qflist", + }, + ["qsw"] = { + ":execute 'vimgrep' '/' . input('Pattern >', expand('')) . '\\C/' '**/*' ", + "Add current word files in qflist", + }, -- Loclist list ["ll"] = { " Telescope loclist ", "Show loclist" }, @@ -452,8 +496,14 @@ M.telescope = { ["fh"] = { " Telescope help_tags ", "Help page" }, ["fo"] = { " Telescope oldfiles ", "Find oldfiles" }, ["fx"] = { " Telescope current_buffer_fuzzy_find ", "Find in current buffer" }, - ["fx/"] = { " lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.getreg('/')}) ", "Fuzzy find in current buffer with actual search" }, - ["fxw"] = { " lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.expand('')}) ", "Fuzzy find in current buffer with current word" }, + ["fx/"] = { + " lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.getreg('/')}) ", + "Fuzzy find in current buffer with actual search", + }, + ["fxw"] = { + " lua require('telescope.builtin').current_buffer_fuzzy_find({default_text=vim.fn.expand('')}) ", + "Fuzzy find in current buffer with current word", + }, ["wl"] = { " Telescope workspaces ", "Find workspaces" }, @@ -482,8 +532,14 @@ M.telescope = { ["/"] = { " Telescope search_history ", "telescope search history" }, -- Diaglist: LSP diagnostics in quick/loc list - ["dw"] = { "lua require('diaglist').open_all_diagnostics()", "Open all open buffers diagnostics in qflist" }, - ["d0"] = { "lua require('diaglist').open_buffer_diagnostics()", "Open current buffer diagnostics in loclist" }, + ["dw"] = { + "lua require('diaglist').open_all_diagnostics()", + "Open all open buffers diagnostics in qflist", + }, + ["d0"] = { + "lua require('diaglist').open_buffer_diagnostics()", + "Open current buffer diagnostics in loclist", + }, [";"] = { " Telescope ", "Open Telescope" }, }, @@ -664,14 +720,14 @@ M.gitsigns = { local all_modes = { -- Override all delete/yank/paste to use the registers M by default - ["y"] = { "\"my", "Yank", { remap=false } }, - ["p"] = { "\"mp", "Paste", { remap=false } }, - ["d"] = { "\"md", "Delete", { remap=false } }, + ["y"] = { '"my', "Yank", { remap = false } }, + ["p"] = { '"mp', "Paste", { remap = false } }, + ["d"] = { '"md', "Delete", { remap = false } }, - ["y"] = { "\"+y", "Yank into system register", { remap=false } }, - ["p"] = { "\"+p", "Paste from system register", { remap=false } }, + ["y"] = { '"+y', "Yank into system register", { remap = false } }, + ["p"] = { '"+p', "Paste from system register", { remap = false } }, } -M.general[{"n", "v"}] = all_modes +M.general[{ "n", "v" }] = all_modes return M diff --git a/lua/custom/configs/lspconfig.lua b/lua/custom/configs/lspconfig.lua index e2338f6..8e85ce9 100644 --- a/lua/custom/configs/lspconfig.lua +++ b/lua/custom/configs/lspconfig.lua @@ -4,6 +4,7 @@ local capabilities = require("plugins.configs.lspconfig").capabilities local lspconfig = require "lspconfig" -- if you just want default config for the servers then put them in a table +-- local servers = { "html", "cssls", "tsserver", "clangd", "salt_ls", "pyright", "jedi_language_server" } local servers = { "html", "cssls", "tsserver", "clangd", "salt_ls" } for _, lsp in ipairs(servers) do @@ -12,6 +13,3 @@ for _, lsp in ipairs(servers) do capabilities = capabilities, } end - --- --- lspconfig.pyright.setup { blabla} diff --git a/lua/custom/configs/null-ls.lua b/lua/custom/configs/null-ls.lua index cfdb3e0..3af634b 100644 --- a/lua/custom/configs/null-ls.lua +++ b/lua/custom/configs/null-ls.lua @@ -1,5 +1,8 @@ local present, null_ls = pcall(require, "null-ls") +if true then + return +end if not present then return end @@ -9,8 +12,8 @@ local b = null_ls.builtins local sources = { -- webdev stuff - b.formatting.deno_fmt, -- choosed deno for ts/js files cuz its very fast! - b.formatting.prettier.with { filetypes = { "html", "markdown", "css" } }, -- so prettier works only on these filetypes + b.formatting.deno_fmt, -- choosed deno for ts/js files cuz its very fast! + b.formatting.prettier.with { filetypes = { "html", "markdown", "css", "js" }, extra_args = { "--tab-width 4" } }, -- so prettier works only on these filetypes -- Lua b.formatting.stylua, diff --git a/lua/plugins/configs/lspconfig.lua b/lua/plugins/configs/lspconfig.lua index 37685e3..6684c8b 100644 --- a/lua/plugins/configs/lspconfig.lua +++ b/lua/plugins/configs/lspconfig.lua @@ -40,6 +40,8 @@ M.capabilities.textDocument.completion.completionItem = { }, } +M.capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 } + require("lspconfig").lua_ls.setup { on_init = M.on_init, on_attach = M.on_attach, @@ -64,4 +66,80 @@ require("lspconfig").lua_ls.setup { }, } +-- local capabilities = vim.lsp.protocol.make_client_capabilities() +-- capabilities.textDocument.publishDiagnostics.tagSupport.valueSet = { 2 } + +require("lspconfig").pyright.setup { + on_init = M.on_init, + on_attach = M.on_attach, + capabilities = M.capabilities, + + settings = { + pyright = { + -- Options available here: https://github.com/microsoft/pyright/blob/main/docs/settings.md + disableOrganizeImports = true, -- Using Ruff + -- disableLanguageServices = true, -- Using Ruff + }, + python = { + analysis = { + -- ignore = { "*" }, -- Using Ruff + -- typeCheckingMode = "off", -- Using mypy + diagnosticSeverityOverrides = { + reportMissingImports = false, + }, + }, + }, + }, +} + +-- -- This can be used for removing message based on regex etc. For now, all those message are disabled by the tagSupport.valueSet +-- local function filter(arr, func) +-- -- Filter in place +-- -- https://stackoverflow.com/questions/49709998/how-to-filter-a-lua-array-inplace +-- local new_index = 1 +-- local size_orig = #arr +-- for old_index, v in ipairs(arr) do +-- if func(v, old_index) then +-- arr[new_index] = v +-- new_index = new_index + 1 +-- end +-- end +-- for i = new_index, size_orig do +-- arr[i] = nil +-- end +-- end +-- +-- local function filter_diagnostics(diagnostic) +-- -- Only filter out Pyright stuff for now +-- if diagnostic.source ~= "Pyright" then +-- return true +-- end +-- +-- -- Allow kwargs to be unused, sometimes you want many functions to take the +-- -- same arguments but you don't use all the arguments in all the functions, +-- -- so kwargs is used to suck up all the extras +-- if diagnostic.message == '"kwargs" is not accessed' then +-- return false +-- end +-- +-- -- Allow variables starting with an underscore +-- if string.match(diagnostic.message, '"_.+" is not accessed') then +-- return false +-- end +-- +-- -- For now, remove all not accessed message. I will still have assigned but not accessed message! +-- if string.match(diagnostic.message, '".+" is not accessed') then +-- return false +-- end +-- +-- return true +-- end +-- +-- local function custom_on_publish_diagnostics(a, params, client_id, c) +-- filter(params.diagnostics, filter_diagnostics) +-- vim.lsp.diagnostic.on_publish_diagnostics(a, params, client_id, c) +-- end +-- +-- vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(custom_on_publish_diagnostics, {}) + return M diff --git a/lua/plugins/configs/ruff_lsp.lua b/lua/plugins/configs/ruff_lsp.lua index 5f4ff20..b3ceaa2 100644 --- a/lua/plugins/configs/ruff_lsp.lua +++ b/lua/plugins/configs/ruff_lsp.lua @@ -1,47 +1,48 @@ -- See: https://github.com/neovim/nvim-lspconfig/tree/54eb2a070a4f389b1be0f98070f81d23e2b1a715#suggested-configuration -local opts = { noremap=true, silent=true } -vim.keymap.set('n', 'k', vim.diagnostic.open_float, opts) -vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) -vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) -vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) +local opts = { noremap = true, silent = true } +vim.keymap.set("n", "k", vim.diagnostic.open_float, opts) +vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) +vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) +-- vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) -- Enable completion triggered by - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions - local bufopts = { noremap=true, silent=true, buffer=bufnr } - vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) - vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) - vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) - vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + local bufopts = { noremap = true, silent = true, buffer = bufnr } + -- vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts) + -- vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts) + -- vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts) + -- vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts) -- vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) - vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) - vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) - vim.keymap.set('n', 'wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, bufopts) + -- vim.keymap.set("n", "wa", vim.lsp.buf.add_workspace_folder, bufopts) + -- vim.keymap.set("n", "wr", vim.lsp.buf.remove_workspace_folder, bufopts) + -- vim.keymap.set("n", "wl", function() + -- print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + -- end, bufopts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) - vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) - vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) - vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) - vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) + -- vim.keymap.set("n", "D", vim.lsp.buf.type_definition, bufopts) + -- vim.keymap.set("n", "rn", vim.lsp.buf.rename, bufopts) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, bufopts) + -- vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts) + -- vim.keymap.set("n", "f", function() + -- vim.lsp.buf.format { async = true } + -- end, bufopts) end -- Configure `ruff-lsp`. -- See: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#ruff_lsp -- For the default config, along with instructions on how to customize the settings -require('lspconfig').ruff_lsp.setup { +require("lspconfig").ruff_lsp.setup { on_attach = on_attach, init_options = { settings = { -- Any extra CLI arguments for `ruff` go here. - args = {"--ignore", "E741"}, - } - - } + args = { "--ignore", "E741" }, + }, + }, } diff --git a/lua/plugins/configs/telescope.lua b/lua/plugins/configs/telescope.lua index d989035..1e4b0bd 100644 --- a/lua/plugins/configs/telescope.lua +++ b/lua/plugins/configs/telescope.lua @@ -1,7 +1,20 @@ local custom_actions = {} local actions = require("telescope.actions") +local lga_actions = require("telescope-live-grep-args.actions") local action_state = require("telescope.actions.state") local from_entry = require("telescope.from_entry") +local scan = require("plenary.scandir") +local pickers = require("telescope.pickers") +local finders = require("telescope.finders") +local make_entry = require("telescope.make_entry") +local action_set = require 'telescope.actions.set' +local conf = require('telescope.config').values +local builtin = require("telescope.builtin") + +-- Usefull: +-- [[ +-- https://github.com/JoosepAlviste/dotfiles/blob/master/config/nvim/lua/j/telescope_custom_pickers.lua +-- ]] local entry_to_qf = function(entry) @@ -91,6 +104,122 @@ function custom_actions.multi_selection_vtab(prompt_bufnr) return custom_actions._multiopen(prompt_bufnr, "tabe", "tabe", "a", "loclist") end +function custom_actions.set_extension(prompt_bufnr) + local current_input = action_state.get_current_line() + + vim.ui.input({ prompt = 'Search in extension: *.' }, function(input) + if input == nil then + return + end + + -- Close and reopen a prompt with the same input + actions.close(prompt_bufnr) + builtin.live_grep({ default_text = current_input, type_filter = input }) + end) +end + +function custom_actions.to_live_grep_args(prompt_bufnr) + local current_input = action_state.get_current_line() + + -- Close and reopen a prompt with live_grep_args + actions.close(prompt_bufnr) + require("telescope").extensions.live_grep_args.live_grep_args({ default_text = current_input }) +end + +function custom_actions.set_folders(prompt_bufnr) + local current_input = action_state.get_current_line() + + local data = {} + scan.scan_dir(vim.loop.cwd(), { + hidden = true, + only_dirs = true, + respect_gitignore = true, + on_insert = function(entry) + table.insert(data, entry .. "/") + end, + }) + table.insert(data, 1, "./") + + actions.close(prompt_bufnr) + -- Create a new picker with Telescope to select folders we want to filter in + pickers.new({ + prompt_title = 'Select folders for current ("' .. current_input .. '") search', + finder = finders.new_table { results = data, entry_maker = make_entry.gen_from_file {} }, + previewer = conf.file_previewer {}, + sorter = conf.file_sorter {}, + attach_mappings = function(prompt_bufnr2) + action_set.select:replace(function() + local current_picker = action_state.get_current_picker(prompt_bufnr2) + + local dirs = {} + local selections = current_picker:get_multi_selection() + if vim.tbl_isempty(selections) then + table.insert(dirs, action_state.get_selected_entry().value) + else + for _, selection in ipairs(selections) do + table.insert(dirs, selection.value) + end + end + + actions.close(prompt_bufnr2) + builtin.live_grep({ default_text = current_input, search_dirs = dirs }) + end) + return true + + end, + }):find() + +end + +function custom_actions.set_files(prompt_bufnr) + local current_input = action_state.get_current_line() + local find_command = {"rg", "--files", "--color=never", "--no-heading"} + actions.close(prompt_bufnr) + if current_input ~= "" then + find_command = {"rg", "--color=never", "--no-heading", "-l", current_input} + end + + local opts = { + entry_maker = make_entry.gen_from_file(), + find_command = find_command, + } + + print(vim.inspect(find_command)) + -- Create a new picker with Telescope to select files we want to filter in + pickers + .new(opts, { + prompt_title = 'Select files for current ("' .. current_input .. '") search', + __locations_input = true, + finder = finders.new_oneshot_job(find_command, opts), + previewer = conf.grep_previewer(opts), + sorter = conf.file_sorter(opts), + attach_mappings = function(prompt_bufnr2) + actions.select_default:replace(function() + local current_picker = action_state.get_current_picker(prompt_bufnr2) + + local files = {} + local selections = current_picker:get_multi_selection() + if vim.tbl_isempty(selections) then + local entry = action_state.get_selected_entry() + table.insert(files, entry.value) + else + for _, selection in ipairs(selections) do + table.insert(files, selection.value) + end + + end + + -- Close the preview picker and select a new one, restricted to the files selected + actions.close(prompt_bufnr2) + builtin.live_grep({ default_text = current_input, search_dirs = files }) + end) + return true + end, + }) + :find() + +end + local options = { defaults = { vimgrep_arguments = { @@ -157,12 +286,18 @@ local options = { find_files = { mappings = { i = { + -- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list") + [""] = actions.to_fuzzy_refine, + + -- Send to qflist or loclist + [""] = actions.smart_send_to_loclist, + [""] = actions.smart_send_to_qflist, + + -- Multi selection open [""] = custom_actions.multi_selection_open, [""] = custom_actions.multi_selection_vsplit, [""] = custom_actions.multi_selection_split, [""] = custom_actions.multi_selection_tab, - [""] = actions.smart_send_to_qflist, - [""] = actions.smart_send_to_loclist, }, n = i, } @@ -170,21 +305,49 @@ local options = { live_grep = { mappings = { i = { + -- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list") + [""] = actions.to_fuzzy_refine, + + -- Send to qflist or loclist + [""] = actions.smart_send_to_loclist, [""] = actions.smart_send_to_qflist, - [""] = actions.smart_send_to_loclist, + + -- To quote prompt -> Pass to live_grep_args + [""] = custom_actions.to_live_grep_args, + + -- Search for files/folder/extensions + [""] = custom_actions.set_files, + [""] = custom_actions.set_folders, + [""] = custom_actions.set_extension, }, n = i, } } }, - extensions_list = { "themes", "terms", "fzf", "macrothis" }, + extensions_list = { "themes", "terms", "fzf", "macrothis", "live_grep_args" }, extensions = { fzf = { fuzzy = true, override_generic_sorter = true, override_file_sorter = true, case_mode = "smart_case", + }, + live_grep_args = { + auto_quoting = true, + mappings = { + i = { + -- Fuzzy refine ("Freeze the current list and start a fuzzy search in the frozen list") + [""] = actions.to_fuzzy_refine, + + -- Send to qflist or loclist + [""] = actions.smart_send_to_loclist, + [""] = actions.smart_send_to_qflist, + + -- Quote prompt, for passing parameters to vimgrep + [""] = lga_actions.quote_prompt(), + }, + } } } } diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 4204da6..7036687 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -13,60 +13,62 @@ local default_plugins = { end, ft = { "markdown" }, }, - {"tpope/vim-fugitive", lazy=false}, - {"rbong/vim-flog", lazy=false}, - {"tpope/vim-surround", lazy=false}, - {"tpope/vim-obsession", lazy=false}, - {"preservim/tagbar", lazy=false}, - {"ludovicchabant/vim-gutentags", lazy=false}, - {"emaniacs/vim-rest-console", lazy=false}, - {"git@github.com:mfussenegger/nvim-dap.git", lazy=false}, + { "tpope/vim-fugitive", lazy = false }, + { "rbong/vim-flog", lazy = false }, + { "tpope/vim-surround", lazy = false }, + { "tpope/vim-obsession", lazy = false }, + { "preservim/tagbar", lazy = false }, + { "ludovicchabant/vim-gutentags", lazy = false }, + { "emaniacs/vim-rest-console", lazy = false }, + { "mfussenegger/nvim-dap", lazy = false }, { - "git@github.com:rcarriga/nvim-dap-ui", + "rcarriga/nvim-dap-ui", dependencies = { "mfussenegger/nvim-dap", - "nvim-neotest/nvim-nio" + "nvim-neotest/nvim-nio", }, - lazy=false, + lazy = false, }, { - "git@github.com:mfussenegger/nvim-dap-python.git", + "mfussenegger/nvim-dap-python", dependencies = { "mfussenegger/nvim-dap", "rcarriga/nvim-dap-ui", }, - lazy=false, + lazy = false, init = function() - require("dap-python").setup("python") + require("dap-python").setup "python" -- Setup nvim-dap-ui also require("dapui").setup() end, - config = function(_, opts) - local dap = require('dap') - vim.api.nvim_set_hl(0, "dark-orange", { bg="#402c16"}) - vim.fn.sign_define('DapBreakpoint', {text='🛑', texthl='', linehl='', numhl=''}) - vim.fn.sign_define('DapStopped', {text='', texthl='', linehl='dark-orange', numhl=''}) - dap.defaults.fallback.terminal_win_cmd = 'tabnew' + config = function(_, _) + local dap = require "dap" + vim.api.nvim_set_hl(0, "dark-orange", { bg = "#402c16" }) + vim.fn.sign_define("DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" }) + vim.fn.sign_define("DapStopped", { text = "", texthl = "", linehl = "dark-orange", numhl = "" }) + dap.defaults.fallback.terminal_win_cmd = "tabnew" dap.defaults.fallback.focus_terminal = true end, }, { "Weissle/persistent-breakpoints.nvim", - lazy=false, - config = function(_, opts) - require('persistent-breakpoints').setup{ - load_breakpoints_event = { "BufReadPost" } + lazy = false, + config = function(_, _) + require("persistent-breakpoints").setup { + load_breakpoints_event = { "BufReadPost" }, } end, }, - {"nvim-telescope/telescope-dap.nvim", lazy=false}, - {"harrisoncramer/gitlab.nvim", + { "nvim-telescope/telescope-live-grep-args.nvim", lazy = false }, + { "nvim-telescope/telescope-dap.nvim", lazy = false }, + { + "harrisoncramer/gitlab.nvim", dependencies = { "MunifTanjim/nui.nvim", "nvim-lua/plenary.nvim", "sindrets/diffview.nvim", "stevearc/dressing.nvim", -- Recommended but not required. Better UI for pickers. - "nvim-tree/nvim-web-devicons" -- Recommended but not required. Icons in discussion tree. + "nvim-tree/nvim-web-devicons", -- Recommended but not required. Icons in discussion tree. }, enabled = true, lazy = false, @@ -82,13 +84,64 @@ local default_plugins = { }, { "sindrets/diffview.nvim", - lazy=false, + lazy = false, opts = function() return require "plugins.configs.diffview" end, }, - {"nvim-telescope/telescope-fzf-native.nvim", build="make"}, + { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, + + { + "stevearc/quicker.nvim", + opts = {}, + init = function() + require("quicker").setup() + end, + }, + + { + "chentoast/marks.nvim", + lazy = false, + init = function() + require("marks").setup { + default_mappings = true, + signs = true, + mappings = {}, + } + end, + }, + + { + "stevearc/conform.nvim", + opts = {}, + init = function() + require("conform").setup { + formatters_by_ft = { + lua = { "stylua" }, + -- You can use a function here to determine the formatters dynamically + python = function(bufnr) + if require("conform").get_formatter_info("ruff_format", bufnr).available then + return { "isort", "black" } + -- return { "ruff_format" } + else + return { "isort", "black" } + end + end, + -- javascript = { "prettierd", "prettier", stop_after_first = true }, + }, + options = { + lang_to_formatters = { + json = { "jq" }, + }, + }, + format_on_save = { + timeout_ms = 500, + lsp_format = "fallback", + }, + } + end, + }, { "NvChad/base46", @@ -174,9 +227,7 @@ local default_plugins = { "nvim-treesitter/nvim-treesitter-textobjects", lazy = false, config = function() - require("nvim-treesitter.configs").setup( - require("plugins.configs.treesitter_textobjects") - ) + require("nvim-treesitter.configs").setup(require "plugins.configs.treesitter_textobjects") end, }, @@ -294,56 +345,115 @@ local default_plugins = { "desdic/macrothis.nvim", opts = {}, keys = { - { "kkd", function() require('macrothis').delete() end, desc = "Delete" }, - { "kke", function() require('macrothis').edit() end, desc = "Edit" }, - { "kkl", function() require('macrothis').load() end, desc = "Load" }, - { "kkn", function() require('macrothis').rename() end, desc = "Rename" }, - { "kkq", function() require('macrothis').quickfix() end, desc = "Run macro on all files in quickfix" }, - { "kkr", function() require('macrothis').run() end, desc = "Run macro" }, - { "kks", function() require('macrothis').save() end, desc = "Save" }, - { "kkx", function() require('macrothis').register() end, desc = "Edit register" }, - { "kkp", function() require('macrothis').copy_register_printable() end, desc = "Copy register as printable" }, - { "kkm", function() require('macrothis').copy_macro_printable() end, desc = "Copy macro as printable" }, - } + { + "kkd", + function() + require("macrothis").delete() + end, + desc = "[D]elete", + }, + { + "kke", + function() + require("macrothis").edit() + end, + desc = "[E]dit", + }, + { + "kkl", + function() + require("macrothis").load() + end, + desc = "[L]oad", + }, + { + "kkn", + function() + require("macrothis").rename() + end, + desc = "Re[n]ame", + }, + { + "kkq", + function() + require("macrothis").quickfix() + end, + desc = "Run macro on all files in [q]uickfix", + }, + { + "kkr", + function() + require("macrothis").run() + end, + desc = "[R]un macro", + }, + { + "kks", + function() + require("macrothis").save() + end, + desc = "[S]ave", + }, + { + "kkx", + function() + require("macrothis").register() + end, + desc = "Edit register", + }, + { + "kkp", + function() + require("macrothis").copy_register_printable() + end, + desc = "Co[p]y register as printable", + }, + { + "kkm", + function() + require("macrothis").copy_macro_printable() + end, + desc = "Copy [m]acro as printable", + }, + }, }, - { "onsails/diaglist.nvim", - lazy=false, - debug=false, + lazy = false, + debug = false, }, { "anuvyklack/hydra.nvim", - lazy=false, + lazy = false, }, { "gioele/vim-autoswap", - lazy=false, + lazy = false, }, { "natecraddock/workspaces.nvim", - lazy=false, + lazy = false, config = function() - require("workspaces").setup({ + require("workspaces").setup { hooks = { - open = {"Telescope find_files"}, - } - }) + open = { "Telescope find_files" }, + }, + } end, }, { "mangelozzi/rgflow.nvim", - lazy=false, + lazy = false, config = function() - require("rgflow").setup({ + require("rgflow").setup { -- Set the default rip grep flags and options for when running a search via - -- RgFlow. Once changed via the UI, the previous search flags are used for + -- RgFlow. Once changed via the UI, the previous search flags are used for -- each subsequent search (until Neovim restarts). cmd_flags = "--smart-case --fixed-strings --ignore --max-columns 200", @@ -353,32 +463,32 @@ local default_plugins = { default_ui_mappings = true, -- QuickFix window only mapping default_quickfix_mappings = true, - }) + } end, }, { "yorickpeterse/nvim-window", - lazy=false, + lazy = false, config = function() - require('nvim-window').setup({ - normal_hl = 'Normal', - hint_hl = 'Bold', - border = 'single' - }) + require("nvim-window").setup { + normal_hl = "Normal", + hint_hl = "Bold", + border = "single", + } end, }, { "sindrets/winshift.nvim", - lazy=false, + lazy = false, }, { "kdheepak/lazygit.nvim", - lazy=false, + lazy = false, config = function() - require("lazy").setup({ + require("lazy").setup { { "kdheepak/lazygit.nvim", -- optional for floating window border decoration @@ -386,7 +496,7 @@ local default_plugins = { "nvim-lua/plenary.nvim", }, }, - }) + } end, }, @@ -431,7 +541,7 @@ local default_plugins = { -- Only load whichkey after all the gui { "folke/which-key.nvim", - lazy=false, + lazy = false, keys = { "", "", "", '"', "'", "`", "c", "v", "g" }, init = function() require("core.utils").load_mappings "whichkey" @@ -445,7 +555,7 @@ local default_plugins = { { "ThePrimeagen/harpoon", branch = "harpoon2", - dependencies = { "nvim-lua/plenary.nvim" } + dependencies = { "nvim-lua/plenary.nvim" }, }, { "folke/noice.nvim", @@ -453,6 +563,19 @@ local default_plugins = { opts = function() return require "plugins.configs.noice" end, + init = function() + require("noice").setup { + routes = { + { + view = "notify", + filter = { event = "msg_showmode" }, + }, + }, + } + -- require("notify").setup({ + -- background_colour = "#000000" + -- }) + end, dependencies = { "MunifTanjim/nui.nvim", -- "rcarriga/nvim-notify", @@ -460,14 +583,14 @@ local default_plugins = { }, { "folke/todo-comments.nvim", - lazy=false, + lazy = false, dependencies = { "nvim-lua/plenary.nvim" }, opts = { -- your configuration comes here -- or leave it empty to use the default settings -- refer to the configuration section below - } - } + }, + }, } local config = require("core.utils").load_config()