feat(nvim): plugins, fixes, helpers

Plugins:
- voldikss/vim-floaterm
- vim-test/vim-test
- tpope/vim-projectionist
- phpactor/phpactor
- catgoose/nvim-colorizer.lua

Fixes:
- lsp diagnostics config
- lsp diagnostics icons
- neo-tree configuration fixes
- tokyonight.nvim color scheme tweaks

Lots of tweaks to options.lua
This commit is contained in:
2025-01-07 21:41:56 +02:00
parent 8a3763e168
commit 09d62dd159
7 changed files with 406 additions and 59 deletions

View File

@@ -42,6 +42,18 @@ K.nl('o', function() require('snacks').gitbrowse() end, 'Open repo in browser')
K.n('<C-s>', ':w!<cr>', { desc = 'Save', noremap = true })
K.n('<esc><esc>', ':nohlsearch<cr>', { desc = 'Clear Search Highlighting' })
-- ── ToggleTerm ──────────────────────────────────────────────────────
K.d('<F1>', 'n', ':FloatermToggle<CR>', 'Toggle Floaterm')
K.d('<F1>', 'i', '<Esc>:FloatermToggle<CR>', 'Toggle Floaterm')
K.d('<F1>', 't', '<C-\\><C-n>:FloatermToggle<CR>', 'Toggle Floaterm')
-- ── Test operations ─────────────────────────────────────────────────
K.nl('an', ':silent TestNearest<CR>', 'Test Nearest')
K.nl('af', ':silent TestFile<CR>', 'Test File')
K.nl('as', ':silent TestSuite<CR>', 'Test Suite')
K.nl('al', ':silent TestLast<CR>', 'Test Last')
K.nl('av', ':silent TestVisit<CR>', 'Test Visit')
-- ── Buffer operations ───────────────────────────────────────────────
-- Mappings for buffer management operations like switching, deleting, etc.
-- Convention: All mappings start with 'b' followed by the operation
@@ -90,7 +102,7 @@ K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
-- Mappings for Telescope operations like finding files, buffers, etc.
-- Convention: All mappings start with 's' followed by the operation
-- unless it's a generic operation like searching or finding buffers
K.nl('f', ':Telescope find_files<cr>', 'Find Files')
K.nl('f', ':Telescope fd --hidden=true<cr>', 'Find Files')
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
K.nl(
'/',
@@ -105,6 +117,11 @@ K.nl(
'Fuzzily search in current buffer'
)
K.nl('pm', ':PhpactorContextMenu<cr>', 'PHPactor: Context Menu')
K.nl('pn', ':PhpactorClassNew<cr>', 'PHPactor: Class New')
K.nl('ps', ':PhpactorClassSearch<cr>', 'PHPactor: Class Search')
K.nl('pt', ':PhpactorTransform<cr>', 'PHPactor: Transform')
K.nl('sc', ':Telescope commands<cr>', 'Commands')
K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
K.nl('sg', ':Telescope live_grep<cr>', 'Search by Grep')
@@ -119,7 +136,6 @@ K.nl(
)
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
K.nl('st', ':TodoTelescope<cr>', 'Search Todos')
K.nl('sw', ':Telescope grep_string<cr>', 'Grep String')
K.nl('sx', ':Telescope import<cr>', 'Telescope: Import')

View File

@@ -24,13 +24,15 @@ g.loaded_java_provider = 0 -- Disable java provider
-- vim.options
-- Most of the good defaults are provided by `mini.basics`
-- See: lua/plugins/mini.lua
o.confirm = true -- Confirm before closing unsaved buffers
o.ignorecase = true -- Ignore case in search patterns
o.inccommand = 'split' -- Preview substitutions live, as you type!
o.number = true -- Show line numbers
o.numberwidth = 3 -- Set the width of the number column
o.relativenumber = true -- Show relative line numbers
o.scrolloff = 15 -- Show context around cursor
o.signcolumn = 'yes:3' -- Keep signcolumn on by default
o.scrolloff = 8 -- Show context around cursor
o.sidescrolloff = 8 -- Show context around cursor
o.signcolumn = 'yes' -- Keep signcolumn on by default
o.spell = true -- Enable spell checking
o.spelllang = 'en_us' -- Set the spell checking language
o.splitbelow = true -- split to the bottom
@@ -41,6 +43,8 @@ o.updatetime = 250 -- 250 ms = 2,5 seconds
o.sessionoptions =
'buffers,curdir,folds,tabpages,winsize,winpos,terminal,localoptions'
o.wildmode = 'longest:full,full' -- Command-line completion mode
-- Enable the colorcolumn
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })

View File

@@ -8,6 +8,47 @@ return {
opts = { enabled = true, snippet_engine = 'luasnip' },
},
-- Terminal manager for (neo)vim
-- https://github.com/voldikss/vim-floaterm
{
'voldikss/vim-floaterm',
cmd = { 'FloatermToggle' },
init = function()
vim.g.floaterm_width = 0.8
vim.g.floaterm_height = 0.8
end,
},
-- Run your tests at the speed of thought
-- https://github.com/vim-test/vim-test
{
'vim-test/vim-test',
dependencies = { 'voldikss/vim-floaterm' },
config = function()
vim.cmd [[
function! PhpUnitTransform(cmd) abort
return join(map(split(a:cmd), 'v:val == "--colors" ? "--colors=always" : v:val'))
endfunction
let g:test#custom_transformations = {'phpunit': function('PhpUnitTransform')}
let g:test#transformation = 'phpunit'
" let test#php#phpunit#options = '--colors=always'
let test#php#pest#options = '-v'
let test#javascript#jest#options = '--color'
function! FloatermStrategy(cmd)
execute 'silent FloatermSend q'
execute 'silent FloatermKill'
execute 'FloatermNew! '.a:cmd.' | less -X'
endfunction
let g:test#custom_strategies = {'floaterm': function('FloatermStrategy')}
let g:test#strategy = 'floaterm'
]]
end,
},
-- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim
{
@@ -36,6 +77,82 @@ return {
},
},
-- projectionist.vim: Granular project configuration
-- https://github.com/tpope/vim-projectionist
{
'tpope/vim-projectionist',
dependencies = 'tpope/vim-dispatch',
config = function()
vim.g.projectionist_heuristics = {
artisan = {
['*'] = {
start = 'php artisan serve',
console = 'php artisan tinker',
},
['app/*.php'] = {
type = 'source',
alternate = {
'tests/Unit/{}Test.php',
'tests/Feature/{}Test.php',
},
},
['tests/Feature/*Test.php'] = {
type = 'test',
alternate = 'app/{}.php',
},
['tests/Unit/*Test.php'] = {
type = 'test',
alternate = 'app/{}.php',
},
['app/Models/*.php'] = {
type = 'model',
},
['app/Http/Controllers/*.php'] = {
type = 'controller',
},
['routes/*.php'] = {
type = 'route',
},
['database/migrations/*.php'] = {
type = 'migration',
},
},
['src/&composer.json'] = {
['src/*.php'] = {
type = 'source',
alternate = {
'tests/{}Test.php',
},
},
['tests/*Test.php'] = {
type = 'test',
alternate = 'src/{}.php',
},
},
['app/&composer.json'] = {
['app/*.php'] = {
type = 'source',
alternate = {
'tests/{}Test.php',
},
},
['tests/*Test.php'] = {
type = 'test',
alternate = 'app/{}.php',
},
},
}
end,
},
-- A vim text object for XML/HTML attributes.
-- https://github.com/whatyouhide/vim-textobj-xmlattr
{
'whatyouhide/vim-textobj-xmlattr',
dependencies = { 'kana/vim-textobj-user' },
opts = {},
},
-- Describe the regexp under the cursor
-- https://github.com/bennypowers/nvim-regexplainer
{
@@ -84,4 +201,12 @@ return {
ft = { 'go', 'gomod' },
build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries
},
-- Mainly a PHP Language Server with more features than you can shake a stick at
-- https://github.com/phpactor/phpactor
{
'phpactor/phpactor',
build = 'composer install --no-dev --optimize-autoloader',
ft = 'php',
},
}

View File

@@ -26,7 +26,15 @@ local lsp_servers = {
},
},
html = {},
intelephense = {},
intelephense = {
commands = {
IntelephenseIndex = {
function()
vim.lsp.buf.execute_command { command = 'intelephense.index.workspace' }
end,
},
},
},
jsonls = {},
lua_ls = {
settings = {
@@ -236,12 +244,12 @@ return {
config = function(_, opts)
require('lazydev').setup()
require('lsp-setup').setup(opts)
local cmp = require 'blink.cmp'
local lspconfig = require 'lspconfig'
for server, config in pairs(opts.servers) do
-- passing config.capabilities to blink.cmp merges with the capabilities in your
-- `opts[server].capabilities, if you've defined it
config.capabilities =
require('blink.cmp').get_lsp_capabilities(config.capabilities)
config.capabilities = cmp.get_lsp_capabilities(config.capabilities)
lspconfig[server].setup(config)
end
@@ -289,6 +297,32 @@ return {
},
}
-- Diagnostic configuration
vim.diagnostic.config {
virtual_text = false,
float = {
source = true,
},
}
-- Sign configuration
vim.fn.sign_define(
'DiagnosticSignError',
{ text = '', texthl = 'DiagnosticSignError' }
)
vim.fn.sign_define(
'DiagnosticSignWarn',
{ text = '', texthl = 'DiagnosticSignWarn' }
)
vim.fn.sign_define(
'DiagnosticSignInfo',
{ text = '', texthl = 'DiagnosticSignInfo' }
)
vim.fn.sign_define(
'DiagnosticSignHint',
{ text = '', texthl = 'DiagnosticSignHint' }
)
-- end of junnplus/lsp-setup config
end,
},

View File

@@ -31,9 +31,43 @@ return {
cmd = 'Neotree',
opts = {
close_if_last_window = true,
hide_root_node = true,
popup_border_style = 'rounded',
enable_git_status = true,
enable_diagnostics = true,
sources = {
'filesystem',
'buffers',
'document_symbols',
},
source_selector = {
winbar = true,
statusline = false,
separator = { left = '', right = '' },
show_separator_on_edge = true,
highlight_tab = 'SidebarTabInactive',
highlight_tab_active = 'SidebarTabActive',
highlight_background = 'StatusLine',
highlight_separator = 'SidebarTabInactiveSeparator',
highlight_separator_active = 'SidebarTabActiveSeparator',
},
event_handlers = {
{
event = 'file_opened',
handler = function(file_path)
require('neo-tree.command').execute { action = 'close' }
end,
},
},
default_component_configs = {
indent = {
padding = 0,
},
name = {
use_git_status_colors = true,
highlight_opened_files = true,
},
},
git_status = {
symbols = {
-- Change type
@@ -54,59 +88,18 @@ return {
mappings = {
['<Esc>'] = 'close_window',
['q'] = 'close_window',
['<cr>'] = 'open_with_window_picker',
},
},
filtered_items = {
hide_dotfiles = true,
hide_gitignored = true,
hide_dotfiles = false,
hide_hidden = true, -- only works on Windows for hidden files/directories
never_show = {
'.DS_Store',
},
hide_by_name = {
'node_modules',
},
always_show = {
'.actrc',
'.browserslistrc',
'.commitlintrc.json',
'.editorconfig',
'.env',
'.env.example',
'.envrc',
'.eslintrc.json',
'.github',
'.gitignore',
'.gitkeep',
'.ignore',
'.markdownlint.json',
'.markdownlint.yaml',
'.markdownlintignore',
'.nvmrc',
'.prettierignore',
'.prettierrc.js',
'.prettierrc.json',
'.prettierrc.yaml',
'.python-version',
'.releaserc.json',
'.shellcheckrc',
'.simple-git-hooks.json',
'.stylelintrc.json',
'.stylua.toml',
'.yamlignore',
'.yamllint.yaml',
},
always_show_by_pattern = {
'.*.json',
'.*.toml',
'.*.yaml',
'.*.yml',
'.*rc',
'.*rc.*',
'.env*',
'.prettierrc*',
'.markdownlint*',
'.stylua.*',
'.git',
},
},
},

View File

@@ -7,6 +7,121 @@ return {
init = function() vim.cmd.colorscheme(vim.g.colors_theme) end,
opts = {
transparent = true,
on_colors = function(colors)
colors.gitSigns = {
add = colors.teal,
change = colors.purple,
delete = colors.red,
}
end,
on_highlights = function(hl, c)
local util = require 'tokyonight.util'
local prompt = '#2d3149'
hl.NeoTreeFileNameOpened = {
fg = c.orange,
}
hl.GitSignsCurrentLineBlame = {
fg = c.fg_gutter,
}
hl.StatusLine = {
bg = util.darken(c.bg_dark, 0.98, '#000000'),
fg = c.fg_dark,
}
hl.StatusLineComment = {
bg = util.darken(c.bg_dark, 0.85, '#000000'),
fg = c.comment,
}
hl.LineNrAbove = {
fg = c.fg_gutter,
}
hl.LineNr = {
fg = util.lighten(c.fg_gutter, 0.7),
}
hl.LineNrBelow = {
fg = c.fg_gutter,
}
hl.MsgArea = {
bg = util.darken(c.bg_dark, 0.85, '#000000'),
}
-- Spelling
hl.SpellBad = {
undercurl = true,
sp = '#7F3A43',
}
-- Telescope
hl.TelescopeNormal = {
bg = c.bg_dark,
fg = c.fg_dark,
}
hl.TelescopeBorder = {
bg = c.bg_dark,
fg = c.bg_dark,
}
hl.TelescopePromptNormal = {
bg = prompt,
}
hl.TelescopePromptBorder = {
bg = prompt,
fg = prompt,
}
hl.TelescopePromptTitle = {
bg = c.bg,
fg = c.fg_dark,
}
hl.TelescopePreviewTitle = {
bg = c.bg_dark,
fg = c.bg_dark,
}
hl.TelescopeResultsTitle = {
bg = c.bg_dark,
fg = c.bg_dark,
}
-- Indent
hl.MiniIndentscopeSymbol = {
fg = util.darken(c.bg_highlight, 0.30),
}
hl.IblScope = {
fg = util.darken(c.bg_highlight, 0.80),
}
-- Floaterm
hl.Floaterm = {
bg = prompt,
}
hl.FloatermBorder = {
bg = prompt,
fg = prompt,
}
-- Copilot
hl.CopilotSuggestion = {
fg = c.comment,
}
-- NeoTree
hl.NeoTreeFileNameOpened = {
fg = c.fg,
bold = true,
}
hl.NvimTreeNormal = {
bg = util.darken(c.bg_dark, 0.85, '#000000'),
}
hl.NvimTreeNormalNC = {
bg = util.darken(c.bg_dark, 0.85, '#000000'),
}
hl.NvimTreeWinSeparator = {
fg = util.darken(c.bg_dark, 0.85, '#000000'),
bg = util.darken(c.bg_dark, 0.85, '#000000'),
}
end,
},
},
@@ -27,6 +142,17 @@ return {
},
},
-- The fastest Neovim colorizer
-- https://github.com/catgoose/nvim-colorizer.lua
{
'catgoose/nvim-colorizer.lua',
opts = {
user_default_options = {
names = false,
},
},
},
-- A neovim plugin that shows colorcolumn dynamically
-- https://github.com/Bekaboo/deadcolumn.nvim
{ 'Bekaboo/deadcolumn.nvim' },