Compare commits

..
28 Commits
Author SHA1 Message Date
Job Jobse cf28a408eb chore: remove unused keymaps 2026-09-17 14:20:06 +02:00
Job79 0feb2c324e chore: disable italic text 2026-09-15 20:48:46 +02:00
Job79 3b18b6c7c0 feat: add some more options for git diff 2026-09-15 20:20:00 +02:00
Job79 1203d6be6c fix: colors of mini.diff 2026-09-15 19:49:31 +02:00
Job79 9853ec0dbb chore: use lua as much as possible 2026-09-14 21:02:46 +02:00
Job79 987a52e779 chore: fix formatting 2026-09-14 20:43:47 +02:00
Job79 f6ed9c992c fix: always load nvim-treesitter 2026-09-14 20:38:03 +02:00
Job79 10406758d8 fix: make ai shortcut generic 2026-09-11 21:38:35 +02:00
Job79 2616b14b9f chore: update deps 2026-09-11 21:34:48 +02:00
Job79 1cf3eef5e9 fix: small improvements 2026-09-11 21:32:43 +02:00
Job79 8292ff741d fix: improve picker registration 2026-09-11 20:55:00 +02:00
Job79 6dadd015bf fix: improve git workflow 2026-09-11 20:41:09 +02:00
Job79 887ade2cd7 fix: syntax highlighting on added code 2026-09-10 21:02:08 +02:00
Job Jobse 88467bfe52 feat: use biome as lsp 2026-09-08 21:19:40 +02:00
Job79 3b27bbca7b refactor: simplify diagnostics 2026-09-08 21:00:11 +02:00
Job79 d8b6f1515f feat: add shortcuts for tabs 2026-09-08 20:43:32 +02:00
Job79 2b6c4bc548 refactor: replace mini.sessions with project dirs on homepage 2026-09-08 20:43:25 +02:00
Job Jobse 76ffa507c0 fix: shortcuts 2026-09-08 19:44:45 +02:00
Job79 a28d4d2d8d fix: do not use deprecated options for bracket nagivation 2026-09-07 22:17:54 +02:00
Job79 1960b27077 chore: update deps 2026-09-07 22:14:22 +02:00
Job79 1d514baa0a refactor: lets try without mini.completion 2026-09-07 22:03:42 +02:00
Job Jobse 9af07644cd feat: switch php lsp and do use sorting 2026-09-06 21:14:04 +02:00
Job Jobse 72a7ff5949 fix: treesitter 2026-09-06 20:18:24 +02:00
Job79 5becb7c8b5 fix: quotes 2026-09-06 20:11:38 +02:00
Job79 37440d88e1 feat: use mini.safely for file events 2026-09-06 11:33:18 +02:00
Job79 4e03b0e297 refactor: small changes 2026-09-05 16:53:39 +02:00
Job79 0fffee1c1a feat: add popup terminal shortcut 2026-09-05 15:23:53 +02:00
Job79 51b5279d2e feat: disable some messages 2026-09-05 15:23:44 +02:00
8 changed files with 292 additions and 201 deletions
+23 -10
View File
@@ -1,19 +1,32 @@
-- Modules -- Modules
vim.opt.runtimepath:remove("/usr/share/nvim/site") vim.loader.enable()
for _, m in ipairs({ "netrw", "netrwPlugin", "gzip", "tarPlugin", "zipPlugin", "tutor_mode_plugin" }) do vim.opt.runtimepath:remove('/usr/share/nvim/site')
vim.g["loaded_" .. m] = 1 -- Block unused built-in modules for _, m in ipairs({
'netrw', 'netrwPlugin',
'gzip', 'tarPlugin',
'tutor_mode_plugin',
'remote_plugins',
'nvim_zip_plugin',
'nvim_net_plugin',
'spellfile_plugin',
}) do
vim.g['loaded_' .. m] = 1
end
for _, p in ipairs({ 'node', 'python3', 'perl', 'ruby' }) do
vim.g['loaded_' .. p .. '_provider'] = 0
end end
-- Config Global -- Config Global
vim.pack.add({ "https://github.com/nvim-mini/mini.nvim" }) vim.pack.add({ 'https://github.com/nvim-mini/mini.nvim' })
local misc = require("mini.misc") local misc = require('mini.misc')
local gr = vim.api.nvim_create_augroup("custom-config", {}) local gr = vim.api.nvim_create_augroup('custom-config', {})
_G.Config = { _G.Config = {
now = function(f) misc.safely("now", f) end, now = function(f) misc.safely('now', f) end,
later = function(f) misc.safely("later", f) end, later = function(f) misc.safely('later', f) end,
autocmd = function(event, pattern, callback, desc) autocmd = function(event, pattern, callback, desc, once)
vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc }) vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc, once = once })
end end
} }
+48
View File
@@ -0,0 +1,48 @@
local ns = vim.api.nvim_create_namespace('git_status')
local hls = { M = 'DiagnosticWarn', ['?'] = 'DiagnosticInfo', A = 'DiagnosticOk', D = 'DiagnosticError', R = 'DiagnosticWarn' }
local function show(buf_id, items, query)
MiniPick.default_show(buf_id, items, query)
vim.api.nvim_buf_clear_namespace(buf_id, ns, 0, -1)
for i, item in ipairs(items) do
if item.hl then
vim.api.nvim_buf_set_extmark(buf_id, ns, i - 1, 1, { end_col = 3, hl_group = item.hl, priority = 202, hl_mode = 'combine' })
end
end
end
return {
status = function()
local lines = vim.fn.systemlist('git status -s -u')
if vim.v.shell_error ~= 0 then
return vim.notify('Not a git repository', vim.log.levels.WARN)
end
local items = {}
for _, l in ipairs(lines) do
local s = l:sub(1, 2):match('%S+')
local p = l:sub(4):gsub('.* %-> ', ''):gsub('^"(.*)"$', '%1')
local hl = l:sub(1, 1) ~= ' ' and l:sub(1, 1) ~= '?' and 'DiagnosticOk' or hls[s:sub(1, 1)]
items[#items + 1] = {
text = string.format(' %-2s %s', s == '??' and '?' or s, p),
path = p,
hl = hl,
}
end
if #items == 0 then return vim.notify('No changes', vim.log.levels.INFO) end
MiniPick.start({
source = { items = items, name = 'Git Status', show = show },
mappings = {
quickfix = {
char = '<C-q>',
func = function()
local m = MiniPick.get_picker_matches()
MiniPick.default_choose_marked(#m.marked > 0 and m.marked or m.all)
return true
end,
},
},
})
end,
}
+8 -15
View File
@@ -1,26 +1,19 @@
local M = {} local function open(cmd)
-- Open a command in a simple centered floating window
function M.open_terminal_app(cmd)
local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = "wipe"
local lines = vim.o.lines - vim.o.cmdheight - (vim.o.laststatus > 0 and 1 or 0) local lines = vim.o.lines - vim.o.cmdheight - (vim.o.laststatus > 0 and 1 or 0)
local w = math.floor(vim.o.columns * 0.95) local w, h = math.floor(vim.o.columns * 0.95), math.floor(lines * 0.95)
local h = math.floor(lines * 0.95) local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
local win = vim.api.nvim_open_win(buf, true, { local win = vim.api.nvim_open_win(buf, true, {
relative = "editor", relative = 'editor',
width = w, width = w,
height = h, height = h,
row = math.floor((lines - h) / 2), row = math.floor((lines - h) / 2),
col = math.floor((vim.o.columns - w) / 2), col = math.floor((vim.o.columns - w) / 2),
border = "rounded", border = 'rounded',
}) })
vim.fn.termopen(cmd, { vim.fn.termopen(cmd, { on_exit = function() pcall(vim.api.nvim_win_close, win, true) end })
on_exit = function() pcall(vim.api.nvim_win_close, win, true) end,
})
end end
return M return { open = open }
+4 -4
View File
@@ -5,19 +5,19 @@
"src": "https://github.com/stevearc/conform.nvim" "src": "https://github.com/stevearc/conform.nvim"
}, },
"mini.nvim": { "mini.nvim": {
"rev": "9d01f392b33fb2ba36fbc87fc0bf4453e63ffb0a", "rev": "ac5dffcc52b8378fbb15efeb0497a83e57a0b01c",
"src": "https://github.com/nvim-mini/mini.nvim" "src": "https://github.com/nvim-mini/mini.nvim"
}, },
"nvim-dap": { "nvim-dap": {
"rev": "c9a0738e45f1bd41d792a126941348dce661cf9b", "rev": "cfa2d58f4537aca6ca83e2de1a0d9f1491121264",
"src": "https://github.com/mfussenegger/nvim-dap" "src": "https://github.com/mfussenegger/nvim-dap"
}, },
"nvim-lspconfig": { "nvim-lspconfig": {
"rev": "85e732c62ac59ab7c12df71ddd020baa87948390", "rev": "ac9d2f7c4757db6320cab6697fe73e5e8adb2457",
"src": "https://github.com/neovim/nvim-lspconfig" "src": "https://github.com/neovim/nvim-lspconfig"
}, },
"nvim-treesitter": { "nvim-treesitter": {
"rev": "427e9222363d07c32d6db6169e4049c28d58d141", "rev": "9a168f6357ed21c3a636e1727bc7d382abc451b8",
"src": "https://github.com/nvim-treesitter/nvim-treesitter" "src": "https://github.com/nvim-treesitter/nvim-treesitter"
}, },
"rose-pine": { "rose-pine": {
+30 -36
View File
@@ -1,29 +1,30 @@
-- General -- General
vim.g.mapleader = ' ' -- Use `<Space>` as <Leader> key vim.g.mapleader = ' ' -- Use `<Space>` as <Leader> key
vim.o.undofile = true -- Enable persistent undo vim.o.undofile = true -- Enable persistent undo
vim.o.shada = "'100,<50,s10,:1000,/100,@100,h" -- Limit ShaDa file (for startup) vim.o.shada = "'50,<20,s10,:100,/50,@50,h" -- Limit ShaDa file (for startup)
-- UI -- UI
vim.o.breakindent = true -- Indent wrapped lines to match line start vim.o.breakindent = true -- Indent wrapped lines to match line start
vim.o.breakindentopt = 'list:-1' -- Add padding for lists (if 'wrap' is set) vim.o.breakindentopt = 'list:-1' -- Add padding for lists (if 'wrap' is set)
vim.o.cursorline = true -- Enable current line highlighting vim.o.cursorline = true -- Enable current line highlighting
vim.o.linebreak = true -- Wrap lines at 'breakat' (if 'wrap' is set) vim.o.linebreak = true -- Wrap lines at 'breakat' (if 'wrap' is set)
vim.o.list = true -- Show helpful text indicators vim.o.list = true -- Show helpful text indicators
vim.o.number = true -- Show line numbers vim.o.listchars = 'tab:→ ,trail:·,nbsp:␣' -- Characters for list mode
vim.o.pumheight = 10 -- Make popup menu smaller vim.o.number = true -- Show line numbers
vim.o.pummaxwidth = 60 -- Make popup menu not too wide vim.o.pumheight = 10 -- Make popup menu smaller
vim.o.shortmess = 'CFOSWaco' -- Disable some built-in completion messages vim.o.pummaxwidth = 80 -- Make popup menu not too wide
vim.o.signcolumn = 'yes' -- Always show signcolumn (less flicker) vim.o.shortmess = 'CFOSWacou' -- Disable some built-in completion messages
vim.o.splitbelow = true -- Horizontal splits will be below vim.o.signcolumn = 'yes' -- Always show signcolumn (less flicker)
vim.o.splitkeep = 'screen' -- Reduce scroll during window split vim.o.splitbelow = true -- Horizontal splits will be below
vim.o.splitright = true -- Vertical splits will be to the right vim.o.splitkeep = 'screen' -- Reduce scroll during window split
vim.o.wrap = false -- Don't visually wrap lines vim.o.splitright = true -- Vertical splits will be to the right
vim.o.winborder = 'rounded' -- Use border in floating windows vim.o.wrap = false -- Don't visually wrap lines
vim.o.pumborder = 'rounded' -- Use border in popup menu vim.o.winborder = 'rounded' -- Use border in floating windows
vim.o.cmdheight = 0 -- Hide the command line when not in use vim.o.pumborder = 'rounded' -- Use border in popup menu
vim.cmd('syntax off') -- Disable legacy syntax highlighting vim.o.cmdheight = 0 -- Hide the command line when not in use
require("vim._core.ui2").enable({ -- Enable new ui (requires nightly) vim.cmd('syntax off') -- Disable legacy syntax highlighting
msg = { targets = "msg" } require('vim._core.ui2').enable({ -- Enable new ui (requires nightly)
msg = { targets = 'msg' }
}) })
-- Editing -- Editing
@@ -36,35 +37,28 @@ vim.o.smartcase = true -- Respect case if search pattern has upper case
vim.o.spelloptions = 'camel' -- Treat camelCase word parts as separate words vim.o.spelloptions = 'camel' -- Treat camelCase word parts as separate words
vim.o.tabstop = 2 -- Show tab as this number of spaces vim.o.tabstop = 2 -- Show tab as this number of spaces
vim.o.virtualedit = 'block' -- Allow going past end of line in blockwise mode vim.o.virtualedit = 'block' -- Allow going past end of line in blockwise mode
vim.opt.autoread = true -- Do not prompt to reread files on update
vim.o.complete = '.,w,b,kspell' -- Use less sources vim.o.complete = '.,w,b,kspell' -- Use less sources
vim.o.completeopt = 'menuone,noselect,fuzzy,nosort' -- Use custom behavior vim.o.completeopt = 'menuone,noselect,fuzzy' -- Use custom behavior
vim.o.completetimeout = 100 -- Limit sources delay
-- Autocommands -- Autocommands
Config.autocmd('TextYankPost', '*', function() vim.hl.hl_op() end, 'Highlight yanked text') Config.autocmd('TextYankPost', '*', function() vim.hl.hl_op() end, 'Highlight yanked text')
Config.autocmd('TermOpen', '*', function() vim.cmd('startinsert') end, 'Start insert mode when terminal opens') Config.autocmd('TermOpen', '*', function() vim.cmd('startinsert') end, 'Start insert mode when terminal opens')
Config.autocmd('LspAttach', '*', function(ev) vim.bo[ev.buf].complete = 'o' end, 'Use lsp completions')
-- Diagnostics -- Diagnostics
Config.later(function() Config.later(function()
vim.diagnostic.config({ vim.diagnostic.config({
jump = { on_jump = vim.diagnostic.open_float },
signs = { signs = {
priority = 9999, priority = 9999,
severity = { min = vim.diagnostic.severity.WARN, max = vim.diagnostic.severity.ERROR }, severity = { min = vim.diagnostic.severity.INFO },
text = { text = {
[vim.diagnostic.severity.ERROR] = '', [vim.diagnostic.severity.ERROR] = '',
[vim.diagnostic.severity.WARN] = '', [vim.diagnostic.severity.WARN] = '',
[vim.diagnostic.severity.INFO] = '', [vim.diagnostic.severity.INFO] = '',
[vim.diagnostic.severity.HINT] = '',
}, },
}, },
underline = { severity = { min = vim.diagnostic.severity.HINT, max = vim.diagnostic.severity.ERROR } }, virtual_text = false,
virtual_lines = false,
virtual_text = {
current_line = true,
severity = { min = vim.diagnostic.severity.ERROR, max = vim.diagnostic.severity.ERROR },
},
update_in_insert = false,
}) })
end) end)
+102 -76
View File
@@ -1,108 +1,134 @@
-- Clues -- Clues
Config.leader_group_clues = { Config.leader_group_clues = {
{ mode = "n", keys = "<Leader>b", desc = "+Buffer" }, { mode = 'n', keys = '<Leader>b', desc = '+Buffer' },
{ mode = "n", keys = "<Leader>d", desc = "+Debug" }, { mode = 'n', keys = '<Leader>d', desc = '+Debug' },
{ mode = "n", keys = "<Leader>e", desc = "+Explore" }, { mode = 'n', keys = '<Leader>e', desc = '+Explore' },
{ mode = "n", keys = "<Leader>f", desc = "+Find" }, { mode = 'n', keys = '<Leader>f', desc = '+Find' },
{ mode = "n", keys = "<Leader>g", desc = "+Git" }, { mode = 'n', keys = '<Leader>g', desc = '+Git' },
{ mode = "n", keys = "<Leader>l", desc = "+Language" }, { mode = 'n', keys = '<Leader>l', desc = '+Language' },
{ mode = "n", keys = "<Leader>r", desc = "+Request" }, { mode = 'n', keys = '<Leader>r', desc = '+Request' },
{ mode = "n", keys = "<Leader>s", desc = "+Session" }, { mode = 'n', keys = '<Leader>t', desc = '+Terminal' },
{ mode = "n", keys = "<Leader>t", desc = "+Terminal" }, { mode = 'n', keys = '<Leader><Tab>', desc = '+Tab' },
{ mode = "x", keys = "<Leader>g", desc = "+Git" }, { mode = 'x', keys = '<Leader>g', desc = '+Git' },
{ mode = "x", keys = "<Leader>l", desc = "+Language" }, { mode = 'x', keys = '<Leader>l', desc = '+Language' },
} }
-- Keymap Helpers -- Keymap Helpers
local function map(mode, lhs, rhs, desc) local nmap_leader = function(suffix, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { desc = desc, silent = true }) vim.keymap.set('n', '<Leader>' .. suffix, rhs, { desc = desc, silent = true })
end end
local function leader(suffix, rhs, desc, mode) local xmap_leader = function(suffix, rhs, desc)
map(mode or "n", "<Leader>" .. suffix, rhs, desc) vim.keymap.set('x', '<Leader>' .. suffix, rhs, { desc = desc, silent = true })
end end
-- Buffers -- Buffers
leader("bd", "<cmd>bdelete<CR>", "Delete") local new_scratch_buffer = function()
leader("bD", "<cmd>bdelete!<CR>", "Delete!") vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(true, true))
leader("bw", "<cmd>bwipeout<CR>", "Wipeout") end
leader("bW", "<cmd>bwipeout!<CR>", "Wipeout!")
leader("bo", function() local close_invisible_buffers = function()
local visible = vim.iter(vim.api.nvim_list_wins()):map(vim.api.nvim_win_get_buf):totable() local visible = vim.iter(vim.api.nvim_list_wins()):map(vim.api.nvim_win_get_buf):totable()
vim.iter(vim.api.nvim_list_bufs()) vim.iter(vim.api.nvim_list_bufs())
:filter(function(buf) return not vim.list_contains(visible, buf) end) :filter(function(buf) return not vim.list_contains(visible, buf) end)
:each(function(buf) pcall(vim.api.nvim_buf_delete, buf, { force = false }) end) :each(function(buf) pcall(vim.api.nvim_buf_delete, buf, { force = false }) end)
end, "Close invisible buffers") end
nmap_leader('bd', vim.cmd.bdelete, 'Delete')
nmap_leader('bs', new_scratch_buffer, 'Scratch')
nmap_leader('bw', vim.cmd.bwipeout, 'Wipeout')
nmap_leader('bo', close_invisible_buffers, 'Close invisible buffers')
-- Debug -- Debug
leader("db", function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint") nmap_leader('db', function() require('dap').toggle_breakpoint() end, 'Toggle Breakpoint')
leader("dl", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point: ")) end, "Log point") nmap_leader('dl', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point: ')) end, 'Log point')
leader("dc", function() require("dap").continue() end, "Run/Continue") nmap_leader('dc', function() require('dap').continue() end, 'Run/Continue')
leader("dC", function() require("dap").run_to_cursor() end, "Run to Cursor") nmap_leader('dC', function() require('dap').run_to_cursor() end, 'Run to Cursor')
leader("de", function() require("dap.ui.widgets").hover() end, "Inspect") nmap_leader('de', function() require('dap.ui.widgets').hover() end, 'Inspect')
leader("dr", function() require("dap").repl.open() end, "Open REPL") nmap_leader('dr', function() require('dap').repl.open() end, 'Open REPL')
leader("dt", function() require("dap").terminate() end, "Terminate") nmap_leader('dt', function() require('dap').terminate() end, 'Terminate')
-- Explore -- Explore
leader("ed", function() MiniFiles.open() end, "Directory") local explore_at_file = function()
leader("ef", function()
local file = vim.api.nvim_buf_get_name(0) local file = vim.api.nvim_buf_get_name(0)
MiniFiles.open(vim.uv.fs_stat(file) and file or nil) MiniFiles.open(vim.uv.fs_stat(file) and file or nil)
end, "File directory") end
leader("ey", function() vim.fn.setreg("+", vim.api.nvim_buf_get_name(0)) end, "Yank absolute path")
nmap_leader('ed', function() MiniFiles.open() end, 'Directory')
nmap_leader('ef', explore_at_file, 'File directory')
nmap_leader('ey', function() vim.fn.setreg('+', vim.fn.fnamemodify(vim.api.nvim_buf_get_name(0), ':.')) end, 'Yank relative path')
nmap_leader('eY', function() vim.fn.setreg('+', vim.api.nvim_buf_get_name(0)) end, 'Yank absolute path')
nmap_leader('en', vim.cmd.messages, 'Notifications')
-- Find -- Find
leader("fb", function() MiniPick.builtin.buffers() end, "Buffers") nmap_leader('fb', function() MiniPick.builtin.buffers() end, 'Buffers')
leader("fc", function() MiniExtra.pickers.git_commits() end, "Commits (all)") nmap_leader('fc', function() MiniExtra.pickers.git_commits() end, 'Commits (all)')
leader("fC", function() MiniExtra.pickers.git_commits({ path = "%" }) end, "Commits (buf)") nmap_leader('fC', function() MiniExtra.pickers.git_commits({ path = vim.fn.expand('%') }) end, 'Commits (buf)')
leader("fd", function() MiniExtra.pickers.diagnostic({ scope = "all" }) end, "Diagnostic workspace") nmap_leader('fd', function() MiniExtra.pickers.diagnostic({ scope = 'all' }) end, 'Diagnostic workspace')
leader("fD", function() MiniExtra.pickers.diagnostic({ scope = "current" }) end, "Diagnostic buffer") nmap_leader('fD', function() MiniExtra.pickers.diagnostic({ scope = 'current' }) end, 'Diagnostic buffer')
leader("ff", function() MiniPick.builtin.files() end, "Files") nmap_leader('ff', function() MiniPick.builtin.files() end, 'Files')
leader("fg", function() MiniPick.builtin.grep_live() end, "Grep live") nmap_leader('fg', function() MiniPick.builtin.grep_live() end, 'Grep live')
leader("fG", function() MiniPick.builtin.grep({ pattern = vim.fn.expand("<cword>") }) end, "Grep word") nmap_leader('fG', function() MiniPick.builtin.grep({ pattern = vim.fn.expand('<cword>') }) end, 'Grep word')
leader("fh", function() MiniPick.builtin.help() end, "Help tags") nmap_leader('fh', function() MiniPick.builtin.help() end, 'Help tags')
leader("fl", function() MiniPick.builtin.buf_lines({ scope = "all" }) end, "Lines (all)") nmap_leader('fl', function() MiniExtra.pickers.buf_lines({ scope = 'all' }) end, 'Lines (all)')
leader("fL", function() MiniPick.builtin.buf_lines({ scope = "current" }) end, "Lines (buf)") nmap_leader('fL', function() MiniExtra.pickers.buf_lines({ scope = 'current' }) end, 'Lines (buf)')
leader("fr", function() MiniPick.builtin.resume() end, "Resume") nmap_leader('fm', function() require('git').status() end, 'Modified / changed files')
leader("fs", function() MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" }) end, "Symbols workspace") nmap_leader('fo', function() MiniExtra.pickers.oldfiles() end, 'Old / recent files')
leader("fS", function() MiniExtra.pickers.lsp({ scope = "document_symbol" }) end, "Symbols document") nmap_leader('fr', function() MiniPick.builtin.resume() end, 'Resume')
leader("f:", function() MiniExtra.pickers.history({ scope = ":" }) end, "Command history") nmap_leader('fs', function() MiniExtra.pickers.lsp({ scope = 'workspace_symbol_live' }) end, 'Symbols workspace')
nmap_leader('fS', function() MiniExtra.pickers.lsp({ scope = 'document_symbol' }) end, 'Symbols document')
nmap_leader('f:', function() MiniExtra.pickers.history({ scope = ':' }) end, 'Command history')
-- Git -- Git
leader("go", function() MiniDiff.toggle_overlay() end, "Toggle overlay") local diff_unstaged = function()
leader("gs", function() MiniGit.show_at_cursor() end, "Show at cursor") vim.cmd.diffthis()
leader("gs", function() MiniGit.show_at_cursor() end, "Show selection", "x") vim.cmd('vert Git show :./%')
vim.cmd.diffthis()
end
nmap_leader('ga', function() vim.cmd('Git add %') end, 'Add current file')
nmap_leader('gd', diff_unstaged, 'Diff unstaged')
nmap_leader('gs', function() MiniGit.show_at_cursor() end, 'Show at cursor')
xmap_leader('gs', function() MiniGit.show_at_cursor() end, 'Show at selection')
-- Language -- Language
leader("la", vim.lsp.buf.code_action, "Actions") nmap_leader('la', function() vim.lsp.buf.code_action() end, 'Actions')
leader("ld", vim.diagnostic.open_float, "Diagnostic popup") nmap_leader('ld', function() vim.diagnostic.open_float() end, 'Diagnostic popup')
leader("lf", function() require("conform").format({ async = true }) end, "Format") nmap_leader('lf', function() require('conform').format({ async = true }) end, 'Format')
leader("lf", function() require("conform").format({ async = true }) end, "Format selection", "x") xmap_leader('lf', function() require('conform').format({ async = true }) end, 'Format selection')
leader("li", vim.lsp.buf.implementation, "Implementation") nmap_leader('li', function() vim.lsp.buf.implementation() end, 'Implementation')
leader("lh", vim.lsp.buf.hover, "Hover") nmap_leader('lh', function() vim.lsp.buf.hover() end, 'Hover')
leader("ll", vim.lsp.codelens.run, "Lens") nmap_leader('ll', function() vim.lsp.codelens.run() end, 'Lens')
leader("lr", vim.lsp.buf.rename, "Rename") nmap_leader('lr', function() vim.lsp.buf.rename() end, 'Rename')
leader("lR", vim.lsp.buf.references, "References") nmap_leader('lR', function() vim.lsp.buf.references() end, 'References')
leader("ls", vim.lsp.buf.definition, "Source definition") nmap_leader('ls', function() vim.lsp.buf.definition() end, 'Source definition')
leader("lt", vim.lsp.buf.type_definition, "Type definition") nmap_leader('lt', function() vim.lsp.buf.type_definition() end, 'Type definition')
-- Request -- Request
leader("rs", function() require("kulala").run() end, "Send HTTP request") nmap_leader('rs', function() require('kulala').run() end, 'Send HTTP request')
-- Session
leader("sd", function() MiniSessions.select("delete") end, "Delete")
leader("sn", function() vim.ui.input({ prompt = "Session name: " }, MiniSessions.write) end, "New")
leader("sr", function() MiniSessions.select("read") end, "Read")
leader("sR", function() MiniSessions.restart() end, "Restart")
leader("sw", function() MiniSessions.write() end, "Write current")
-- Terminal -- Terminal
leader("tT", "<cmd>horizontal term<CR>", "Terminal (horizontal)") local open_ai = function()
leader("tt", "<cmd>vertical term<CR>", "Terminal (vertical)") vim.cmd('vertical term ' .. (vim.fn.executable('pi') == 1 and 'pi' or 'claude'))
leader("tc", "<cmd>vertical term claude<CR>", "Claude") end
leader("tg", function() require("terminal").open_terminal_app("lazygit") end, "LazyGit")
leader("ts", function() require("terminal").open_terminal_app("lazysql") end, "LazySQL") nmap_leader('tT', function() vim.cmd('horizontal term') end, 'Terminal (horizontal)')
nmap_leader('tt', function() vim.cmd('vertical term') end, 'Terminal (vertical)')
nmap_leader('ta', open_ai, 'AI')
nmap_leader('tf', function() require('terminal').open(vim.o.shell) end, 'Terminal (popup)')
nmap_leader('tg', function() require('terminal').open('lazygit') end, 'LazyGit')
nmap_leader('ts', function() require('terminal').open('lazysql') end, 'LazySQL')
-- Tabs
nmap_leader('<Tab><Tab>', vim.cmd.tabnew, 'New tab')
nmap_leader('<Tab>d', vim.cmd.tabclose, 'Close tab')
nmap_leader('<Tab>]', vim.cmd.tabnext, 'Next tab')
nmap_leader('<Tab>[', vim.cmd.tabprevious, 'Previous tab')
-- Brackets
vim.keymap.set('n', ']d', function() vim.diagnostic.jump({ count = 1 }) end, { desc = 'Next diagnostic' })
vim.keymap.set('n', '[d', function() vim.diagnostic.jump({ count = -1 }) end, { desc = 'Previous diagnostic' })
-- Overwrites -- Overwrites
map("n", "<Esc>", "<cmd>nohlsearch<CR>", "Clear highlights") vim.keymap.set('n', '<Esc>', vim.cmd.nohlsearch, { desc = 'Clear highlights', silent = true })
map("t", "<C-w>", "<C-\\><C-n><C-w>", "Terminal window navigation") vim.keymap.set('t', '<C-w>', '<C-\\><C-n><C-w>', { desc = 'Terminal window navigation', silent = true })
+26 -26
View File
@@ -3,11 +3,31 @@ Config.now(function()
-- Global icon provider -- Global icon provider
require('mini.icons').setup() require('mini.icons').setup()
Config.later(MiniIcons.tweak_lsp_kind) Config.later(MiniIcons.tweak_lsp_kind)
-- Start screen, statusline, and session management
require('mini.starter').setup()
require('mini.statusline').setup() require('mini.statusline').setup()
require('mini.sessions').setup()
local starter = require('mini.starter')
starter.setup({
items = {
function()
return vim.iter({ vim.fn.glob('~/Code/*', 0, 1), vim.fn.glob('~/Documents/*/*', 0, 1) })
:flatten()
:filter(function(p) return vim.fn.isdirectory(p) == 1 end)
:map(function(p)
return {
name = vim.fn.fnamemodify(p, ':t'),
action = function()
vim.fn.chdir(p)
require('mini.files').open(p)
end,
section = 'Projects',
}
end)
:totable()
end,
starter.sections.builtin_actions(),
},
})
end) end)
Config.later(function() Config.later(function()
@@ -48,10 +68,10 @@ end)
-- Editing & Navigation -- Editing & Navigation
Config.later(function() Config.later(function()
require('mini.ai').setup() require('mini.ai').setup()
require('mini.surround').setup() require('mini.pairs').setup()
require('mini.pick').setup() require('mini.pick').setup()
require('mini.bracketed').setup()
require('mini.extra').setup() require('mini.extra').setup()
MiniPick.registry.git_status = function() require('git').status() end
end) end)
-- File Explorer -- File Explorer
@@ -59,30 +79,10 @@ Config.now_if_args(function()
require('mini.files').setup() require('mini.files').setup()
Config.autocmd('User', 'MiniFilesExplorerOpen', function() Config.autocmd('User', 'MiniFilesExplorerOpen', function()
MiniFiles.set_bookmark('c', vim.fn.stdpath('config'), { desc = 'Config' }) MiniFiles.set_bookmark('c', vim.fn.stdpath('config'), { desc = 'Config' })
MiniFiles.set_bookmark('d', vim.fn.expand('~/Documents'), { desc = 'Documents' })
MiniFiles.set_bookmark('w', vim.fn.getcwd, { desc = 'Working directory' }) MiniFiles.set_bookmark('w', vim.fn.getcwd, { desc = 'Working directory' })
end, 'Add default marks') end, 'Add default marks')
end) end)
-- Completion
Config.later(function()
require('mini.completion').setup({
lsp_completion = {
source_func = 'omnifunc',
auto_setup = false,
process_items = function(items, base)
return MiniCompletion.default_process_items(items, base, { kind_priority = { Text = -1 } })
end,
},
})
Config.autocmd('LspAttach', nil, function(ev)
vim.bo[ev.buf].omnifunc = 'v:lua.MiniCompletion.completefunc_lsp'
end, "Set 'omnifunc'")
vim.lsp.config('*', { capabilities = MiniCompletion.get_lsp_capabilities() })
end)
-- Utilities -- Utilities
Config.now_if_args(function() Config.now_if_args(function()
require('mini.misc').setup() require('mini.misc').setup()
+51 -34
View File
@@ -1,21 +1,28 @@
-- Colortheme -- Colortheme
Config.now(function() Config.now(function()
vim.pack.add({ { src = "https://github.com/rose-pine/neovim", name = "rose-pine" } }) vim.pack.add({ { src = 'https://github.com/rose-pine/neovim', name = 'rose-pine' } })
require("rose-pine").setup({ require('rose-pine').setup({
enable = { terminal = false, legacy_highlights = false, migrations = false }, enable = { terminal = false, legacy_highlights = false, migrations = false, },
styles = { italic = false },
highlight_groups = {
MiniDiffOverAdd = { fg = 'NONE', bg = 'foam', blend = 20 },
MiniDiffOverChangeBuf = { bg = 'rose', blend = 20 },
},
}) })
vim.cmd("colorscheme rose-pine")
vim.cmd.colorscheme('rose-pine')
end) end)
-- Treesitter -- Treesitter
Config.now_if_args(function() Config.now_if_args(function()
vim.pack.add({ 'https://github.com/nvim-treesitter/nvim-treesitter' }) vim.pack.add({ 'https://github.com/nvim-treesitter/nvim-treesitter' })
vim.treesitter.language.register('tsx', { 'typescriptreact' }) vim.treesitter.language.register('bash', 'sh')
vim.treesitter.language.register('tsx', 'typescriptreact')
local filetypes = { local filetypes = {
'html', 'css', 'lua', 'go', 'php', 'blade', 'sql', 'javascript', 'html', 'css', 'lua', 'go', 'php', 'blade', 'sql', 'javascript',
'typescript', 'typescriptreact', 'svelte', 'dockerfile', 'yaml', 'markdown', 'dart', 'typescript', 'typescriptreact', 'svelte', 'dockerfile', 'yaml', 'markdown', 'dart',
'json', 'xml', 'toml', 'sh', 'bash', 'zsh', 'just', 'gitcommit', 'diff', 'regex', 'http' 'json', 'xml', 'toml', 'sh', 'zsh', 'just', 'gitcommit', 'diff', 'regex', 'http'
} }
Config.autocmd('FileType', filetypes, function(ev) Config.autocmd('FileType', filetypes, function(ev)
@@ -25,40 +32,49 @@ Config.now_if_args(function()
end, 'Start tree-sitter') end, 'Start tree-sitter')
Config.later(function() Config.later(function()
require('nvim-treesitter').install(vim.tbl_map(function(ft) local missing = {}
return vim.treesitter.language.get_lang(ft) or ft
end, filetypes)) for _, ft in ipairs(filetypes) do
local lang = vim.treesitter.language.get_lang(ft) or ft
if #vim.api.nvim_get_runtime_file('parser/' .. lang .. '.so', false) == 0 then
table.insert(missing, lang)
end
end
if #missing > 0 then
require('nvim-treesitter').install(missing)
end
end) end)
end) end)
-- LSP -- LSP
Config.now_if_args(function() Config.now_if_args(function()
vim.pack.add({ "https://github.com/neovim/nvim-lspconfig" }) vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' })
vim.lsp.enable({ "ansiblels", "gopls", "intelephense", "lua_ls", "svelte", "tailwindcss", "tsc", "dartls" }) vim.lsp.enable({ 'ansiblels', 'gopls', 'phpantom_lsp', 'svelte', 'tailwindcss', 'tsc', 'biome' })
end) end)
-- Formatting -- Formatting
Config.later(function() Config.later(function()
vim.pack.add({ "https://github.com/stevearc/conform.nvim" }) vim.pack.add({ 'https://github.com/stevearc/conform.nvim' })
require("conform").setup({ require('conform').setup({
default_format_opts = { lsp_format = "fallback" }, default_format_opts = { lsp_format = 'fallback' },
format_on_save = { lsp_format = "fallback", timeout_ms = 1000 }, format_on_save = { lsp_format = 'fallback', timeout_ms = 1000 },
formatters_by_ft = { formatters_by_ft = {
go = { "gofumpt", "goimports" }, go = { 'gofumpt', 'goimports' },
php = { "php_cs_fixer" }, php = { 'php_cs_fixer' },
json = { "jq" }, json = { 'jq' },
javascript = { "biome" }, javascript = { 'biome' },
typescript = { "biome" }, typescript = { 'biome' },
javascriptreact = { "biome" }, javascriptreact = { 'biome' },
typescriptreact = { "biome" }, typescriptreact = { 'biome' },
svelte = { "biome" }, svelte = { 'biome' },
}, },
}) })
end) end)
-- DAP -- DAP
Config.later(function() Config.later(function()
vim.pack.add({ "https://github.com/mfussenegger/nvim-dap" }) vim.pack.add({ 'https://github.com/mfussenegger/nvim-dap' })
local dap_signs = { local dap_signs = {
DapBreakpoint = { text = '', texthl = 'DapBreakpoint' }, DapBreakpoint = { text = '', texthl = 'DapBreakpoint' },
@@ -71,19 +87,20 @@ Config.later(function()
vim.fn.sign_define(name, sign) vim.fn.sign_define(name, sign)
end end
require("dap").adapters.go = { type = "server", host = "127.0.0.1", port = "${port}" } require('dap').adapters.go = { type = 'server', host = '127.0.0.1', port = '${port}' }
end) end)
-- Kulala & Flutter -- Kulala
Config.autocmd('FileType', { 'http' }, function() Config.autocmd('FileType', 'http', function()
vim.pack.add({ "https://github.com/mistweaverco/kulala.nvim" }) vim.pack.add({ 'https://github.com/mistweaverco/kulala.nvim' })
require("kulala").setup({ default_env = "dev" }) require('kulala').setup({ default_env = 'dev' })
end, "Setup Kulala", true) end, 'Setup Kulala', true)
-- Flutter
Config.autocmd('FileType', 'dart', function() Config.autocmd('FileType', 'dart', function()
vim.pack.add({ vim.pack.add({
"https://github.com/nvim-lua/plenary.nvim", 'https://github.com/nvim-lua/plenary.nvim',
"https://github.com/nvim-flutter/flutter-tools.nvim", 'https://github.com/nvim-flutter/flutter-tools.nvim',
}) })
require("flutter-tools").setup({ lsp = { color_capabilities = true } }) require('flutter-tools').setup({ lsp = { color_capabilities = true } })
end, "Setup Flutter", true) end, 'Setup flutter', true)