REFACTOR: Updated bar and updated keymaps/options

This commit is contained in:
2026-10-05 21:44:48 -04:00
parent 75e4e77dba
commit 5e8d29a82b
10 changed files with 253 additions and 246 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
require('DarthMooMancer.opts')
require('DarthMooMancer.plugins')
require('DarthMooMancer.keymaps')
require('DarthMooMancer.ui')
require('DarthMooMancer.statusline')
require('DarthMooMancer.lsp')
@@ -11,37 +11,25 @@ vim.keymap.set('n', '<C-d>', '<C-d>zz')
vim.keymap.set('n', 'n', 'nzzzv')
vim.keymap.set('n', 'N', 'Nzzzv')
vim.keymap.set('x', '<leader>p', [["_dP]])
vim.keymap.set(
'n',
'<leader><leader>',
function() Snacks.picker.files() end
)
vim.keymap.set(
'n',
'<leader>fh',
function() Snacks.picker.help() end
)
vim.keymap.set(
'n',
'<leader>fg',
function() Snacks.picker.grep() end
)
vim.keymap.set(
'n',
'<leader>fm',
function() Snacks.picker.man() end
)
vim.keymap.set(
'n',
'<leader>xn',
function() Snacks.picker.notifications() end
)
vim.keymap.set('n', '<leader><leader>', function()
Snacks.picker.files()
end)
vim.keymap.set('n', '<leader>fh', function()
Snacks.picker.help()
end)
vim.keymap.set('n', '<leader>fg', function()
Snacks.picker.grep()
end)
vim.keymap.set('n', '<leader>fm', function()
Snacks.picker.man()
end)
vim.keymap.set('n', '<leader>xn', function()
Snacks.picker.notifications()
end)
vim.keymap.set(
'n',
'<leader>uu',
function() Snacks.picker.undo() end
)
vim.keymap.set('n', '<leader>uu', function()
Snacks.picker.undo()
end)
vim.keymap.set('n', '<leader>fs', vim.lsp.buf.document_symbol)
vim.keymap.set('n', '<leader>gd', vim.lsp.buf.definition)
@@ -60,4 +48,7 @@ vim.keymap.set('n', '<C-j>', ':NvimTmuxNavigateDown<CR>', { silent = true })
vim.keymap.set('n', '<C-k>', ':NvimTmuxNavigateUp<CR>', { silent = true })
vim.keymap.set('n', '<C-l>', ':NvimTmuxNavigateRight<CR>', { silent = true })
vim.keymap.set('n', '<leader>xx', ':Trouble diagnostics toggle<cr>')
vim.keymap.set('n', '<leader>zz', function() Snacks.zen() end)
vim.keymap.set('n', '<leader>zz', function()
Snacks.zen()
end)
vim.keymap.set('n', '<leader>mp', ':Vellum<cr>', { desc = 'Markdown preview' })
@@ -35,17 +35,13 @@ vim.opt.scrolloff = 4
vim.opt.sidescrolloff = 8
vim.opt.hlsearch = false
vim.opt.completeopt = { 'menuone', 'noselect', 'popup' }
vim.g.netrw_browse_split = 0
vim.g.netrw_banner = 0
vim.g.netrw_liststyle = 3
vim.g.netrw_winsize = 25
vim.opt.wrapscan = true -- begin search from top of the file when nothng is found
vim.opt.cursorline = true -- enable cursorline
vim.opt.cursorlineopt = { 'screenline', 'number' } -- cursorline look
vim.opt.foldmethod = 'indent'
vim.opt.foldcolumn = '1'
vim.opt.foldenable = false
vim.opt.shortmess = 'aF' -- abbreviates messages and prevents file name being echoed when opened
vim.opt.shortmess = 'aFI' -- abbreviates messages and prevents file name being echoed when opened
vim.opt.ignorecase = false -- ignore cases when searching
vim.opt.smartcase = true -- However if we use a capital in search string we then consider case-sensitivity, ignorecase is disabled
vim.opt.smartindent = false -- smarter indentation
@@ -76,3 +72,6 @@ vim.api.nvim_create_autocmd('FileType', {
vim.keymap.set('n', 'k', 'gk', { buffer = true })
end,
})
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
@@ -10,3 +10,4 @@ require('DarthMooMancer.plugins.noice')
require('DarthMooMancer.plugins.snacks')
require('DarthMooMancer.plugins.trouble')
require('DarthMooMancer.plugins.conform')
require('DarthMooMancer.plugins.vellum')
@@ -2,7 +2,7 @@ vim.pack.add({
{
src = 'https://github.com/saghen/blink.cmp',
version = vim.version.range('*'),
}
},
})
require('blink.cmp').setup({
@@ -17,14 +17,13 @@ require('blink.cmp').setup({
menu = {
draw = {
columns = {
{ "label", "label_description", gap = 1 },
{ "kind_icon", "kind", gap = 1 },
{ "source_name", gap = 1 },
{ 'label', 'label_description', gap = 1 },
{ 'kind_icon', 'kind', gap = 1 },
{ 'source_name', gap = 1 },
},
},
scrollbar = false,
winhighlight =
'Pmenu:NormalFloat,FloatBorder:SnacksPickerBorder,PmenuSel:Visual,CursorLine:Visual,Search:None',
winhighlight = 'Pmenu:NormalFloat,FloatBorder:SnacksPickerBorder,PmenuSel:Visual,CursorLine:Visual,Search:None',
},
},
})
@@ -23,17 +23,24 @@ require('incline').setup({
margin = { horizontal = 0, vertical = 0 },
},
render = function(props)
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ':t')
local filename =
vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ':t')
if filename == '' then
filename = '[No Name]'
end
local ft_icon, ft_color = devicons.get_icon_color(filename)
local modified = vim.bo[props.buf].modified
local res = {
ft_icon and { ' ', ft_icon, ' ', guibg = ft_color, guifg = helpers.contrast_color(ft_color) } or '',
ft_icon and {
' ',
ft_icon,
' ',
guibg = ft_color,
guifg = helpers.contrast_color(ft_color),
} or '',
' ',
{ filename, gui = modified and 'bold,italic' or 'bold' },
guibg = "none",
guibg = 'none',
}
if props.focused then
for _, item in ipairs(navic.get_data(props.buf) or {}) do
@@ -16,8 +16,12 @@ require('snacks').setup({
},
},
sources = {
files = {
layout = {
preview = false,
preview = false, -- This now ONLY applies to Snacks.picker.files()
},
},
},
},
zen = {
@@ -0,0 +1,16 @@
vim.pack.add({
{
src = 'https://github.com/blackhat-7/vellum.nvim',
},
})
vim.api.nvim_create_autocmd('FileType', {
pattern = 'markdown',
once = true,
callback = function()
local ok, vellum = pcall(require, 'vellum')
if ok then
vellum.setup({})
end
end,
})
@@ -3,31 +3,33 @@ local function derive_hl(name, opts)
or {}
local fg = opts.fg and vim.api.nvim_get_hl(0, { name = opts.fg }) or {}
local bg = opts.bg and vim.api.nvim_get_hl(0, { name = opts.bg }) or {}
vim.api.nvim_set_hl(0, name, {
fg = fg.fg or base.fg,
bg = bg.bg or base.bg,
bold = opts.bold,
})
end
local function derive_mode_hl(name, color_group)
local color = vim.api.nvim_get_hl(0, { name = color_group })
local status_bg = vim.api.nvim_get_hl(0, { name = 'StatusLine' })
vim.api.nvim_set_hl(0, name, {
bg = color.fg,
fg = status_bg.bg or '#191724',
bold = true,
})
vim.api.nvim_set_hl(
0,
name,
{ fg = fg.fg or base.fg, bg = bg.bg or base.bg, bold = opts.bold }
)
end
local function setup_statusline_highlights()
derive_mode_hl('StatusModeNormal', 'Type')
derive_mode_hl('StatusModeInsert', 'String')
derive_mode_hl('StatusModeVisual', 'Statement')
derive_mode_hl('StatusModeCommand', 'PreProc')
derive_mode_hl('StatusModeReplace', 'WarningMsg')
derive_mode_hl('StatusModeTerminal', 'Special')
local st = vim.api.nvim_get_hl(0, { name = 'StatusLine' })
for name, link in pairs({
Normal = 'Type',
Insert = 'String',
Visual = 'Statement',
Command = 'PreProc',
Replace = 'WarningMsg',
Terminal = 'Special',
}) do
local c = vim.api.nvim_get_hl(0, { name = link })
vim.api.nvim_set_hl(
0,
'StatusMode' .. name,
{ bg = c.fg, fg = st.bg or '#191724', bold = true }
)
end
derive_hl('StatusGit', { base = 'CursorLine', fg = 'Normal' })
derive_hl('StatusCursor', { base = 'CursorLine', fg = 'Normal' })
derive_hl(
'StatusLspWorking',
{ base = 'StatusLine', fg = 'DiagnosticInfo' }
@@ -53,69 +55,64 @@ vim.api.nvim_create_autocmd('ColorScheme', {
})
setup_statusline_highlights()
local mode_map = {
n = ' NORM ',
i = ' INS ',
v = ' VIS ',
V = ' V-LINE ',
['\22'] = ' V-BLK ',
['\19'] = ' V-BLK ',
s = ' VIS ',
S = ' V-LINE ',
R = ' REPL ',
c = ' CMD ',
r = ' PROMPT ',
t = ' TERM ',
['!'] = ' SHELL ',
local modes = {
n = { ' NORM ', 'StatusModeNormal' },
i = { ' INS ', 'StatusModeInsert' },
v = { ' VIS ', 'StatusModeVisual' },
V = { ' V-LINE ', 'StatusModeVisual' },
['\22'] = { ' V-BLK ', 'StatusModeVisual' },
['\19'] = { ' V-BLK ', 'StatusModeVisual' },
s = { ' VIS ', 'StatusModeVisual' },
S = { ' V-LINE ', 'StatusModeVisual' },
R = { ' REPL ', 'StatusModeReplace' },
c = { ' CMD ', 'StatusModeCommand' },
r = { ' PROMPT ', 'StatusModeCommand' },
t = { ' TERM ', 'StatusModeTerminal' },
['!'] = { ' SHELL ', 'StatusModeCommand' },
}
local mode_hl_map = {
n = 'StatusModeNormal',
i = 'StatusModeInsert',
v = 'StatusModeVisual',
V = 'StatusModeVisual',
['\22'] = 'StatusModeVisual',
s = 'StatusModeVisual',
S = 'StatusModeVisual',
['\19'] = 'StatusModeVisual',
R = 'StatusModeReplace',
c = 'StatusModeCommand',
r = 'StatusModeCommand',
['!'] = 'StatusModeCommand',
t = 'StatusModeTerminal',
}
local mode_statusline =
{ default = { '%#StatusModeNormal# ?? %*', 'StatusModeNormal' } }
for k, v in pairs(modes) do
mode_statusline[k] = { '%#' .. v[2] .. '#' .. v[1] .. '%*', v[2] }
end
local mode_statusline = {}
for k, v in pairs(mode_map) do
local hl = mode_hl_map[k] or 'StatusModeNormal'
mode_statusline[k] = '%#' .. hl .. '#' .. v .. '%*'
local redraw_scheduled = false
local function schedule_redraw()
if redraw_scheduled then
return
end
redraw_scheduled = true
vim.schedule(function()
redraw_scheduled = false
vim.cmd.redrawstatus()
end)
end
mode_statusline['default'] = '%#StatusModeNormal# ?? %*'
local function refresh_status(buf)
local b = vim.b[buf]
local left, right = {}, {}
local l, r = '', ''
if b.git_branch and b.git_branch ~= '' then
left[#left + 1] = '%#StatusGit# ' .. b.git_branch .. ' %*'
l = l .. '%#StatusGit# ' .. b.git_branch .. ' %*'
end
local diff = b.git_diff
if diff then
if diff.added > 0 then
left[#left + 1] = '%#StatusGitAdded# +' .. diff.added .. '%*'
if b.git_diff then
if b.git_diff.added > 0 then
l = l .. '%#StatusGitAdded# +' .. b.git_diff.added .. '%*'
end
if diff.removed > 0 then
left[#left + 1] = '%#StatusGitRemoved# -' .. diff.removed .. '%*'
if b.git_diff.removed > 0 then
l = l .. '%#StatusGitRemoved# -' .. b.git_diff.removed .. '%*'
end
end
if b.recording then
right[#right + 1] = '%#StatusRecording# ' .. b.recording .. ' %*'
r = r .. '%#StatusRecording# ' .. b.recording .. ' %*'
end
if b.diag_str then
right[#right + 1] = b.diag_str
r = r .. b.diag_str
end
if b.lsp_icon and b.lsp_icon ~= '' then
right[#right + 1] = '%#'
r = r
.. '%#'
.. b.lsp_hl
.. '#'
.. b.lsp_icon
@@ -123,61 +120,42 @@ local function refresh_status(buf)
.. ' %*'
end
local l = #left > 0 and table.concat(left) or ''
local r = #right > 0 and table.concat(right) or ''
if b.status_left ~= l then
b.status_left = l
end
if b.status_right ~= r then
b.status_right = r
end
b.status_left, b.status_right = l, r
end
local lsp_icon = {
none = '',
starting = '',
working = ' 󰄬 ',
ready = ' 󰄭 ',
}
local lsp_hl = {
none = 'StatusLspNone',
starting = 'StatusLspNone',
working = 'StatusLspWorking',
ready = 'StatusLspReady',
local lsp_states = {
none = { '', 'StatusLspNone' },
starting = { '', 'StatusLspNone' },
working = { ' 󰄬 ', 'StatusLspWorking' },
ready = { ' 󰄭 ', 'StatusLspReady' },
}
local active_progress = {}
local function refresh_lsp(buf)
local state = 'ready'
local clients = vim.lsp.get_clients({ bufnr = buf })
local state, clients = 'ready', vim.lsp.get_clients({ bufnr = buf })
if #clients == 0 then
state = 'none'
vim.b[buf].lsp_name = ''
state, vim.b[buf].lsp_name = 'none', ''
else
local names = {}
for _, client in ipairs(clients) do
names[#names + 1] = client.name
local p = active_progress[client.id]
if p then
if p.is_starting then
if state ~= 'working' then
for _, c in ipairs(clients) do
names[#names + 1] = c.name
local p = active_progress[c.id]
if p and p.is_starting and state ~= 'working' then
state = 'starting'
end
elseif next(p.tokens) then
elseif p and next(p.tokens) then
state = 'working'
end
end
vim.b[buf].lsp_name = table.concat(names, '/')
end
end
if vim.b[buf].lsp_state == state then
return
end
vim.b[buf].lsp_state = state
vim.b[buf].lsp_icon = lsp_icon[state]
vim.b[buf].lsp_hl = lsp_hl[state]
vim.b[buf].lsp_icon, vim.b[buf].lsp_hl =
lsp_states[state][1], lsp_states[state][2]
refresh_status(buf)
vim.cmd.redrawstatus()
schedule_redraw()
end
vim.api.nvim_create_autocmd({ 'LspAttach', 'LspDetach' }, {
@@ -237,10 +215,13 @@ vim.api.nvim_create_autocmd('LspProgress', {
end
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client then
for buf in pairs(client.attached_buffers) do
for _, win in ipairs(vim.api.nvim_list_wins()) do
local buf = vim.api.nvim_win_get_buf(win)
if client.attached_buffers[buf] then
refresh_lsp(buf)
end
end
end
end,
})
@@ -282,7 +263,7 @@ local function refresh_branch(buf)
vim.b[buf].git_branch = branch ~= '' and (BRANCH_ICON .. branch)
or ''
refresh_status(buf)
vim.cmd.redrawstatus()
schedule_redraw()
end)
)
end
@@ -329,37 +310,35 @@ local function refresh_diff(buf, force)
end
end
refresh_status(buf)
vim.cmd.redrawstatus()
schedule_redraw()
end)
)
end
local function refresh_diag(buf)
local count = vim.diagnostic.count(buf)
local sev = vim.diagnostic.severity
local parts = {}
if (count[sev.ERROR] or 0) > 0 then
parts[#parts + 1] = '%#StatusDiagError# E' .. count[sev.ERROR] .. ' %*'
end
if (count[sev.WARN] or 0) > 0 then
parts[#parts + 1] = '%#StatusDiagWarn# W' .. count[sev.WARN] .. ' %*'
end
if (count[sev.HINT] or 0) > 0 then
parts[#parts + 1] = '%#StatusDiagHint# H' .. count[sev.HINT] .. ' %*'
end
vim.b[buf].diag_str = #parts > 0 and table.concat(parts) or ''
local c, s = vim.diagnostic.count(buf), vim.diagnostic.severity
local e, w, h = c[s.ERROR] or 0, c[s.WARN] or 0, c[s.HINT] or 0
vim.b[buf].diag_str = (e > 0 and '%#StatusDiagError# E' .. e .. ' %*' or '')
.. (w > 0 and '%#StatusDiagWarn# W' .. w .. ' %*' or '')
.. (h > 0 and '%#StatusDiagHint# H' .. h .. ' %*' or '')
refresh_status(buf)
vim.cmd.redrawstatus()
schedule_redraw()
end
vim.api.nvim_create_autocmd('DiagnosticChanged', {
callback = function(ev)
refresh_diag(ev.buf)
vim.cmd.redrawstatus()
local grp = vim.api.nvim_create_augroup('StatuslineEvents', { clear = true })
local current_mode = 'n'
vim.api.nvim_create_autocmd('ModeChanged', {
group = grp,
pattern = '*:*',
callback = function()
current_mode = vim.api.nvim_get_mode().mode
schedule_redraw()
end,
})
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufNewFile' }, {
group = grp,
callback = function(ev)
if vim.bo[ev.buf].buftype == '' then
refresh_branch(ev.buf)
@@ -369,7 +348,9 @@ vim.api.nvim_create_autocmd({ 'BufEnter', 'BufNewFile' }, {
refresh_diag(ev.buf)
end,
})
vim.api.nvim_create_autocmd('FocusGained', {
group = grp,
callback = function()
local buf = vim.api.nvim_get_current_buf()
if vim.bo[buf].buftype == '' then
@@ -377,31 +358,37 @@ vim.api.nvim_create_autocmd('FocusGained', {
end
end,
})
vim.api.nvim_create_autocmd('BufWritePost', {
group = grp,
callback = function(ev)
refresh_diff(ev.buf, true)
end,
})
vim.api.nvim_create_autocmd('RecordingEnter', {
pattern = '*',
vim.api.nvim_create_autocmd('DiagnosticChanged', {
group = grp,
callback = function(ev)
vim.b[ev.buf].recording = 'Rec @' .. vim.fn.reg_recording()
refresh_status(ev.buf)
refresh_diag(ev.buf)
end,
})
vim.api.nvim_create_autocmd('RecordingLeave', {
pattern = '*',
vim.api.nvim_create_autocmd({ 'RecordingEnter', 'RecordingLeave' }, {
group = grp,
callback = function(ev)
if ev.event == 'RecordingEnter' then
vim.b[ev.buf].recording = 'Rec @' .. vim.fn.reg_recording()
else
vim.b[ev.buf].recording = nil
end
refresh_status(ev.buf)
end,
})
function _G.__statusline()
local win_id = vim.g.statusline_winid or vim.api.nvim_get_current_win()
local is_active = win_id == vim.api.nvim_get_current_win()
local current_win = vim.api.nvim_get_current_win()
local win_id = vim.g.statusline_winid or current_win
local is_active = win_id == current_win
local buf = vim.api.nvim_win_get_buf(win_id)
local b = vim.b[buf]
@@ -413,17 +400,16 @@ function _G.__statusline()
.. ' %#StatusLineNC# %l:%-2c '
end
local m = vim.api.nvim_get_mode().mode
local m = current_mode
local key = (m == '\22' or m == '\19') and m or m:sub(1, 1)
local hl = mode_hl_map[key] or 'StatusModeNormal'
local md = mode_statusline[key] or mode_statusline.default
return (mode_statusline[key] or mode_statusline['default'])
return md[1]
.. (b.status_left or '')
.. '%='
.. (b.status_right or '')
.. '%#StatusCursor# %l:%-2c '
.. '%#'
.. hl
.. '%#StatusCursor# %l:%-2c %#'
.. md[2]
.. '# %p%% %*'
end
+6 -2
View File
@@ -47,7 +47,7 @@
"src": "https://github.com/MunifTanjim/nui.nvim"
},
"nvim-lspconfig": {
"rev": "3e8d598d3b5f8338a41699c436e5fa11d2666cf0",
"rev": "910f0c4d46aa186641518395bc7e6fffb4d23baf",
"src": "https://github.com/neovim/nvim-lspconfig"
},
"nvim-navic": {
@@ -59,7 +59,7 @@
"src": "https://github.com/alexghergh/nvim-tmux-navigation"
},
"nvim-treesitter": {
"rev": "910fdf6f49e9dee7e7257c7d11a76b040fdfb9de",
"rev": "e289100ff98969e118c702199d88b764ce9e7fdf",
"src": "https://github.com/nvim-treesitter/nvim-treesitter"
},
"nvim-ts-autotag": {
@@ -81,6 +81,10 @@
"trouble.nvim": {
"rev": "bd67efe408d4816e25e8491cc5ad4088e708a69a",
"src": "https://github.com/folke/trouble.nvim"
},
"vellum.nvim": {
"rev": "c9a8665c5d306bf56c6df89896fed8bfaf3110b3",
"src": "https://github.com/blackhat-7/vellum.nvim"
}
}
}