Compare commits
1
Commits
main
..
2eb0dca693
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2eb0dca693
|
@@ -0,0 +1,8 @@
|
|||||||
|
tt.*
|
||||||
|
.tests
|
||||||
|
doc/tags
|
||||||
|
debug
|
||||||
|
.repro
|
||||||
|
foo.*
|
||||||
|
*.log
|
||||||
|
data
|
||||||
@@ -1,33 +1 @@
|
|||||||
-- Modules
|
require("config.lazy")
|
||||||
vim.loader.enable()
|
|
||||||
vim.opt.runtimepath:remove('/usr/share/nvim/site')
|
|
||||||
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
|
|
||||||
|
|
||||||
-- Config Global
|
|
||||||
vim.pack.add({ 'https://github.com/nvim-mini/mini.nvim' })
|
|
||||||
local misc = require('mini.misc')
|
|
||||||
local gr = vim.api.nvim_create_augroup('custom-config', {})
|
|
||||||
|
|
||||||
_G.Config = {
|
|
||||||
now = function(f) misc.safely('now', f) end,
|
|
||||||
later = function(f) misc.safely('later', f) end,
|
|
||||||
autocmd = function(event, pattern, callback, desc, once)
|
|
||||||
vim.api.nvim_create_autocmd(event, { group = gr, pattern = pattern, callback = callback, desc = desc, once = once })
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
Config.now_if_args = vim.fn.argc(-1) > 0 and Config.now or Config.later
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"LazyVim": { "branch": "main", "commit": "fca0af57cc3851b14f96a795a9c9bfafc5096dd1" },
|
||||||
|
"blink.cmp": { "branch": "main", "commit": "4b18c32adef2898f95cdef6192cbd5796c1a332d" },
|
||||||
|
"catppuccin": { "branch": "main", "commit": "c4d475e4b5684747cde9b3f849186af7837d4397" },
|
||||||
|
"conform.nvim": { "branch": "master", "commit": "40dcec5555f960b0a04340d76eabdf4efe78599d" },
|
||||||
|
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||||
|
"gitsigns.nvim": { "branch": "main", "commit": "7c4faa3540d0781a28588cafbd4dd187a28ac6e3" },
|
||||||
|
"laravel.nvim": { "branch": "main", "commit": "4e48d7a5783155475f578da2ec85451c50f41fe7" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
||||||
|
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
||||||
|
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
||||||
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "a324581a3c83fdacdb9804b79de1cbe00ce18550" },
|
||||||
|
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
|
||||||
|
"mini.ai": { "branch": "main", "commit": "4b0a6207341d895b6cfe9bcb1e4d3e8607bfe4f4" },
|
||||||
|
"mini.icons": { "branch": "main", "commit": "5b9076dae1bfbe47ba4a14bc8b967cde0ab5d77e" },
|
||||||
|
"mini.pairs": { "branch": "main", "commit": "b7fde3719340946feb75017ef9d75edebdeb0566" },
|
||||||
|
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
||||||
|
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
||||||
|
"nvim-lint": { "branch": "master", "commit": "606b823a57b027502a9ae00978ebf4f5d5158098" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "2163c54bb6cfec53e3e555665ada945b8c8331b9" },
|
||||||
|
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
||||||
|
"nvim-treesitter": { "branch": "main", "commit": "ebe76eb800d4e8df754fc96f8a7b84f578224a97" },
|
||||||
|
"nvim-treesitter-textobjects": { "branch": "main", "commit": "0bc4ef0a34d80fd6e67b59bd71fcbb0ef9ef4756" },
|
||||||
|
"nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" },
|
||||||
|
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
|
||||||
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||||
|
"rose-pine": { "branch": "main", "commit": "cf2a288696b03d0934da713d66c6d71557b5c997" },
|
||||||
|
"snacks.nvim": { "branch": "main", "commit": "9912042fc8bca2209105526ac7534e9a0c2071b2" },
|
||||||
|
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
|
||||||
|
"ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" },
|
||||||
|
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extras": [
|
||||||
|
"lazyvim.plugins.extras.editor.snacks_explorer",
|
||||||
|
"lazyvim.plugins.extras.editor.snacks_picker"
|
||||||
|
],
|
||||||
|
"install_version": 7,
|
||||||
|
"news": {
|
||||||
|
"NEWS.md": "11866"
|
||||||
|
},
|
||||||
|
"version": 8
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||||
|
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||||
|
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
vim.api.nvim_echo({
|
||||||
|
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||||
|
{ out, "WarningMsg" },
|
||||||
|
{ "\nPress any key to exit..." },
|
||||||
|
}, true, {})
|
||||||
|
vim.fn.getchar()
|
||||||
|
os.exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
require("lazy").setup({
|
||||||
|
spec = {
|
||||||
|
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||||
|
{ import = "plugins" },
|
||||||
|
},
|
||||||
|
defaults = {
|
||||||
|
lazy = false,
|
||||||
|
version = false,
|
||||||
|
},
|
||||||
|
install = {},
|
||||||
|
checker = {
|
||||||
|
enabled = true,
|
||||||
|
notify = true,
|
||||||
|
},
|
||||||
|
performance = {
|
||||||
|
rtp = {
|
||||||
|
disabled_plugins = {
|
||||||
|
"gzip",
|
||||||
|
"netrwPlugin",
|
||||||
|
"tarPlugin",
|
||||||
|
"tohtml",
|
||||||
|
"tutor",
|
||||||
|
"zipPlugin",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
vim.o.tw = 60
|
||||||
|
vim.o.clipboard = ""
|
||||||
|
vim.g.snacks_animate = false
|
||||||
|
vim.g.lazyvim_php_lsp = "intelephense"
|
||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
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,
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
return {
|
||||||
|
{ "rose-pine/neovim", name = "rose-pine" },
|
||||||
|
{
|
||||||
|
"LazyVim/LazyVim",
|
||||||
|
opts = { colorscheme = "rose-pine" },
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"folke/snacks.nvim",
|
||||||
|
opts = {
|
||||||
|
dashboard = { enabled = false },
|
||||||
|
explorer = { trash = false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
opts = {
|
||||||
|
inlay_hints = { enabled = false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ "akinsho/bufferline.nvim", enabled = false },
|
||||||
|
{ "folke/flash.nvim", enabled = false },
|
||||||
|
{ "rafamadriz/friendly-snippets", enabled = false },
|
||||||
|
|
||||||
|
{ "catppuccin/nvim", enabled = false },
|
||||||
|
{ "folke/tokyonight.nvim", enabled = false },
|
||||||
|
|
||||||
|
{ "folke/todo-comments.nvim", enabled = false },
|
||||||
|
{ "folke/ts-comments.nvim", enabled = false },
|
||||||
|
{ "folke/trouble.nvim", enabled = false },
|
||||||
|
{ "MagicDuck/grug-far.nvim", enabled = false },
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
-- Set Laravel Pint as the default PHP formatter with PHP CS Fixer as a fall back.
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
optional = true,
|
||||||
|
opts = {
|
||||||
|
formatters_by_ft = {
|
||||||
|
php = { { "pint", "php_cs_fixer" } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- Remove phpcs linter.
|
||||||
|
"mfussenegger/nvim-lint",
|
||||||
|
optional = true,
|
||||||
|
opts = {
|
||||||
|
linters_by_ft = {
|
||||||
|
php = {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"adalessa/laravel.nvim",
|
||||||
|
dependencies = {
|
||||||
|
"MunifTanjim/nui.nvim",
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"nvim-neotest/nvim-nio",
|
||||||
|
},
|
||||||
|
ft = { "php", "blade" },
|
||||||
|
event = {
|
||||||
|
"BufEnter composer.json",
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>ll",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.laravel()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Laravel Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<c-g>",
|
||||||
|
function()
|
||||||
|
Laravel.commands.run("view:finder")
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open View Finder",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>la",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.artisan()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Artisan Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lt",
|
||||||
|
function()
|
||||||
|
Laravel.commands.run("actions")
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Actions Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lr",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.routes()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Routes Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lh",
|
||||||
|
function()
|
||||||
|
Laravel.run("artisan docs")
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Documentation",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lm",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.make()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Make Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lc",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.commands()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Commands Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lo",
|
||||||
|
function()
|
||||||
|
Laravel.pickers.resources()
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Resources Picker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lp",
|
||||||
|
function()
|
||||||
|
Laravel.commands.run("command_center")
|
||||||
|
end,
|
||||||
|
desc = "Laravel: Open Command Center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>lu",
|
||||||
|
function()
|
||||||
|
Laravel.commands.run("hub")
|
||||||
|
end,
|
||||||
|
desc = "Laravel Artisan hub",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gf",
|
||||||
|
function()
|
||||||
|
local ok, res = pcall(function()
|
||||||
|
if Laravel.app("gf").cursorOnResource() then
|
||||||
|
return "<cmd>lua Laravel.commands.run('gf')<cr>"
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
if not ok or not res then
|
||||||
|
return "gf"
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end,
|
||||||
|
expr = true,
|
||||||
|
noremap = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
features = {
|
||||||
|
pickers = {
|
||||||
|
provider = "snacks",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
local function open(cmd)
|
|
||||||
local lines = vim.o.lines - vim.o.cmdheight - (vim.o.laststatus > 0 and 1 or 0)
|
|
||||||
local w, h = math.floor(vim.o.columns * 0.95), 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, {
|
|
||||||
relative = 'editor',
|
|
||||||
width = w,
|
|
||||||
height = h,
|
|
||||||
row = math.floor((lines - h) / 2),
|
|
||||||
col = math.floor((vim.o.columns - w) / 2),
|
|
||||||
border = 'rounded',
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.fn.termopen(cmd, { on_exit = function() pcall(vim.api.nvim_win_close, win, true) end })
|
|
||||||
end
|
|
||||||
|
|
||||||
return { open = open }
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": {
|
|
||||||
"conform.nvim": {
|
|
||||||
"rev": "016802de402556da54c36bd7359b441266b01cdd",
|
|
||||||
"src": "https://github.com/stevearc/conform.nvim"
|
|
||||||
},
|
|
||||||
"mini.nvim": {
|
|
||||||
"rev": "ac5dffcc52b8378fbb15efeb0497a83e57a0b01c",
|
|
||||||
"src": "https://github.com/nvim-mini/mini.nvim"
|
|
||||||
},
|
|
||||||
"nvim-dap": {
|
|
||||||
"rev": "cfa2d58f4537aca6ca83e2de1a0d9f1491121264",
|
|
||||||
"src": "https://github.com/mfussenegger/nvim-dap"
|
|
||||||
},
|
|
||||||
"nvim-lspconfig": {
|
|
||||||
"rev": "ac9d2f7c4757db6320cab6697fe73e5e8adb2457",
|
|
||||||
"src": "https://github.com/neovim/nvim-lspconfig"
|
|
||||||
},
|
|
||||||
"nvim-treesitter": {
|
|
||||||
"rev": "9a168f6357ed21c3a636e1727bc7d382abc451b8",
|
|
||||||
"src": "https://github.com/nvim-treesitter/nvim-treesitter"
|
|
||||||
},
|
|
||||||
"rose-pine": {
|
|
||||||
"rev": "ff483051a47e27d84bdef47703538df1ed9f4a47",
|
|
||||||
"src": "https://github.com/rose-pine/neovim"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
-- General
|
|
||||||
vim.g.mapleader = ' ' -- Use `<Space>` as <Leader> key
|
|
||||||
vim.o.undofile = true -- Enable persistent undo
|
|
||||||
vim.o.shada = "'50,<20,s10,:100,/50,@50,h" -- Limit ShaDa file (for startup)
|
|
||||||
|
|
||||||
-- UI
|
|
||||||
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.cursorline = true -- Enable current line highlighting
|
|
||||||
vim.o.linebreak = true -- Wrap lines at 'breakat' (if 'wrap' is set)
|
|
||||||
vim.o.list = true -- Show helpful text indicators
|
|
||||||
vim.o.listchars = 'tab:→ ,trail:·,nbsp:␣' -- Characters for list mode
|
|
||||||
vim.o.number = true -- Show line numbers
|
|
||||||
vim.o.pumheight = 10 -- Make popup menu smaller
|
|
||||||
vim.o.pummaxwidth = 80 -- Make popup menu not too wide
|
|
||||||
vim.o.shortmess = 'CFOSWacou' -- Disable some built-in completion messages
|
|
||||||
vim.o.signcolumn = 'yes' -- Always show signcolumn (less flicker)
|
|
||||||
vim.o.splitbelow = true -- Horizontal splits will be below
|
|
||||||
vim.o.splitkeep = 'screen' -- Reduce scroll during window split
|
|
||||||
vim.o.splitright = true -- Vertical splits will be to the right
|
|
||||||
vim.o.wrap = false -- Don't visually wrap lines
|
|
||||||
vim.o.winborder = 'rounded' -- Use border in floating windows
|
|
||||||
vim.o.pumborder = 'rounded' -- Use border in popup menu
|
|
||||||
vim.o.cmdheight = 0 -- Hide the command line when not in use
|
|
||||||
vim.cmd('syntax off') -- Disable legacy syntax highlighting
|
|
||||||
require('vim._core.ui2').enable({ -- Enable new ui (requires nightly)
|
|
||||||
msg = { targets = 'msg' }
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Editing
|
|
||||||
vim.o.expandtab = true -- Convert tabs to spaces
|
|
||||||
vim.o.formatoptions = 'rqnl1j' -- Improve comment editing
|
|
||||||
vim.o.ignorecase = true -- Ignore case during search
|
|
||||||
vim.o.infercase = true -- Infer case in built-in completion
|
|
||||||
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.spelloptions = 'camel' -- Treat camelCase word parts as separate words
|
|
||||||
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.complete = '.,w,b,kspell' -- Use less sources
|
|
||||||
vim.o.completeopt = 'menuone,noselect,fuzzy' -- Use custom behavior
|
|
||||||
|
|
||||||
-- Autocommands
|
|
||||||
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('LspAttach', '*', function(ev) vim.bo[ev.buf].complete = 'o' end, 'Use lsp completions')
|
|
||||||
|
|
||||||
-- Diagnostics
|
|
||||||
Config.later(function()
|
|
||||||
vim.diagnostic.config({
|
|
||||||
jump = { on_jump = vim.diagnostic.open_float },
|
|
||||||
signs = {
|
|
||||||
priority = 9999,
|
|
||||||
severity = { min = vim.diagnostic.severity.INFO },
|
|
||||||
text = {
|
|
||||||
[vim.diagnostic.severity.ERROR] = '',
|
|
||||||
[vim.diagnostic.severity.WARN] = '',
|
|
||||||
[vim.diagnostic.severity.INFO] = '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
virtual_text = false,
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
-- Clues
|
|
||||||
Config.leader_group_clues = {
|
|
||||||
{ mode = 'n', keys = '<Leader>b', desc = '+Buffer' },
|
|
||||||
{ mode = 'n', keys = '<Leader>d', desc = '+Debug' },
|
|
||||||
{ mode = 'n', keys = '<Leader>e', desc = '+Explore' },
|
|
||||||
{ mode = 'n', keys = '<Leader>f', desc = '+Find' },
|
|
||||||
{ mode = 'n', keys = '<Leader>g', desc = '+Git' },
|
|
||||||
{ mode = 'n', keys = '<Leader>l', desc = '+Language' },
|
|
||||||
{ mode = 'n', keys = '<Leader>r', desc = '+Request' },
|
|
||||||
{ 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>l', desc = '+Language' },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Keymap Helpers
|
|
||||||
local nmap_leader = function(suffix, rhs, desc)
|
|
||||||
vim.keymap.set('n', '<Leader>' .. suffix, rhs, { desc = desc, silent = true })
|
|
||||||
end
|
|
||||||
|
|
||||||
local xmap_leader = function(suffix, rhs, desc)
|
|
||||||
vim.keymap.set('x', '<Leader>' .. suffix, rhs, { desc = desc, silent = true })
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Buffers
|
|
||||||
local new_scratch_buffer = function()
|
|
||||||
vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(true, true))
|
|
||||||
end
|
|
||||||
|
|
||||||
local close_invisible_buffers = function()
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
nmap_leader('db', function() require('dap').toggle_breakpoint() end, 'Toggle Breakpoint')
|
|
||||||
nmap_leader('dl', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point: ')) end, 'Log point')
|
|
||||||
nmap_leader('dc', function() require('dap').continue() end, 'Run/Continue')
|
|
||||||
nmap_leader('dC', function() require('dap').run_to_cursor() end, 'Run to Cursor')
|
|
||||||
nmap_leader('de', function() require('dap.ui.widgets').hover() end, 'Inspect')
|
|
||||||
nmap_leader('dr', function() require('dap').repl.open() end, 'Open REPL')
|
|
||||||
nmap_leader('dt', function() require('dap').terminate() end, 'Terminate')
|
|
||||||
|
|
||||||
-- Explore
|
|
||||||
local explore_at_file = function()
|
|
||||||
local file = vim.api.nvim_buf_get_name(0)
|
|
||||||
MiniFiles.open(vim.uv.fs_stat(file) and file or nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
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
|
|
||||||
nmap_leader('fb', function() MiniPick.builtin.buffers() end, 'Buffers')
|
|
||||||
nmap_leader('fc', function() MiniExtra.pickers.git_commits() end, 'Commits (all)')
|
|
||||||
nmap_leader('fC', function() MiniExtra.pickers.git_commits({ path = vim.fn.expand('%') }) end, 'Commits (buf)')
|
|
||||||
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 word')
|
|
||||||
nmap_leader('fh', function() MiniPick.builtin.help() end, 'Help tags')
|
|
||||||
nmap_leader('fl', function() MiniExtra.pickers.buf_lines({ scope = 'all' }) end, 'Lines (all)')
|
|
||||||
nmap_leader('fL', function() MiniExtra.pickers.buf_lines({ scope = 'current' }) end, 'Lines (buf)')
|
|
||||||
nmap_leader('fm', function() require('git').status() end, 'Modified / changed files')
|
|
||||||
nmap_leader('fo', function() MiniExtra.pickers.oldfiles() end, 'Old / recent files')
|
|
||||||
nmap_leader('fr', function() MiniPick.builtin.resume() end, 'Resume')
|
|
||||||
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
|
|
||||||
local diff_unstaged = function()
|
|
||||||
vim.cmd.diffthis()
|
|
||||||
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
|
|
||||||
nmap_leader('la', function() vim.lsp.buf.code_action() end, 'Actions')
|
|
||||||
nmap_leader('ld', function() vim.diagnostic.open_float() end, 'Diagnostic popup')
|
|
||||||
nmap_leader('lf', function() require('conform').format({ async = true }) end, 'Format')
|
|
||||||
xmap_leader('lf', function() require('conform').format({ async = true }) end, 'Format selection')
|
|
||||||
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')
|
|
||||||
|
|
||||||
-- Request
|
|
||||||
nmap_leader('rs', function() require('kulala').run() end, 'Send HTTP request')
|
|
||||||
|
|
||||||
-- Terminal
|
|
||||||
local open_ai = function()
|
|
||||||
vim.cmd('vertical term ' .. (vim.fn.executable('pi') == 1 and 'pi' or 'claude'))
|
|
||||||
end
|
|
||||||
|
|
||||||
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
|
|
||||||
vim.keymap.set('n', '<Esc>', vim.cmd.nohlsearch, { desc = 'Clear highlights', silent = true })
|
|
||||||
vim.keymap.set('t', '<C-w>', '<C-\\><C-n><C-w>', { desc = 'Terminal window navigation', silent = true })
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
-- UI
|
|
||||||
Config.now(function()
|
|
||||||
-- Global icon provider
|
|
||||||
require('mini.icons').setup()
|
|
||||||
Config.later(MiniIcons.tweak_lsp_kind)
|
|
||||||
require('mini.statusline').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)
|
|
||||||
|
|
||||||
Config.later(function()
|
|
||||||
-- Git diff indicators
|
|
||||||
require('mini.diff').setup()
|
|
||||||
require('mini.git').setup()
|
|
||||||
|
|
||||||
-- Keymap hints
|
|
||||||
local miniclue = require('mini.clue')
|
|
||||||
miniclue.setup({
|
|
||||||
clues = {
|
|
||||||
Config.leader_group_clues,
|
|
||||||
miniclue.gen_clues.builtin_completion(),
|
|
||||||
miniclue.gen_clues.g(),
|
|
||||||
miniclue.gen_clues.marks(),
|
|
||||||
miniclue.gen_clues.registers(),
|
|
||||||
miniclue.gen_clues.square_brackets(),
|
|
||||||
miniclue.gen_clues.windows({ submode_resize = true }),
|
|
||||||
miniclue.gen_clues.z(),
|
|
||||||
},
|
|
||||||
triggers = {
|
|
||||||
{ mode = { 'n', 'x' }, keys = '<Leader>' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = '[' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = ']' },
|
|
||||||
{ mode = 'i', keys = '<C-x>' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = 'g' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = "'" },
|
|
||||||
{ mode = { 'n', 'x' }, keys = '`' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = '"' },
|
|
||||||
{ mode = { 'i', 'c' }, keys = '<C-r>' },
|
|
||||||
{ mode = 'n', keys = '<C-w>' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = 's' },
|
|
||||||
{ mode = { 'n', 'x' }, keys = 'z' },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Editing & Navigation
|
|
||||||
Config.later(function()
|
|
||||||
require('mini.ai').setup()
|
|
||||||
require('mini.pairs').setup()
|
|
||||||
require('mini.pick').setup()
|
|
||||||
require('mini.extra').setup()
|
|
||||||
MiniPick.registry.git_status = function() require('git').status() end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- File Explorer
|
|
||||||
Config.now_if_args(function()
|
|
||||||
require('mini.files').setup()
|
|
||||||
Config.autocmd('User', 'MiniFilesExplorerOpen', function()
|
|
||||||
MiniFiles.set_bookmark('c', vim.fn.stdpath('config'), { desc = 'Config' })
|
|
||||||
MiniFiles.set_bookmark('w', vim.fn.getcwd, { desc = 'Working directory' })
|
|
||||||
end, 'Add default marks')
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Utilities
|
|
||||||
Config.now_if_args(function()
|
|
||||||
require('mini.misc').setup()
|
|
||||||
MiniMisc.setup_auto_root()
|
|
||||||
end)
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
-- Colortheme
|
|
||||||
Config.now(function()
|
|
||||||
vim.pack.add({ { src = 'https://github.com/rose-pine/neovim', name = 'rose-pine' } })
|
|
||||||
require('rose-pine').setup({
|
|
||||||
enable = { terminal = false, legacy_highlights = false, migrations = false, },
|
|
||||||
styles = { italic = false },
|
|
||||||
groups = { git_change = 'gold', git_text = 'gold' },
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.cmd.colorscheme('rose-pine')
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Treesitter
|
|
||||||
Config.now_if_args(function()
|
|
||||||
vim.pack.add({ 'https://github.com/nvim-treesitter/nvim-treesitter' })
|
|
||||||
vim.treesitter.language.register('bash', 'sh')
|
|
||||||
vim.treesitter.language.register('tsx', 'typescriptreact')
|
|
||||||
|
|
||||||
local filetypes = {
|
|
||||||
'html', 'css', 'lua', 'go', 'php', 'blade', 'sql', 'javascript',
|
|
||||||
'typescript', 'typescriptreact', 'svelte', 'dockerfile', 'yaml', 'markdown', 'dart',
|
|
||||||
'json', 'xml', 'toml', 'sh', 'zsh', 'just', 'gitcommit', 'diff', 'regex', 'http', 'kotlin'
|
|
||||||
}
|
|
||||||
|
|
||||||
Config.autocmd('FileType', filetypes, function(ev)
|
|
||||||
if pcall(vim.treesitter.start, ev.buf) and vim.bo[ev.buf].filetype == 'php' then
|
|
||||||
vim.bo[ev.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
|
||||||
end
|
|
||||||
end, 'Start tree-sitter')
|
|
||||||
|
|
||||||
Config.later(function()
|
|
||||||
local missing = {}
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
-- LSP
|
|
||||||
Config.now_if_args(function()
|
|
||||||
vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' })
|
|
||||||
vim.lsp.enable({ 'ansiblels', 'gopls', 'phpantom_lsp', 'svelte', 'tailwindcss', 'tsc', 'biome' })
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Formatting
|
|
||||||
Config.later(function()
|
|
||||||
vim.pack.add({ 'https://github.com/stevearc/conform.nvim' })
|
|
||||||
require('conform').setup({
|
|
||||||
default_format_opts = { lsp_format = 'fallback' },
|
|
||||||
format_on_save = { lsp_format = 'fallback', timeout_ms = 1000 },
|
|
||||||
formatters_by_ft = {
|
|
||||||
go = { 'gofumpt', 'goimports' },
|
|
||||||
php = { 'php_cs_fixer' },
|
|
||||||
json = { 'jq' },
|
|
||||||
javascript = { 'biome' },
|
|
||||||
typescript = { 'biome' },
|
|
||||||
javascriptreact = { 'biome' },
|
|
||||||
typescriptreact = { 'biome' },
|
|
||||||
svelte = { 'biome' },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- DAP
|
|
||||||
Config.later(function()
|
|
||||||
vim.pack.add({ 'https://github.com/mfussenegger/nvim-dap' })
|
|
||||||
|
|
||||||
local dap_signs = {
|
|
||||||
DapBreakpoint = { text = '', texthl = 'DapBreakpoint' },
|
|
||||||
DapBreakpointCondition = { text = '', texthl = 'DapBreakpointCondition' },
|
|
||||||
DapLogPoint = { text = '', texthl = 'DapLogPoint' },
|
|
||||||
DapStopped = { text = '', texthl = 'DapStopped', linehl = 'DapStoppedLine' },
|
|
||||||
DapBreakpointRejected = { text = '', texthl = 'DapBreakpointRejected' },
|
|
||||||
}
|
|
||||||
for name, sign in pairs(dap_signs) do
|
|
||||||
vim.fn.sign_define(name, sign)
|
|
||||||
end
|
|
||||||
|
|
||||||
require('dap').adapters.go = { type = 'server', host = '127.0.0.1', port = '${port}' }
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Kulala
|
|
||||||
Config.autocmd('FileType', 'http', function()
|
|
||||||
vim.pack.add({ 'https://github.com/mistweaverco/kulala.nvim' })
|
|
||||||
require('kulala').setup({ default_env = 'dev' })
|
|
||||||
end, 'Setup Kulala', true)
|
|
||||||
|
|
||||||
-- Flutter
|
|
||||||
Config.autocmd('FileType', 'dart', function()
|
|
||||||
vim.pack.add({
|
|
||||||
'https://github.com/nvim-lua/plenary.nvim',
|
|
||||||
'https://github.com/nvim-flutter/flutter-tools.nvim',
|
|
||||||
})
|
|
||||||
require('flutter-tools').setup({ lsp = { color_capabilities = true } })
|
|
||||||
end, 'Setup flutter', true)
|
|
||||||
Reference in New Issue
Block a user