low hanging fixes

This commit is contained in:
jordanyono 2026-05-04 23:01:25 -04:00
parent 6d7ac09a9e
commit f6a12c9a9f
9 changed files with 58 additions and 104 deletions

View File

@ -10,29 +10,42 @@
Small, focused utility used by `plugins.kickstart.keymaps` (`<leader>go`). Small, focused utility used by `plugins.kickstart.keymaps` (`<leader>go`).
Kept under `custom/` so it stays clearly yours vs. generated plugin specs. Kept under `custom/` so it stays clearly yours vs. generated plugin specs.
Dependencies: git(1), xdg-open (Linux); file must be tracked by git. Dependencies: git(1); `vim.ui.open` on Nvim 0.10+, else `open` / `xdg-open` / `cmd start`.
]] ]]
local M = {} local M = {}
---@param url string
local function open_url(url)
if vim.ui and vim.ui.open then
vim.ui.open(url)
return
end
local cmd
if vim.fn.has 'win32' == 1 then
cmd = { 'cmd', '/c', 'start', '', url }
elseif vim.fn.has 'macunix' == 1 then
cmd = { 'open', url }
else
cmd = { 'xdg-open', url }
end
vim.fn.jobstart(cmd, { detach = true })
end
M.open_github = function() M.open_github = function()
-- Get current file path relative to the git project root
local file_path = vim.fn.systemlist('git ls-files --full-name ' .. vim.fn.expand '%')[1] local file_path = vim.fn.systemlist('git ls-files --full-name ' .. vim.fn.expand '%')[1]
if not file_path or file_path == '' then if not file_path or file_path == '' then
print 'File not tracked by git.' print 'File not tracked by git.'
return return
end end
-- Get remote URL and clean it up (handles HTTPS and SSH)
local remote = vim.fn.system('git config --get remote.origin.url'):gsub('\n', ''):gsub('%.git$', '') local remote = vim.fn.system('git config --get remote.origin.url'):gsub('\n', ''):gsub('%.git$', '')
if remote:match '^git@' then if remote:match '^git@' then
remote = remote:gsub(':', '/'):gsub('git@', 'https://') remote = remote:gsub(':', '/'):gsub('git@', 'https://')
end end
-- Get current branch
local branch = vim.fn.system('git rev-parse --abbrev-ref HEAD'):gsub('\n', '') local branch = vim.fn.system('git rev-parse --abbrev-ref HEAD'):gsub('\n', '')
-- Get line numbers (handles single line or visual selection)
local line_start = vim.fn.line 'v' local line_start = vim.fn.line 'v'
local line_end = vim.fn.line '.' local line_end = vim.fn.line '.'
if line_start > line_end then if line_start > line_end then
@ -44,11 +57,8 @@ M.open_github = function()
line_anchor = 'L' .. line_start .. '-L' .. line_end line_anchor = 'L' .. line_start .. '-L' .. line_end
end end
-- Build and open the URL
local url = string.format('%s/blob/%s/%s#%s', remote, branch, file_path, line_anchor) local url = string.format('%s/blob/%s/%s#%s', remote, branch, file_path, line_anchor)
open_url(url)
-- Linux only: using xdg-open in the background to avoid freezing Neovim
vim.fn.jobstart({ 'xdg-open', url }, { detach = true })
print 'Opened in GitHub' print 'Opened in GitHub'
end end

View File

@ -4,17 +4,16 @@
Purpose Purpose
Sets buffer-agnostic Neovim options (`vim.o` / `vim.opt`): editing feel, Sets buffer-agnostic Neovim options (`vim.o` / `vim.opt`): editing feel,
UI chrome, search, splits, and persistence (e.g. undofile). UI chrome, search, splits, line numbers, and persistence (e.g. undofile).
Rationale Rationale
Centralizing options keeps behavior predictable and documents defaults in Centralizing options keeps behavior predictable. Line numbers use `vim.opt`
one place. Clipboard is scheduled after UI enter to avoid slowing startup. only (no duplicate `vim.o.number`). Clipboard is scheduled after UI enter to
avoid slowing startup.
See `:help vim.o`, `:help option-list`, `:help 'clipboard'`. See `:help vim.o`, `:help option-list`, `:help 'clipboard'`.
]] ]]
vim.o.number = true
vim.o.mouse = 'a' vim.o.mouse = 'a'
vim.o.showmode = false vim.o.showmode = false

View File

@ -31,27 +31,9 @@ return {
---@type conform.setupOpts ---@type conform.setupOpts
opts = { opts = {
notify_on_error = false, notify_on_error = false,
format_on_save = function(bufnr) -- Explicit: no format-on-save (use `<leader>f` manually). Previously a
-- Disable "format_on_save lsp_fallback" for languages that don't -- `format_on_save` function always returned nil with dead branch logic.
-- have a well standardized coding style. You can add additional format_on_save = false,
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = {
c = true,
cpp = true,
typescript = true,
typescriptreact = true,
javascript = true,
javascriptreact = true,
python = true,
sql = true,
json = true,
}
if disable_filetypes[vim.bo[bufnr].filetype] then
return nil
else
return nil
end
end,
default_format_opts = { default_format_opts = {
lsp_format = 'fallback', -- Use external formatters if configured below, otherwise use LSP formatting. Set to `false` to disable LSP formatting entirely. lsp_format = 'fallback', -- Use external formatters if configured below, otherwise use LSP formatting. Set to `false` to disable LSP formatting entirely.
}, },

View File

@ -41,35 +41,8 @@ return {
{ 'j-hui/fidget.nvim', opts = {} }, { 'j-hui/fidget.nvim', opts = {} },
}, },
config = function() config = function()
-- Brief aside: **What is LSP?** -- LspAttach: buffer-local LSP maps and optional semantic highlight / inlay hints.
-- -- See :help LspAttach, :help lsp-vs-treesitter
-- LSP is an initialism you've probably heard, but might not understand what it is.
--
-- LSP stands for Language Server Protocol. It's a protocol that helps editors
-- and language tooling communicate in a standardized fashion.
--
-- In general, you have a "server" which is some tool built to understand a particular
-- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
-- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
-- processes that communicate with some "client" - in this case, Neovim!
--
-- LSP provides Neovim with features like:
-- - Go to definition
-- - Find references
-- - Autocompletion
-- - Symbol Search
-- - and more!
--
-- Thus, Language Servers are external tools that must be installed separately from
-- Neovim. This is where `mason` and related plugins come into play.
--
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully
-- and elegantly composed help section, `:help lsp-vs-treesitter`
-- This function gets run when an LSP attaches to a particular buffer.
-- That is to say, every time a new file is opened that is associated with
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
-- function will be executed to configure the current buffer
vim.api.nvim_create_autocmd('LspAttach', { vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
callback = function(event) callback = function(event)
@ -172,21 +145,14 @@ return {
-- --
-- This may be unwanted, since they displace some of your code -- This may be unwanted, since they displace some of your code
if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then
map('<leader>th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) end, '[T]oggle Inlay [H]ints') -- `<leader>th` is used in keymaps.lua for terminal horizontal split.
map('<leader>ti', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) end, '[T]oggle [I]nlay hints')
end end
end, end,
}) })
-- LSP servers and clients are able to communicate to each other what features they support.
-- By default, Neovim doesn't support everything that is in the LSP specification.
-- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with blink.cmp, and then broadcast that to the servers.
local capabilities = require('blink.cmp').get_lsp_capabilities() local capabilities = require('blink.cmp').get_lsp_capabilities()
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- See `:help lsp-config` for information about keys and how to configure
---@type table<string, vim.lsp.Config> ---@type table<string, vim.lsp.Config>
local servers = { local servers = {
clangd = {}, clangd = {},
@ -376,14 +342,6 @@ return {
}, },
}, },
} }
--
-- --
-- -- FORCE GOPLS SETUP
-- --
-- local gopls_config = servers.gopls
-- gopls_config.capabilities = vim.tbl_deep_extend('force', {}, capabilities, gopls_config.capabilities or {})
-- require('lspconfig').gopls.setup(gopls_config)
--
-- Ensure the servers and tools above are installed -- Ensure the servers and tools above are installed
-- --

View File

@ -1,21 +0,0 @@
--[[
Path: lua/plugins/kickstart/plugins/neotest_golang.lua
Module: plugins.kickstart.plugins.neotest_golang
Purpose
Lazy spec for neotest-golang: Neotest adapter for Go tests (table-driven,
subtests) when you wire Neotest core elsewhere.
Rationale
Declared as a standalone plugin entry so enabling `nvim-neotest/neotest`
later only requires adding the core plugin + runners; this stays inert until then.
See https://github.com/nvim-neotest/neotest and adapter README.
]]
---@type LazySpec
return {
{
'fredrikaverpil/neotest-golang',
},
}

View File

@ -42,7 +42,7 @@ local mods = {
'plugins.kickstart.plugins.mini', 'plugins.kickstart.plugins.mini',
'plugins.kickstart.plugins.treesitter', 'plugins.kickstart.plugins.treesitter',
'plugins.kickstart.plugins.vim_helm', 'plugins.kickstart.plugins.vim_helm',
'plugins.kickstart.plugins.neotest_golang', 'plugins.kickstart.plugins.toggleterm',
'plugins.kickstart.plugins.mini_icons', 'plugins.kickstart.plugins.mini_icons',
'plugins.kickstart.plugins.debug', 'plugins.kickstart.plugins.debug',
'plugins.kickstart.plugins.indent_line', 'plugins.kickstart.plugins.indent_line',

View File

@ -0,0 +1,26 @@
--[[
Path: lua/plugins/kickstart/plugins/toggleterm.lua
Module: plugins.kickstart.plugins.toggleterm
Purpose
Lazy spec for akinsho/toggleterm.nvim: floating terminal and the `:ToggleTerm`
command used by `<leader>tf` in `plugins.kickstart.keymaps`.
Rationale
Keymaps referenced ToggleTerm without a plugin; this wires the dependency.
Floating keeps the editor context visible; change `direction` if you prefer split.
See https://github.com/akinsho/toggleterm.nvim
]]
---@type LazySpec
return {
{
'akinsho/toggleterm.nvim',
version = '*',
opts = {
direction = 'float',
float_opts = { border = 'rounded' },
},
},
}

View File

@ -45,7 +45,6 @@ return {
'css', 'css',
'helm', 'helm',
'dockerfile', 'dockerfile',
'bash',
'yaml', 'yaml',
'sql', 'sql',
'hcl', 'hcl',

View File

@ -30,6 +30,7 @@ return {
spec = { spec = {
{ '<leader>s', group = '[S]earch', mode = { 'n', 'v' } }, { '<leader>s', group = '[S]earch', mode = { 'n', 'v' } },
{ '<leader>t', group = '[T]oggle' }, { '<leader>t', group = '[T]oggle' },
{ '<leader>ti', desc = 'LSP inlay hints', mode = { 'n' } },
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } }, -- Enable gitsigns recommended keymaps first { '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } }, -- Enable gitsigns recommended keymaps first
{ 'gr', group = 'LSP Actions', mode = { 'n' } }, { 'gr', group = 'LSP Actions', mode = { 'n' } },
}, },