[nvim] many changes

This commit is contained in:
Afonso Franco 2025-04-25 20:56:57 +01:00
parent 531a8a7ad2
commit e7ae1ec1da
Signed by: afonso
SSH key fingerprint: SHA256:PQTRDHPH3yALEGtHXnXBp3Orfcn21pK20t0tS1kHg54
7 changed files with 113 additions and 26 deletions

View file

@ -3,3 +3,4 @@ require("core.keymaps")
require("core.autocmds") require("core.autocmds")
require('core.package_manager') require('core.package_manager')
require('core.theme') require('core.theme')
require('winbar')

View file

@ -1,5 +1,6 @@
vim.g.gruvbox_material_better_performance=1 vim.g.gruvbox_material_better_performance=1
vim.g.gruvbox_material_background="hard" vim.g.gruvbox_material_background="hard"
vim.g.gruvbox_material_foreground="original" vim.g.gruvbox_material_foreground="original"
vim.g.gruvbox_material_transparent_background=2
vim.opt.background="dark" vim.opt.background="dark"
vim.cmd('colorscheme gruvbox-material') vim.cmd('colorscheme gruvbox-material')

View file

@ -47,3 +47,7 @@ vim.opt.signcolumn = "yes"
vim.opt.autoread = true vim.opt.autoread = true
-- disable swapfile -- disable swapfile
vim.opt.swapfile = false vim.opt.swapfile = false
-- disable statusline
vim.o.laststatus = 1
-- border on floating windows
vim.o.winborder = nil

View file

@ -49,6 +49,29 @@ return {
local fzflua = require("fzf-lua") local fzflua = require("fzf-lua")
local conform = require("conform") local conform = require("conform")
local function jumpWithVirtLineDiags(jumpCount)
pcall(vim.api.nvim_del_augroup_by_name, "jumpWithVirtLineDiags") -- prevent autocmd for repeated jumps
vim.diagnostic.jump { count = jumpCount }
local initialVirtTextConf = vim.diagnostic.config().virtual_text
vim.diagnostic.config {
virtual_text = false,
virtual_lines = { current_line = true },
}
vim.defer_fn(function() -- deferred to not trigger by jump itself
vim.api.nvim_create_autocmd("CursorMoved", {
desc = "User(once): Reset diagnostics virtual lines",
once = true,
group = vim.api.nvim_create_augroup("jumpWithVirtLineDiags", {}),
callback = function()
vim.diagnostic.config { virtual_lines = false, virtual_text = initialVirtTextConf }
end,
})
end, 1)
end
local rename_func = function() local rename_func = function()
return ":IncRename " .. vim.fn.expand("<cword>") return ":IncRename " .. vim.fn.expand("<cword>")
end end
@ -66,8 +89,8 @@ return {
vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts) vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set("n", "<space>rn", rename_func, bufopts_expr) vim.keymap.set("n", "<space>rn", rename_func, bufopts_expr)
vim.keymap.set({ "n", "v" }, "<space>ca", vim.lsp.buf.code_action, bufopts) vim.keymap.set({ "n", "v" }, "<space>ca", vim.lsp.buf.code_action, bufopts)
vim.keymap.set("n", "<space>ge", vim.diagnostic.goto_next, bufopts) vim.keymap.set("n", "<space>ge", function() jumpWithVirtLineDiags(1) end, bufopts)
vim.keymap.set("n", "<space>gE", vim.diagnostic.goto_prev, bufopts) vim.keymap.set("n", "<space>gE", function() jumpWithVirtLineDiags(-1) end, bufopts)
vim.keymap.set("n", "<space>fo", function() conform.format({ lsp_fallback = true }) end, bufopts) vim.keymap.set("n", "<space>fo", function() conform.format({ lsp_fallback = true }) end, bufopts)
end, end,
}) })

View file

@ -50,6 +50,7 @@ return {
{ {
"afonsofrancof/worktrees.nvim", "afonsofrancof/worktrees.nvim",
dev = true, dev = true,
event = "VeryLazy",
opts = { opts = {
mappings = { mappings = {
create = "<leader>wtc", create = "<leader>wtc",

View file

@ -1,24 +0,0 @@
return {
{
'nvim-lualine/lualine.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
opts = {
sections = {
lualine_a = { 'mode' },
lualine_b = { 'branch', 'diff', 'diagnostics' },
lualine_c = { { 'filename', path = 1 } },
lualine_x = { 'filetype' },
lualine_y = { 'progress' },
lualine_z = { 'location' }
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { 'filename' },
lualine_x = { 'location' },
lualine_y = {},
lualine_z = {}
},
}
}
}

View file

@ -0,0 +1,81 @@
local M = {}
local icons = require("mini.icons")
--- Window bar that shows the current file path (in a fancy way).
---@return string
function M.render()
-- Get the path and expand variables.
local path = vim.fs.normalize(vim.fn.expand '%:p' --[[@as string]])
-- No special styling for diff views.
if vim.startswith(path, 'diffview') then
return string.format('%%#Winbar#%s', path)
end
-- Replace slashes by arrows.
local separator = ' %#WinbarSeparator# '
local prefix, prefix_path = '', ''
local folder_icon = ''
-- If the window gets too narrow, shorten the path and drop the prefix.
if vim.api.nvim_win_get_width(0) < math.floor(vim.o.columns / 3) then
path = vim.fn.pathshorten(path)
else
-- For some special folders, add a prefix instead of the full path (making
-- sure to pick the longest prefix).
---@type table<string, string>
local special_dirs = {
DOTFILES = vim.env.XDG_CONFIG_HOME,
GITS = vim.env.HOME .. '/gits',
HOME = vim.env.HOME,
PROJECTS = vim.env.HOME .. '/projects',
}
for dir_name, dir_path in pairs(special_dirs) do
if vim.startswith(path, vim.fs.normalize(dir_path)) and #dir_path > #prefix_path then
prefix, prefix_path, folder_icon = dir_name, dir_path, icons.get('file',path)
end
end
if prefix ~= '' then
path = path:gsub('^' .. prefix_path, '')
prefix = string.format('%%#WinBarFile#%s %s%s', folder_icon, prefix, separator)
end
end
-- Remove leading slash.
path = path:gsub('^/', '')
vim.api.nvim_set_hl(0, "Winbar", { link = "Normal" })
vim.api.nvim_set_hl(0, "WinbarSeparator", { link = "Normal" })
vim.api.nvim_set_hl(0, "WinBarFile", { link = "Normal" })
return table.concat {
' ',
prefix,
table.concat(
vim.iter(vim.split(path, '/'))
:map(function(segment)
return string.format('%%#Winbar#%s', segment)
end)
:totable(),
separator
),
}
end
vim.api.nvim_create_autocmd('BufWinEnter', {
group = vim.api.nvim_create_augroup('afonso/winbar', { clear = true }),
desc = 'Attach winbar',
callback = function(args)
if
not vim.api.nvim_win_get_config(0).zindex -- Not a floating window
and vim.bo[args.buf].buftype == '' -- Normal buffer
and vim.api.nvim_buf_get_name(args.buf) ~= '' -- Has a file name
and not vim.wo[0].diff -- Not in diff mode
then
vim.wo.winbar = "%{%v:lua.require'winbar'.render()%}"
end
end,
})
return M