Compare commits

...

8 Commits

7 changed files with 162 additions and 68 deletions

View File

@ -111,7 +111,7 @@ with builtins;
} }
{ {
plugin = nvim-lspconfig; plugin = nvim-lspconfig;
event = [ "BufReadPre" "BufNewFile" ]; event = [ "BufRead" "BufNewFile" ];
conf = readFile ./nvim-lspconfig.lua; conf = readFile ./nvim-lspconfig.lua;
dependencies = [ dependencies = [
{ {
@ -126,25 +126,35 @@ with builtins;
{ plugin = lsp_lines-nvim; } { plugin = lsp_lines-nvim; }
{ {
plugin = nvim-ufo; plugin = nvim-ufo;
conf = readFile ./nvim-ufo.lua;
dependencies = [ dependencies = [
{ plugin = promise-async; } { plugin = promise-async; }
]; ];
} }
{ {
plugin = neodev-nvim; plugin = neodev-nvim;
conf = readFile ./neodev-nvim.lua;
}
{
plugin = inc-rename-nvim;
conf = /* lua */ '' conf = /* lua */ ''
require("neodev").setup({ require("inc_rename").setup {
override = function(root_dir, library) input_buffer_type = "dressing",
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; plugin = vim-fugitive;
event = [ "VeryLazy" ]; event = [ "VeryLazy" ];
@ -191,8 +201,6 @@ with builtins;
{ key = "<leader>sk"; cmd = "<cmd>Telescope keymaps<cr>"; desc = "Keymaps"; } { key = "<leader>sk"; cmd = "<cmd>Telescope keymaps<cr>"; desc = "Keymaps"; }
{ key = "<leader>ss"; cmd = "<cmd>Telescope lsp_document_symbols<cr>"; desc = "Symbols (Document)"; } { key = "<leader>ss"; cmd = "<cmd>Telescope lsp_document_symbols<cr>"; desc = "Symbols (Document)"; }
{ key = "<leader>sS"; cmd = "<cmd>Telescope lsp_workspace_symbols<cr>"; desc = "Symbols (Workspace)"; } { key = "<leader>sS"; cmd = "<cmd>Telescope lsp_workspace_symbols<cr>"; desc = "Symbols (Workspace)"; }
{ key = "<leader>gc"; cmd = "<cmd>Telescope git_commits<cr>"; desc = "Commits"; }
{ key = "<leader>gs"; cmd = "<cmd>Telescope git_status<cr>"; desc = "Status"; }
]; ];
dependencies = [ dependencies = [
{ plugin = plenary-nvim; } { plugin = plenary-nvim; }
@ -274,5 +282,14 @@ with builtins;
plugin = hmts-nvim; plugin = hmts-nvim;
ft = [ "nix" ]; ft = [ "nix" ];
} }
{
plugin = zen-mode-nvim;
keys = [
{ key = "<leader>tz"; cmd = "<cmd>ZenMode<cr>"; desc = "Zen mode"; }
];
dependencies = [
{ plugin = twilight-nvim; }
];
}
]; ];
} }

View File

@ -1,22 +1,15 @@
require("gitsigns").setup() require("gitsigns").setup()
require("which-key").register({ require("which-key").register({
["["] = { ["[h"] = { "<cmd>Gitsigns prev_hunk<cr>", "Previous hunk" },
h = { "<cmd>Gitsigns prev_hunk<cr>", "Previous hunk" }, ["]h"] = { "<cmd>Gitsigns next_hunk<cr>", "Next hunk" },
}, ["<leader>g"] = {
["]"] = {
h = { "<cmd>Gitsigns next_hunk<cr>", "Next hunk" },
},
})
require("which-key").register({
h = {
name = "hunk",
s = { "<cmd>Gitsigns stage_hunk<cr>", "Stage hunk", mode = { "n", "v" } }, s = { "<cmd>Gitsigns stage_hunk<cr>", "Stage hunk", mode = { "n", "v" } },
r = { "<cmd>Gitsigns reset_hunk<cr>", "Reset hunk", mode = { "n", "v" } }, r = { "<cmd>Gitsigns reset_hunk<cr>", "Reset hunk", mode = { "n", "v" } },
S = { "<cmd>Gitsigns stage_buffer<cr>", "Stage buffer" }, S = { "<cmd>Gitsigns stage_buffer<cr>", "Stage buffer" },
R = { "<cmd>Gitsigns reset_buffer<cr>", "Reset buffer" }, R = { "<cmd>Gitsigns reset_buffer<cr>", "Reset buffer" },
u = { "<cmd>Gitsigns undo_stage_hunk<cr>", "Undo stage hunk" }, u = { "<cmd>Gitsigns undo_stage_hunk<cr>", "Undo stage hunk" },
p = { "<cmd>Gitsigns preview_hunk_inline<cr>", "Preview hunk (inline)" },
P = { "<cmd>Gitsigns preview_hunk<cr>", "Preview hunk (float)" },
}, },
}, { prefix = "<leader>g" }) ["ih"] = { ":<C-U>Gitsigns select_hunk<cr>", "gitsigns hunk", mode = { "o", "x" } },
require("which-key").register({ })
h = { ":<C-U>Gitsigns select_hunk<cr>", "Gitsigns select hunk" },
}, { prefix = "i", mode = { "o", "x" } })

View File

@ -0,0 +1,8 @@
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,
})

View File

@ -5,63 +5,43 @@ vim.diagnostic.config({
virtual_text = false, 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() local capabilities = vim.lsp.protocol.make_client_capabilities()
-- NOTE for nvim-ufo
-- Tell the server the capability of foldingRange, -- Tell the server the capability of foldingRange,
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually -- Neovim hasn't added foldingRange to default capabilities, users must add it manually
capabilities.textDocument.foldingRange = { capabilities.textDocument.foldingRange = {
dynamicRegistration = false, dynamicRegistration = false,
lineFoldingOnly = true, lineFoldingOnly = true,
} }
require("ufo").setup() -- NOTE https://github.com/neovim/neovim/pull/22405
capabilities.didChangeWatchedFiles = {
dynamicRegistration = true,
}
local lspconfig = require("lspconfig") local lspconfig = require("lspconfig")
local on_attach_def = function(client, bufnr) local on_attach_def = function(client, bufnr)
require("which-key").register({ require("which-key").register({
K = { vim.lsp.buf.hover, "Hover" }, K = {
function()
local winid = require("ufo").peekFoldedLinesUnderCursor()
if not winid then
vim.lsp.buf.hover()
end
end,
"Hover",
},
["<leader>"] = { ["<leader>"] = {
l = { l = {
name = "lsp",
d = { vim.diagnostic.open_float, "Open diagnostic window" }, d = { vim.diagnostic.open_float, "Open diagnostic window" },
c = { vim.lsp.buf.code_action, "Code action" }, c = { vim.lsp.buf.code_action, "Code action" },
r = { vim.lsp.buf.rename, "Rename" }, r = {
function()
return ":IncRename " .. vim.fn.expand("<cword>")
end,
"Rename",
expr = true,
},
f = { f = {
function() function()
vim.lsp.buf.format({ async = true }) vim.lsp.buf.format({ async = true })

View File

@ -0,0 +1,74 @@
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" },
},
})

View File

@ -1,4 +1,4 @@
require("oil").setup() require("oil").setup()
require("which-key").register({ require("which-key").register({
d = { require("oil").toggle_float, "directory (oil)" }, d = { require("oil").toggle_float, "Directory (oil)" },
}, { prefix = "<leader>t" }) }, { prefix = "<leader>t" })

View File

@ -0,0 +1,22 @@
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",
},
},
})