refactor: simplify
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
-- Modules =====================================================================
|
-- Modules
|
||||||
vim.opt.runtimepath:remove("/usr/share/nvim/site")
|
vim.opt.runtimepath:remove("/usr/share/nvim/site")
|
||||||
for _, m in ipairs({ "netrw", "netrwPlugin", "gzip", "tarPlugin", "zipPlugin", "tutor_mode_plugin" }) do
|
for _, m in ipairs({ "netrw", "netrwPlugin", "gzip", "tarPlugin", "zipPlugin", "tutor_mode_plugin" }) do
|
||||||
vim.g["loaded_" .. m] = 1 -- Block unused built-in modules
|
vim.g["loaded_" .. m] = 1 -- Block unused built-in modules
|
||||||
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", {})
|
||||||
@@ -12,10 +12,8 @@ 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,
|
||||||
on_event = function(ev, f) misc.safely("event:" .. ev, f) end,
|
autocmd = function(event, pattern, callback, desc)
|
||||||
on_filetype = function(ft, f) misc.safely("filetype:" .. ft, f) end,
|
vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc })
|
||||||
autocmd = function(event, pattern, callback, desc, once)
|
|
||||||
vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc, once = once })
|
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-16
@@ -1,21 +1,5 @@
|
|||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
--- Interactive picker for selecting and running tasks defined in a Justfile.
|
|
||||||
function M.pick_just_task()
|
|
||||||
local obj = vim.system({ "just", "--summary" }, { text = true }):wait()
|
|
||||||
if obj.code ~= 0 or not obj.stdout or obj.stdout == "" then
|
|
||||||
return vim.notify("No recipes or justfile found", vim.log.levels.WARN)
|
|
||||||
end
|
|
||||||
|
|
||||||
require("mini.pick").start({
|
|
||||||
source = {
|
|
||||||
items = vim.split(vim.trim(obj.stdout), "%s+"),
|
|
||||||
name = " Just Tasks",
|
|
||||||
choose = function(choice) run_task("just " .. choice) end,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function run_task(cmd)
|
local function run_task(cmd)
|
||||||
vim.notify(" Running: " .. cmd)
|
vim.notify(" Running: " .. cmd)
|
||||||
|
|
||||||
@@ -36,4 +20,20 @@ local function run_task(cmd)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Interactive picker for standard Justfile targets
|
||||||
|
function M.pick_just_task()
|
||||||
|
local obj = vim.system({ "just", "--summary" }, { text = true }):wait()
|
||||||
|
if obj.code ~= 0 or not obj.stdout or obj.stdout == "" then
|
||||||
|
return vim.notify("No recipes or justfile found", vim.log.levels.WARN)
|
||||||
|
end
|
||||||
|
|
||||||
|
require("mini.pick").start({
|
||||||
|
source = {
|
||||||
|
items = vim.split(vim.trim(obj.stdout), "%s+"),
|
||||||
|
name = " Just Tasks",
|
||||||
|
choose = function(choice) run_task("just " .. choice) end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
+6
-3
@@ -1,15 +1,18 @@
|
|||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
--- Opens a TUI application in a simple centered floating window.
|
-- Open a command in a simple centered floating window
|
||||||
function M.open_terminal_app(cmd)
|
function M.open_terminal_app(cmd)
|
||||||
local buf = vim.api.nvim_create_buf(false, true)
|
local buf = vim.api.nvim_create_buf(false, true)
|
||||||
local w, h = math.floor(vim.o.columns * 0.95), math.floor(vim.o.lines * 0.95)
|
|
||||||
|
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 h = math.floor(lines * 0.92)
|
||||||
|
|
||||||
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((vim.o.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",
|
||||||
})
|
})
|
||||||
|
|||||||
+5
-1
@@ -8,8 +8,12 @@
|
|||||||
"rev": "9d01f392b33fb2ba36fbc87fc0bf4453e63ffb0a",
|
"rev": "9d01f392b33fb2ba36fbc87fc0bf4453e63ffb0a",
|
||||||
"src": "https://github.com/nvim-mini/mini.nvim"
|
"src": "https://github.com/nvim-mini/mini.nvim"
|
||||||
},
|
},
|
||||||
|
"nvim-dap": {
|
||||||
|
"rev": "c9a0738e45f1bd41d792a126941348dce661cf9b",
|
||||||
|
"src": "https://github.com/mfussenegger/nvim-dap"
|
||||||
|
},
|
||||||
"nvim-lspconfig": {
|
"nvim-lspconfig": {
|
||||||
"rev": "ee1e369181a9e64904cdd7b739e98c70778cfc71",
|
"rev": "85e732c62ac59ab7c12df71ddd020baa87948390",
|
||||||
"src": "https://github.com/neovim/nvim-lspconfig"
|
"src": "https://github.com/neovim/nvim-lspconfig"
|
||||||
},
|
},
|
||||||
"nvim-treesitter": {
|
"nvim-treesitter": {
|
||||||
|
|||||||
+21
-22
@@ -1,9 +1,9 @@
|
|||||||
-- 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 = "'100,<50,s10,:1000,/100,@100,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
|
||||||
@@ -26,33 +26,32 @@ require("vim._core.ui2").enable({ -- Enable new ui (requires nightly)
|
|||||||
msg = { targets = "msg" }
|
msg = { targets = "msg" }
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Editing =====================================================================
|
-- Editing
|
||||||
vim.o.expandtab = true -- Convert tabs to spaces
|
vim.o.expandtab = true -- Convert tabs to spaces
|
||||||
vim.o.formatoptions = 'rqnl1j' -- Improve comment editing
|
vim.o.formatoptions = 'rqnl1j' -- Improve comment editing
|
||||||
vim.o.ignorecase = true -- Ignore case during search
|
vim.o.ignorecase = true -- Ignore case during search
|
||||||
vim.o.infercase = true -- Infer case in built-in completion
|
vim.o.infercase = true -- Infer case in built-in completion
|
||||||
vim.o.shiftwidth = 2 -- Use this number of spaces for indentation
|
vim.o.shiftwidth = 2 -- Use this number of spaces for indentation
|
||||||
vim.o.smartcase = true -- Respect case if search pattern has upper case
|
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.opt.autoread = true -- Do not prompt to reread files on update
|
||||||
|
|
||||||
-- Built-in completion
|
|
||||||
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,nosort' -- Use custom behavior
|
||||||
vim.o.completetimeout = 100 -- Limit sources delay
|
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')
|
||||||
|
|
||||||
-- Diagnostics =================================================================
|
-- Diagnostics
|
||||||
Config.later(function()
|
Config.later(function()
|
||||||
vim.diagnostic.config({
|
vim.diagnostic.config({
|
||||||
signs = {
|
signs = {
|
||||||
priority = 9999,
|
priority = 9999,
|
||||||
severity = { min = 'WARN', max = 'ERROR' },
|
severity = { min = vim.diagnostic.severity.WARN, max = vim.diagnostic.severity.ERROR },
|
||||||
text = {
|
text = {
|
||||||
[vim.diagnostic.severity.ERROR] = '',
|
[vim.diagnostic.severity.ERROR] = '',
|
||||||
[vim.diagnostic.severity.WARN] = '',
|
[vim.diagnostic.severity.WARN] = '',
|
||||||
@@ -60,11 +59,11 @@ Config.later(function()
|
|||||||
[vim.diagnostic.severity.HINT] = '',
|
[vim.diagnostic.severity.HINT] = '',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
underline = { severity = { min = 'HINT', max = 'ERROR' } },
|
underline = { severity = { min = vim.diagnostic.severity.HINT, max = vim.diagnostic.severity.ERROR } },
|
||||||
virtual_lines = false,
|
virtual_lines = false,
|
||||||
virtual_text = {
|
virtual_text = {
|
||||||
current_line = true,
|
current_line = true,
|
||||||
severity = { min = 'ERROR', max = 'ERROR' },
|
severity = { min = vim.diagnostic.severity.ERROR, max = vim.diagnostic.severity.ERROR },
|
||||||
},
|
},
|
||||||
update_in_insert = false,
|
update_in_insert = false,
|
||||||
})
|
})
|
||||||
|
|||||||
+81
-90
@@ -1,4 +1,4 @@
|
|||||||
-- 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" },
|
||||||
@@ -13,105 +13,96 @@ Config.leader_group_clues = {
|
|||||||
{ mode = "x", keys = "<Leader>l", desc = "+Language" },
|
{ mode = "x", keys = "<Leader>l", desc = "+Language" },
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Helpers =====================================================================
|
-- Keymap Helpers
|
||||||
local function map(mode, lhs, rhs, desc, plugin)
|
local function map(mode, lhs, rhs, desc)
|
||||||
local final_rhs = plugin and function()
|
vim.keymap.set(mode, lhs, rhs, { desc = desc, silent = true })
|
||||||
if Config["setup_" .. plugin] then Config["setup_" .. plugin]() end
|
|
||||||
rhs()
|
|
||||||
end or rhs
|
|
||||||
vim.keymap.set(mode, lhs, final_rhs, { desc = desc })
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local nmap = function(lhs, rhs, desc, plugin) map("n", lhs, rhs, desc, plugin) end
|
local function leader(suffix, rhs, desc, mode)
|
||||||
local tmap = function(lhs, rhs, desc, plugin) map("t", lhs, rhs, desc, plugin) end
|
map(mode or "n", "<Leader>" .. suffix, rhs, desc)
|
||||||
local nmap_leader = function(suffix, rhs, desc, plugin) map("n", "<Leader>" .. suffix, rhs, desc, plugin) end
|
end
|
||||||
local xmap_leader = function(suffix, rhs, desc, plugin) map("x", "<Leader>" .. suffix, rhs, desc, plugin) end
|
|
||||||
|
|
||||||
-- Buffers =====================================================================
|
-- Buffers
|
||||||
nmap_leader("bd", function() pcall(vim.cmd, "bdelete") end, "Delete")
|
leader("bd", "<cmd>bdelete<CR>", "Delete")
|
||||||
nmap_leader("bD", function() pcall(vim.cmd, "bdelete!") end, "Delete!")
|
leader("bD", "<cmd>bdelete!<CR>", "Delete!")
|
||||||
nmap_leader("bw", function() pcall(vim.cmd, "bwipeout") end, "Wipeout")
|
leader("bw", "<cmd>bwipeout<CR>", "Wipeout")
|
||||||
nmap_leader("bW", function() pcall(vim.cmd, "bwipeout!") end, "Wipeout!")
|
leader("bW", "<cmd>bwipeout!<CR>", "Wipeout!")
|
||||||
nmap_leader("bo", function()
|
leader("bo", 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())
|
||||||
|
:filter(function(buf) return not vim.list_contains(visible, buf) end)
|
||||||
|
:each(function(buf) pcall(vim.api.nvim_buf_delete, buf, { force = false }) end)
|
||||||
|
end, "Close invisible buffers")
|
||||||
|
|
||||||
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
-- Debug
|
||||||
if not vim.list_contains(visible, buf) then
|
leader("db", function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint")
|
||||||
pcall(vim.api.nvim_buf_delete, buf, { force = false })
|
leader("dl", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point: ")) end, "Log point")
|
||||||
end
|
leader("dc", function() require("dap").continue() end, "Run/Continue")
|
||||||
end
|
leader("dC", function() require("dap").run_to_cursor() end, "Run to Cursor")
|
||||||
end, "Close all invisible buffers")
|
leader("de", function() require("dap.ui.widgets").hover() end, "Inspect")
|
||||||
|
leader("dr", function() require("dap").repl.open() end, "Open REPL")
|
||||||
|
leader("dt", function() require("dap").terminate() end, "Terminate")
|
||||||
|
|
||||||
-- Debug =======================================================================
|
-- Explore
|
||||||
nmap_leader("db", function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint", "dap")
|
leader("ed", function() MiniFiles.open() end, "Directory")
|
||||||
nmap_leader("dl", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: ")) end,
|
leader("ef", function()
|
||||||
"log point", "dap")
|
local file = vim.api.nvim_buf_get_name(0)
|
||||||
nmap_leader("dc", function() require("dap").continue() end, "Run/Continue", "dap")
|
MiniFiles.open(vim.uv.fs_stat(file) and file or nil)
|
||||||
nmap_leader("dC", function() require("dap").run_to_cursor() end, "Run to Cursor", "dap")
|
end, "File directory")
|
||||||
nmap_leader("de", function() require("dap.ui.widgets").hover() end, "Inspect", "dap")
|
|
||||||
nmap_leader("dr", function() require("dap").repl.open() end, "Open repl", "dap")
|
|
||||||
nmap_leader("dt", function() require("dap").terminate() end, "Terminate", "dap")
|
|
||||||
|
|
||||||
-- Explore =====================================================================
|
-- Find
|
||||||
nmap_leader("ed", function() MiniFiles.open() end, "Directory")
|
leader("fb", function() MiniPick.builtin.buffers() end, "Buffers")
|
||||||
nmap_leader("ef",
|
leader("fc", function() MiniExtra.pickers.git_commits() end, "Commits (all)")
|
||||||
function() MiniFiles.open(vim.uv.fs_stat(vim.api.nvim_buf_get_name(0)) and vim.api.nvim_buf_get_name(0) or nil) end,
|
leader("fC", function() MiniExtra.pickers.git_commits({ path = "%" }) end, "Commits (buf)")
|
||||||
"File directory")
|
leader("fd", function() MiniExtra.pickers.diagnostic({ scope = "all" }) end, "Diagnostic workspace")
|
||||||
|
leader("fD", function() MiniExtra.pickers.diagnostic({ scope = "current" }) end, "Diagnostic buffer")
|
||||||
|
leader("ff", function() MiniPick.builtin.files() end, "Files")
|
||||||
|
leader("fg", function() MiniPick.builtin.grep_live() end, "Grep live")
|
||||||
|
leader("fG", function() MiniPick.builtin.grep({ pattern = vim.fn.expand("<cword>") }) end, "Grep word")
|
||||||
|
leader("fh", function() MiniPick.builtin.help() end, "Help tags")
|
||||||
|
leader("fl", function() MiniPick.builtin.buf_lines({ scope = "all" }) end, "Lines (all)")
|
||||||
|
leader("fL", function() MiniPick.builtin.buf_lines({ scope = "current" }) end, "Lines (buf)")
|
||||||
|
leader("fr", function() MiniPick.builtin.resume() end, "Resume")
|
||||||
|
leader("fs", function() MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" }) end, "Symbols workspace")
|
||||||
|
leader("fS", function() MiniExtra.pickers.lsp({ scope = "document_symbol" }) end, "Symbols document")
|
||||||
|
leader("f:", function() MiniExtra.pickers.history({ scope = ":" }) end, "Command history")
|
||||||
|
|
||||||
-- Find ========================================================================
|
-- Git
|
||||||
nmap_leader("fb", function() MiniPick.builtin.buffers() end, "Buffers")
|
leader("go", function() MiniDiff.toggle_overlay() end, "Toggle overlay")
|
||||||
nmap_leader("fc", function() MiniExtra.pickers.git_commits() end, "Commits (all)")
|
leader("gs", function() MiniGit.show_at_cursor() end, "Show at cursor")
|
||||||
nmap_leader("fC", function() MiniExtra.pickers.git_commits({ path = "%" }) end, "Commits (buf)")
|
leader("gs", function() MiniGit.show_at_cursor() end, "Show selection", "x")
|
||||||
nmap_leader("fd", function() MiniExtra.pickers.diagnostic({ scope = "all" }) end, "Diagnostic workspace")
|
|
||||||
nmap_leader("fD", function() MiniExtra.pickers.diagnostic({ scope = "current" }) end, "Diagnostic buffer")
|
|
||||||
nmap_leader("ff", function() MiniPick.builtin.files() end, "Files")
|
|
||||||
nmap_leader("fg", function() MiniPick.builtin.grep_live() end, "Grep live")
|
|
||||||
nmap_leader("fG", function() MiniPick.builtin.grep({ pattern = vim.fn.expand("<cword>") }) end, "Grep current word")
|
|
||||||
nmap_leader("fh", function() MiniPick.builtin.help() end, "Help tags")
|
|
||||||
nmap_leader("fl", function() MiniPick.builtin.buf_lines({ scope = "all" }) end, "Lines (all)")
|
|
||||||
nmap_leader("fL", function() MiniPick.builtin.buf_lines({ scope = "current" }) end, "Lines (buf)")
|
|
||||||
nmap_leader("fr", function() MiniPick.builtin.resume() end, "Resume")
|
|
||||||
nmap_leader("fs", function() MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" }) end, "Symbols workspace (live)")
|
|
||||||
nmap_leader("fS", function() MiniExtra.pickers.lsp({ scope = "document_symbol" }) end, "Symbols document")
|
|
||||||
nmap_leader("f:", function() MiniExtra.pickers.history({ scope = ":" }) end, '":" history')
|
|
||||||
nmap_leader("f;", function() MiniExtra.pickers.history({ scope = ":" }) end, "Command history")
|
|
||||||
|
|
||||||
-- Git =========================================================================
|
-- Language
|
||||||
nmap_leader("go", function() MiniDiff.toggle_overlay() end, "Toggle overlay")
|
leader("la", vim.lsp.buf.code_action, "Actions")
|
||||||
nmap_leader("gs", function() MiniGit.show_at_cursor() end, "Show at cursor")
|
leader("ld", vim.diagnostic.open_float, "Diagnostic popup")
|
||||||
xmap_leader("gs", function() MiniGit.show_at_cursor() end, "Show at selection")
|
leader("lf", function() require("conform").format({ async = true }) end, "Format")
|
||||||
|
leader("lf", function() require("conform").format({ async = true }) end, "Format selection", "x")
|
||||||
|
leader("li", vim.lsp.buf.implementation, "Implementation")
|
||||||
|
leader("lh", vim.lsp.buf.hover, "Hover")
|
||||||
|
leader("ll", vim.lsp.codelens.run, "Lens")
|
||||||
|
leader("lr", vim.lsp.buf.rename, "Rename")
|
||||||
|
leader("lR", vim.lsp.buf.references, "References")
|
||||||
|
leader("ls", vim.lsp.buf.definition, "Source definition")
|
||||||
|
leader("lt", vim.lsp.buf.type_definition, "Type definition")
|
||||||
|
|
||||||
-- Language ====================================================================
|
-- Run
|
||||||
nmap_leader("la", function() vim.lsp.buf.code_action() end, "Actions")
|
leader("rj", function() require("just").pick_just_task() end, "Run Just Task")
|
||||||
nmap_leader("ld", function() vim.diagnostic.open_float() end, "Diagnostic popup")
|
leader("rh", function() require("kulala").run() end, "Send HTTP request")
|
||||||
nmap_leader("lf", function() require("conform").format({ async = true }) end, "Format")
|
|
||||||
nmap_leader("li", function() vim.lsp.buf.implementation() end, "Implementation")
|
|
||||||
nmap_leader("lh", function() vim.lsp.buf.hover() end, "Hover")
|
|
||||||
nmap_leader("ll", function() vim.lsp.codelens.run() end, "Lens")
|
|
||||||
nmap_leader("lr", function() vim.lsp.buf.rename() end, "Rename")
|
|
||||||
nmap_leader("lR", function() vim.lsp.buf.references() end, "References")
|
|
||||||
nmap_leader("ls", function() vim.lsp.buf.definition() end, "Source definition")
|
|
||||||
nmap_leader("lt", function() vim.lsp.buf.type_definition() end, "Type definition")
|
|
||||||
xmap_leader("lf", function() require("conform").format({ async = true }) end, "Format selection")
|
|
||||||
|
|
||||||
-- Run =========================================================================
|
-- Session
|
||||||
nmap_leader("rj", function() require("just").pick_just_task() end, "Run Just Task")
|
leader("sd", function() MiniSessions.select("delete") end, "Delete")
|
||||||
nmap_leader("rh", function() require("kulala").run() end, "Send HTTP request", "kulala")
|
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")
|
||||||
|
|
||||||
-- Session =====================================================================
|
-- Terminal
|
||||||
nmap_leader("sd", function() MiniSessions.select("delete") end, "Delete")
|
leader("tT", "<cmd>horizontal term<CR>", "Terminal (horizontal)")
|
||||||
nmap_leader("sn", function() vim.ui.input({ prompt = "Session name: " }, MiniSessions.write) end, "New")
|
leader("tt", "<cmd>vertical term<CR>", "Terminal (vertical)")
|
||||||
nmap_leader("sr", function() MiniSessions.select("read") end, "Read")
|
leader("tc", "<cmd>vertical term claude<CR>", "Claude")
|
||||||
nmap_leader("sR", function() MiniSessions.restart() end, "Restart")
|
leader("tg", function() require("terminal").open_terminal_app("lazygit") end, "LazyGit")
|
||||||
nmap_leader("sw", function() MiniSessions.write() end, "Write current")
|
leader("ts", function() require("terminal").open_terminal_app("lazysql") end, "LazySQL")
|
||||||
|
|
||||||
-- Terminal ====================================================================
|
-- Overwrites
|
||||||
nmap_leader("tT", function() vim.cmd("horizontal term") end, "Terminal (horizontal)")
|
map("n", "<Esc>", "<cmd>nohlsearch<CR>", "Clear highlights")
|
||||||
nmap_leader("tt", function() vim.cmd("vertical term") end, "Terminal (vertical)")
|
map("t", "<C-w>", "<C-\\><C-n><C-w>", "Terminal window navigation")
|
||||||
nmap_leader("tc", function() vim.cmd("vertical term claude") end, "Claude")
|
|
||||||
nmap_leader("tg", function() require("terminal").open_terminal_app("lazygit") end, "LazyGit")
|
|
||||||
nmap_leader("ts", function() require("terminal").open_terminal_app("lazysql") end, "LazySQL")
|
|
||||||
|
|
||||||
-- Overwrites ==================================================================
|
|
||||||
nmap("<Esc>", function() vim.cmd("nohlsearch") end, "Clear search highlights")
|
|
||||||
tmap("<C-w>", "<C-\\><C-n><C-w>", "Terminal window navigation")
|
|
||||||
|
|||||||
+25
-49
@@ -1,25 +1,21 @@
|
|||||||
-- UI ==========================================================================
|
-- UI
|
||||||
Config.now(function()
|
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.
|
-- Start screen, statusline, and session management
|
||||||
require('mini.starter').setup()
|
require('mini.starter').setup()
|
||||||
|
|
||||||
-- Statusline.
|
|
||||||
require('mini.statusline').setup()
|
require('mini.statusline').setup()
|
||||||
|
|
||||||
-- Session management.
|
|
||||||
require('mini.sessions').setup()
|
require('mini.sessions').setup()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
Config.later(function()
|
Config.later(function()
|
||||||
-- Git diff indicators.
|
-- Git diff indicators
|
||||||
require('mini.diff').setup()
|
require('mini.diff').setup()
|
||||||
require('mini.git').setup()
|
require('mini.git').setup()
|
||||||
|
|
||||||
-- Keymap hints.
|
-- Keymap hints
|
||||||
local miniclue = require('mini.clue')
|
local miniclue = require('mini.clue')
|
||||||
miniclue.setup({
|
miniclue.setup({
|
||||||
clues = {
|
clues = {
|
||||||
@@ -33,54 +29,43 @@ Config.later(function()
|
|||||||
miniclue.gen_clues.z(),
|
miniclue.gen_clues.z(),
|
||||||
},
|
},
|
||||||
triggers = {
|
triggers = {
|
||||||
{ mode = { 'n', 'x' }, keys = '<Leader>' }, -- Leader triggers
|
{ mode = { 'n', 'x' }, keys = '<Leader>' },
|
||||||
{ mode = { 'n', 'x' }, keys = '[' }, -- mini.bracketed
|
{ mode = { 'n', 'x' }, keys = '[' },
|
||||||
{ mode = { 'n', 'x' }, keys = ']' },
|
{ mode = { 'n', 'x' }, keys = ']' },
|
||||||
{ mode = 'i', keys = '<C-x>' }, -- Built-in completion
|
{ mode = 'i', keys = '<C-x>' },
|
||||||
{ mode = { 'n', 'x' }, keys = 'g' }, -- `g` key
|
{ mode = { 'n', 'x' }, keys = 'g' },
|
||||||
{ mode = { 'n', 'x' }, keys = "'" }, -- Marks
|
{ mode = { 'n', 'x' }, keys = "'" },
|
||||||
{ mode = { 'n', 'x' }, keys = '`' },
|
{ mode = { 'n', 'x' }, keys = '`' },
|
||||||
{ mode = { 'n', 'x' }, keys = '"' }, -- Registers
|
{ mode = { 'n', 'x' }, keys = '"' },
|
||||||
{ mode = { 'i', 'c' }, keys = '<C-r>' },
|
{ mode = { 'i', 'c' }, keys = '<C-r>' },
|
||||||
{ mode = 'n', keys = '<C-w>' }, -- Window commands
|
{ mode = 'n', keys = '<C-w>' },
|
||||||
{ mode = { 'n', 'x' }, keys = 's' }, -- `s` key (mini.surround, etc.)
|
{ mode = { 'n', 'x' }, keys = 's' },
|
||||||
{ mode = { 'n', 'x' }, keys = 'z' }, -- `z` key
|
{ mode = { 'n', 'x' }, keys = 'z' },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Editing =====================================================================
|
-- Editing & Navigation
|
||||||
Config.later(function()
|
Config.later(function()
|
||||||
-- Enhanced text objects (a/i).
|
|
||||||
require('mini.ai').setup()
|
require('mini.ai').setup()
|
||||||
|
|
||||||
-- Surround functionality (add/delete/replace).
|
|
||||||
require('mini.surround').setup()
|
require('mini.surround').setup()
|
||||||
|
require('mini.pick').setup()
|
||||||
|
require('mini.bracketed').setup()
|
||||||
|
require('mini.extra').setup()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Navigation ==================================================================
|
-- File Explorer
|
||||||
Config.now_if_args(function()
|
Config.now_if_args(function()
|
||||||
-- File system explorer.
|
|
||||||
require('mini.files').setup()
|
require('mini.files').setup()
|
||||||
local add_marks = 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('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
|
end, 'Add default marks')
|
||||||
Config.autocmd('User', 'MiniFilesExplorerOpen', add_marks, 'Add default marks')
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- Completion
|
||||||
Config.later(function()
|
Config.later(function()
|
||||||
-- Fuzzy picker.
|
|
||||||
require('mini.pick').setup()
|
|
||||||
|
|
||||||
-- Square bracket navigation.
|
|
||||||
require('mini.bracketed').setup()
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Completion ==================================================================
|
|
||||||
Config.later(function()
|
|
||||||
-- Autocompletion and signature help.
|
|
||||||
require('mini.completion').setup({
|
require('mini.completion').setup({
|
||||||
lsp_completion = {
|
lsp_completion = {
|
||||||
source_func = 'omnifunc',
|
source_func = 'omnifunc',
|
||||||
@@ -91,24 +76,15 @@ Config.later(function()
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Set 'omnifunc' for LSP completion only when needed.
|
Config.autocmd('LspAttach', nil, function(ev)
|
||||||
local on_attach = function(ev)
|
|
||||||
vim.bo[ev.buf].omnifunc = 'v:lua.MiniCompletion.completefunc_lsp'
|
vim.bo[ev.buf].omnifunc = 'v:lua.MiniCompletion.completefunc_lsp'
|
||||||
end
|
end, "Set 'omnifunc'")
|
||||||
Config.autocmd('LspAttach', nil, on_attach, "Set 'omnifunc'")
|
|
||||||
|
|
||||||
-- Advertise to servers that Neovim supports certain set of completion features.
|
|
||||||
vim.lsp.config('*', { capabilities = MiniCompletion.get_lsp_capabilities() })
|
vim.lsp.config('*', { capabilities = MiniCompletion.get_lsp_capabilities() })
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Utilities ===================================================================
|
-- Utilities
|
||||||
Config.now_if_args(function()
|
Config.now_if_args(function()
|
||||||
-- Miscellaneous utility functions.
|
|
||||||
require('mini.misc').setup()
|
require('mini.misc').setup()
|
||||||
MiniMisc.setup_auto_root()
|
MiniMisc.setup_auto_root()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
Config.later(function()
|
|
||||||
-- Extra functionality (pickers, clues).
|
|
||||||
require('mini.extra').setup()
|
|
||||||
end)
|
|
||||||
|
|||||||
+18
-48
@@ -1,20 +1,15 @@
|
|||||||
-- 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 = {
|
enable = { terminal = false, legacy_highlights = false, migrations = false },
|
||||||
terminal = false,
|
|
||||||
legacy_highlights = false,
|
|
||||||
migrations = false,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
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('tsx', { 'typescriptreact' })
|
||||||
|
|
||||||
local filetypes = {
|
local filetypes = {
|
||||||
@@ -24,11 +19,8 @@ Config.now_if_args(function()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Config.autocmd('FileType', filetypes, function(ev)
|
Config.autocmd('FileType', filetypes, function(ev)
|
||||||
if pcall(vim.treesitter.start, ev.buf) then
|
if pcall(vim.treesitter.start, ev.buf) and vim.bo[ev.buf].filetype == 'php' then
|
||||||
if vim.bo[ev.buf].filetype == 'php' then
|
vim.bo[ev.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||||
-- Fixes broken indentation on `o` in php buffers
|
|
||||||
vim.bo[ev.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end, 'Start tree-sitter')
|
end, 'Start tree-sitter')
|
||||||
|
|
||||||
@@ -39,32 +31,18 @@ Config.now_if_args(function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- LSP =========================================================================
|
-- LSP
|
||||||
Config.later(function()
|
Config.later(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",
|
|
||||||
"intelephense",
|
|
||||||
"lua_ls",
|
|
||||||
"svelte",
|
|
||||||
"tailwindcss",
|
|
||||||
"tsc",
|
|
||||||
"dartls"
|
|
||||||
})
|
|
||||||
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 = {
|
format_on_save = { lsp_format = "fallback", timeout_ms = 1000 },
|
||||||
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" },
|
||||||
@@ -78,9 +56,8 @@ Config.later(function()
|
|||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- DAP =========================================================================
|
-- DAP
|
||||||
function Config.setup_dap()
|
Config.later(function()
|
||||||
Config.setup_dap = nil
|
|
||||||
vim.pack.add({ "https://github.com/mfussenegger/nvim-dap" })
|
vim.pack.add({ "https://github.com/mfussenegger/nvim-dap" })
|
||||||
|
|
||||||
local dap_signs = {
|
local dap_signs = {
|
||||||
@@ -94,26 +71,19 @@ function Config.setup_dap()
|
|||||||
vim.fn.sign_define(name, sign)
|
vim.fn.sign_define(name, sign)
|
||||||
end
|
end
|
||||||
|
|
||||||
local dap = require("dap")
|
require("dap").adapters.go = { type = "server", host = "127.0.0.1", port = "${port}" }
|
||||||
dap.adapters.go = { type = "server", host = "127.0.0.1", port = "${port}" }
|
end)
|
||||||
end
|
|
||||||
|
|
||||||
-- Kulala ======================================================================
|
-- Kulala & Flutter
|
||||||
function Config.setup_kulala()
|
Config.autocmd('FileType', { 'http' }, function()
|
||||||
Config.setup_kulala = nil
|
|
||||||
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
|
end, "Setup Kulala", true)
|
||||||
|
|
||||||
-- Flutter =====================================================================
|
Config.autocmd('FileType', 'dart', function()
|
||||||
function Config.setup_flutter()
|
|
||||||
Config.setup_flutter = nil
|
|
||||||
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
|
end, "Setup Flutter", true)
|
||||||
|
|
||||||
Config.autocmd('FileType', 'dart', Config.setup_flutter, "Setup flutter", true)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user