diff --git a/modules/programs/nvim/plugins/default.nix b/modules/programs/nvim/plugins/default.nix index 8fcc9e1..68088b8 100644 --- a/modules/programs/nvim/plugins/default.nix +++ b/modules/programs/nvim/plugins/default.nix @@ -111,7 +111,7 @@ with builtins; } { plugin = nvim-lspconfig; - event = [ "BufRead" "BufNewFile" ]; + event = [ "BufReadPre" "BufNewFile" ]; conf = readFile ./nvim-lspconfig.lua; dependencies = [ { @@ -126,35 +126,25 @@ with builtins; { plugin = lsp_lines-nvim; } { plugin = nvim-ufo; - conf = readFile ./nvim-ufo.lua; dependencies = [ { plugin = promise-async; } ]; } { plugin = neodev-nvim; - conf = readFile ./neodev-nvim.lua; - } - { - plugin = inc-rename-nvim; conf = /* lua */ '' - require("inc_rename").setup { - input_buffer_type = "dressing", - } + require("neodev").setup({ + override = function(root_dir, library) + if root_dir:find("/home/moritz/.dotfiles/", 1, true) == 1 then + library.enabled = true + library.plugins = true + end + end, + }) ''; - dependencies = [ - { - plugin = dressing-nvim; - } - ]; } ]; } - { - plugin = statuscol-nvim; - event = [ "VeryLazy" ]; - conf = readFile ./statuscol-nvim.lua; - } { plugin = vim-fugitive; event = [ "VeryLazy" ]; @@ -201,6 +191,8 @@ with builtins; { key = "sk"; cmd = "Telescope keymaps"; desc = "Keymaps"; } { key = "ss"; cmd = "Telescope lsp_document_symbols"; desc = "Symbols (Document)"; } { key = "sS"; cmd = "Telescope lsp_workspace_symbols"; desc = "Symbols (Workspace)"; } + { key = "gc"; cmd = "Telescope git_commits"; desc = "Commits"; } + { key = "gs"; cmd = "Telescope git_status"; desc = "Status"; } ]; dependencies = [ { plugin = plenary-nvim; } @@ -282,14 +274,5 @@ with builtins; plugin = hmts-nvim; ft = [ "nix" ]; } - { - plugin = zen-mode-nvim; - keys = [ - { key = "tz"; cmd = "ZenMode"; desc = "Zen mode"; } - ]; - dependencies = [ - { plugin = twilight-nvim; } - ]; - } ]; } diff --git a/modules/programs/nvim/plugins/gitsigns-nvim.lua b/modules/programs/nvim/plugins/gitsigns-nvim.lua index 1a17a9b..3cdce95 100644 --- a/modules/programs/nvim/plugins/gitsigns-nvim.lua +++ b/modules/programs/nvim/plugins/gitsigns-nvim.lua @@ -1,15 +1,22 @@ require("gitsigns").setup() require("which-key").register({ - ["[h"] = { "Gitsigns prev_hunk", "Previous hunk" }, - ["]h"] = { "Gitsigns next_hunk", "Next hunk" }, - ["g"] = { + ["["] = { + h = { "Gitsigns prev_hunk", "Previous hunk" }, + }, + ["]"] = { + h = { "Gitsigns next_hunk", "Next hunk" }, + }, +}) +require("which-key").register({ + h = { + name = "hunk", s = { "Gitsigns stage_hunk", "Stage hunk", mode = { "n", "v" } }, r = { "Gitsigns reset_hunk", "Reset hunk", mode = { "n", "v" } }, S = { "Gitsigns stage_buffer", "Stage buffer" }, R = { "Gitsigns reset_buffer", "Reset buffer" }, u = { "Gitsigns undo_stage_hunk", "Undo stage hunk" }, - p = { "Gitsigns preview_hunk_inline", "Preview hunk (inline)" }, - P = { "Gitsigns preview_hunk", "Preview hunk (float)" }, }, - ["ih"] = { ":Gitsigns select_hunk", "gitsigns hunk", mode = { "o", "x" } }, -}) +}, { prefix = "g" }) +require("which-key").register({ + h = { ":Gitsigns select_hunk", "Gitsigns select hunk" }, +}, { prefix = "i", mode = { "o", "x" } }) diff --git a/modules/programs/nvim/plugins/neodev-nvim.lua b/modules/programs/nvim/plugins/neodev-nvim.lua deleted file mode 100644 index a63e89a..0000000 --- a/modules/programs/nvim/plugins/neodev-nvim.lua +++ /dev/null @@ -1,8 +0,0 @@ -require("neodev").setup({ - override = function(root_dir, library) - if root_dir:find("/home/moritz/.dotfiles/", 1, true) == 1 then - library.enabled = true - library.plugins = true - end - end, -}) diff --git a/modules/programs/nvim/plugins/nvim-lspconfig.lua b/modules/programs/nvim/plugins/nvim-lspconfig.lua index 0c44ceb..7fbc917 100644 --- a/modules/programs/nvim/plugins/nvim-lspconfig.lua +++ b/modules/programs/nvim/plugins/nvim-lspconfig.lua @@ -5,43 +5,63 @@ vim.diagnostic.config({ virtual_text = false, }) +vim.o.foldcolumn = "1" -- '0' is not bad +vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value +vim.o.foldlevelstart = 99 +vim.o.foldenable = true +vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] +vim.o.statuscolumn = "%= " + -- FIXME: figure out how to put on the other side without having to do a lot of shifting + .. "%s" -- sign column + .. "%{%" -- evaluate this, and then evaluate what it returns + .. "&number ?" + .. "(v:relnum ?" + -- when showing relative numbers, make sure to pad so things don't shift as you move the cursor + .. 'printf("%"..len(line("$")).."s", v:relnum)' + .. ":" + .. "v:lnum" + .. ")" + .. ":" + .. '""' + .. " " -- space between lines and fold + .. "%}" + .. "%= " + .. "%#FoldColumn#" -- highlight group for fold + .. "%{" -- expression for showing fold expand/colapse + .. "foldlevel(v:lnum) > foldlevel(v:lnum - 1)" -- any folds? + .. "? (foldclosed(v:lnum) == -1" -- currently open? + .. '? ""' -- point down + .. ': ""' -- point to right + .. ")" + .. ': " "' -- blank for no fold, or inside fold + .. "}" + .. "%= " -- spacing between end of column and start of text + +-- Using ufo provider need remap `zR` and `zM`. If Neovim is 0.6.1, remap yourself +require("which-key").register({ + z = { + R = { require("ufo").openAllFolds, "Open all folds" }, + M = { require("ufo").closeAllFolds, "Close all folds" }, + }, +}) local capabilities = vim.lsp.protocol.make_client_capabilities() --- NOTE for nvim-ufo -- Tell the server the capability of foldingRange, -- Neovim hasn't added foldingRange to default capabilities, users must add it manually capabilities.textDocument.foldingRange = { dynamicRegistration = false, lineFoldingOnly = true, } --- NOTE https://github.com/neovim/neovim/pull/22405 -capabilities.didChangeWatchedFiles = { - dynamicRegistration = true, -} +require("ufo").setup() local lspconfig = require("lspconfig") local on_attach_def = function(client, bufnr) require("which-key").register({ - K = { - function() - local winid = require("ufo").peekFoldedLinesUnderCursor() - if not winid then - vim.lsp.buf.hover() - end - end, - "Hover", - }, + K = { vim.lsp.buf.hover, "Hover" }, [""] = { l = { - name = "lsp", d = { vim.diagnostic.open_float, "Open diagnostic window" }, c = { vim.lsp.buf.code_action, "Code action" }, - r = { - function() - return ":IncRename " .. vim.fn.expand("") - end, - "Rename", - expr = true, - }, + r = { vim.lsp.buf.rename, "Rename" }, f = { function() vim.lsp.buf.format({ async = true }) diff --git a/modules/programs/nvim/plugins/nvim-ufo.lua b/modules/programs/nvim/plugins/nvim-ufo.lua deleted file mode 100644 index 2399582..0000000 --- a/modules/programs/nvim/plugins/nvim-ufo.lua +++ /dev/null @@ -1,74 +0,0 @@ -vim.o.foldcolumn = "1" -- '0' is not bad -vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value -vim.o.foldlevelstart = 99 -vim.o.foldenable = true - -local ftMap = { - vim = "indent", - python = { "indent" }, - git = "", -} - ----@param bufnr number ----@return Promise -local function customizeSelector(bufnr) - local function handleFallbackException(err, providerName) - if type(err) == "string" and err:match("UfoFallbackException") then - return require("ufo").getFolds(bufnr, providerName) - else - return require("promise").reject(err) - end - end - - return require("ufo") - .getFolds(bufnr, "lsp") - :catch(function(err) - return handleFallbackException(err, "treesitter") - end) - :catch(function(err) - return handleFallbackException(err, "indent") - end) -end - -local handler = function(virtText, lnum, endLnum, width, truncate) - local newVirtText = {} - local suffix = ("  %d "):format(endLnum - lnum) - local sufWidth = vim.fn.strdisplaywidth(suffix) - local targetWidth = width - sufWidth - local curWidth = 0 - for _, chunk in ipairs(virtText) do - local chunkText = chunk[1] - local chunkWidth = vim.fn.strdisplaywidth(chunkText) - if targetWidth > curWidth + chunkWidth then - table.insert(newVirtText, chunk) - else - chunkText = truncate(chunkText, targetWidth - curWidth) - local hlGroup = chunk[2] - table.insert(newVirtText, { chunkText, hlGroup }) - chunkWidth = vim.fn.strdisplaywidth(chunkText) - -- str width returned from truncate() may less than 2nd argument, need padding - if curWidth + chunkWidth < targetWidth then - suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) - end - break - end - curWidth = curWidth + chunkWidth - end - table.insert(newVirtText, { suffix, "MoreMsg" }) - return newVirtText -end - -require("ufo").setup({ - provider_selector = function(_, filetype, _) - return ftMap[filetype] or customizeSelector - end, - fold_virt_text_handler = handler, -}) - --- Using ufo provider need remap `zR` and `zM`. If Neovim is 0.6.1, remap yourself -require("which-key").register({ - z = { - R = { require("ufo").openAllFolds, "Open all folds" }, - M = { require("ufo").closeAllFolds, "Close all folds" }, - }, -}) diff --git a/modules/programs/nvim/plugins/oil-nvim.lua b/modules/programs/nvim/plugins/oil-nvim.lua index 6c9c81e..e2afffb 100644 --- a/modules/programs/nvim/plugins/oil-nvim.lua +++ b/modules/programs/nvim/plugins/oil-nvim.lua @@ -1,4 +1,4 @@ require("oil").setup() require("which-key").register({ - d = { require("oil").toggle_float, "Directory (oil)" }, + d = { require("oil").toggle_float, "directory (oil)" }, }, { prefix = "t" }) diff --git a/modules/programs/nvim/plugins/statuscol-nvim.lua b/modules/programs/nvim/plugins/statuscol-nvim.lua deleted file mode 100644 index b1e1eb1..0000000 --- a/modules/programs/nvim/plugins/statuscol-nvim.lua +++ /dev/null @@ -1,22 +0,0 @@ -vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] -local builtin = require("statuscol.builtin") -require("statuscol").setup({ - segments = { - { - sign = { name = { ".*" }, auto = true }, - click = "v:lua.ScSa", - }, - { - text = { builtin.lnumfunc }, - click = "v:lua.ScLa", - }, - { - sign = { name = { "GitSigns" }, auto = true }, - click = "v:lua.ScSa", - }, - { - text = { builtin.foldfunc, " " }, - click = "v:lua.ScFa", - }, - }, -})