update config

This commit is contained in:
Phil Nguyen 2025-12-10 10:24:30 -08:00 committed by DBLA
parent 1bd4a54f28
commit 362325b985
2 changed files with 311 additions and 99 deletions

324
init.lua
View File

@ -540,6 +540,7 @@ require('lazy').setup({
-- --
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
-- and elegantly composed help section, `:help lsp-vs-treesitter` -- and elegantly composed help section, `:help lsp-vs-treesitter`
local lspconfig = require 'lspconfig'
-- This function gets run when an LSP attaches to a particular buffer. -- 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 -- That is to say, every time a new file is opened that is associated with
@ -693,6 +694,71 @@ require('lazy').setup({
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
-- - settings (table): Override the default settings passed when initializing the server. -- - settings (table): Override the default settings passed when initializing the server.
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
local on_attach = function(_, bufnr)
local map = function(keys, func, desc, mode)
mode = mode or 'n'
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
end
opts.buffer = bufnr
-- opts.desc = 'Show line diagnostics'
-- vim.keymap.set('n', '<leader>d', vim.diagnostic.open_float, opts)
--
-- opts.desc = 'Show documentation for what is under cursor'
-- vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
--
-- opts.desc = 'Show LSP definition'
-- vim.keymap.set('n', 'gd', '<cmd>Telescope lsp_definitions trim_text=true<cr>', opts)
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' })
-- Find references for the word under your cursor.
map('grr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map('gri', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map('grd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map('gO', require('telescope.builtin').lsp_document_symbols, 'Open Document Symbols')
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map('gW', require('telescope.builtin').lsp_dynamic_workspace_symbols, 'Open Workspace Symbols')
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition')
end
local lspconfig = vim.lsp.config
lspconfig('sourcekit', {
capabilities = capabilities,
on_attach = on_attach,
root_dir = function(_, callback)
callback(require('lspconfig.util').root_pattern 'Package.swift'(vim.fn.getcwd()) or require('lspconfig.util').find_git_ancestor(vim.fn.getcwd()))
end,
cmd = { vim.trim(vim.fn.system 'xcrun -f sourcekit-lsp') },
})
vim.lsp.enable 'sourcekit'
local servers = { local servers = {
clangd = {}, clangd = {},
gopls = {}, gopls = {},
@ -705,8 +771,6 @@ require('lazy').setup({
-- --
-- But for many setups, the LSP (`ts_ls`) will work just fine -- But for many setups, the LSP (`ts_ls`) will work just fine
ts_ls = {}, ts_ls = {},
--
lua_ls = { lua_ls = {
-- cmd = { ... }, -- cmd = { ... },
-- filetypes = { ... }, -- filetypes = { ... },
@ -1360,6 +1424,92 @@ require('lazy').setup({
vim.keymap.set('n', '<leader>yc', '<Cmd>MeowYarn call callees<CR>', { desc = 'Yarn: Callees' }) vim.keymap.set('n', '<leader>yc', '<Cmd>MeowYarn call callees<CR>', { desc = 'Yarn: Callees' })
end, end,
}, },
{
'folke/flash.nvim',
event = 'VeryLazy',
---@type Flash.Config
opts = {},
keys = {
{
's',
mode = { 'n', 'x', 'o' },
function()
require('flash').jump()
end,
desc = 'Flash',
},
{
'S',
mode = { 'n', 'x', 'o' },
function()
require('flash').treesitter()
end,
desc = 'Flash Treesitter',
},
{
'r',
mode = 'o',
function()
require('flash').remote()
end,
desc = 'Remote Flash',
},
{
'R',
mode = { 'o', 'x' },
function()
require('flash').treesitter_search()
end,
desc = 'Treesitter Search',
},
{
'<c-s>',
mode = { 'c' },
function()
require('flash').toggle()
end,
desc = 'Toggle Flash Search',
},
},
},
{
'wojciech-kulik/xcodebuild.nvim',
dependencies = {
'MunifTanjim/nui.nvim',
'nvim-treesitter/nvim-treesitter', -- (optional) for Quick tests support (required Swift parser)
},
config = function()
require('xcodebuild').setup {
-- put some options here or leave it empty to use default settings
}
vim.keymap.set('n', '<leader>X', '<cmd>XcodebuildPicker<cr>', { desc = 'Show Xcodebuild Actions' })
vim.keymap.set('n', '<leader>xf', '<cmd>XcodebuildProjectManager<cr>', { desc = 'Show Project Manager Actions' })
vim.keymap.set('n', '<leader>xb', '<cmd>XcodebuildBuild<cr>', { desc = 'Build Project' })
vim.keymap.set('n', '<leader>xB', '<cmd>XcodebuildBuildForTesting<cr>', { desc = 'Build For Testing' })
vim.keymap.set('n', '<leader>xr', '<cmd>XcodebuildBuildRun<cr>', { desc = 'Build & Run Project' })
vim.keymap.set('n', '<leader>xt', '<cmd>XcodebuildTest<cr>', { desc = 'Run Tests' })
vim.keymap.set('v', '<leader>xt', '<cmd>XcodebuildTestSelected<cr>', { desc = 'Run Selected Tests' })
vim.keymap.set('n', '<leader>xT', '<cmd>XcodebuildTestClass<cr>', { desc = 'Run Current Test Class' })
vim.keymap.set('n', '<leader>x.', '<cmd>XcodebuildTestRepeat<cr>', { desc = 'Repeat Last Test Run' })
vim.keymap.set('n', '<leader>xl', '<cmd>XcodebuildToggleLogs<cr>', { desc = 'Toggle Xcodebuild Logs' })
vim.keymap.set('n', '<leader>xc', '<cmd>XcodebuildToggleCodeCoverage<cr>', { desc = 'Toggle Code Coverage' })
vim.keymap.set('n', '<leader>xC', '<cmd>XcodebuildShowCodeCoverageReport<cr>', { desc = 'Show Code Coverage Report' })
vim.keymap.set('n', '<leader>xe', '<cmd>XcodebuildTestExplorerToggle<cr>', { desc = 'Toggle Test Explorer' })
vim.keymap.set('n', '<leader>xs', '<cmd>XcodebuildFailingSnapshots<cr>', { desc = 'Show Failing Snapshots' })
vim.keymap.set('n', '<leader>xp', '<cmd>XcodebuildPreviewGenerateAndShow<cr>', { desc = 'Generate Preview' })
vim.keymap.set('n', '<leader>x<cr>', '<cmd>XcodebuildPreviewToggle<cr>', { desc = 'Toggle Preview' })
vim.keymap.set('n', '<leader>xd', '<cmd>XcodebuildSelectDevice<cr>', { desc = 'Select Device' })
vim.keymap.set('n', '<leader>xq', '<cmd>Telescope quickfix<cr>', { desc = 'Show QuickFix List' })
vim.keymap.set('n', '<leader>xx', '<cmd>XcodebuildQuickfixLine<cr>', { desc = 'Quickfix Line' })
vim.keymap.set('n', '<leader>xa', '<cmd>XcodebuildCodeActions<cr>', { desc = 'Show Code Actions' })
end,
},
{ {
'NickvanDyke/opencode.nvim', 'NickvanDyke/opencode.nvim',
dependencies = { dependencies = {
@ -1370,83 +1520,103 @@ require('lazy').setup({
opts = { opts = {
-- Your configuration, if any — see lua/opencode/config.lua -- Your configuration, if any — see lua/opencode/config.lua
}, },
keys = { config = function()
-- Recommended keymaps vim.keymap.set({ 'n', 'x' }, '<leader>oa', function()
{ require('opencode').ask('@this: ', { submit = true })
'<leader>oA', end, { desc = 'Ask opencode' })
function() vim.keymap.set({ 'n', 'x' }, '<leader>os', function()
require('opencode').ask() require('opencode').select()
end, end, { desc = 'Execute opencode action…' })
desc = 'Ask opencode', vim.keymap.set({ 'n', 'x' }, 'ga', function()
}, require('opencode').prompt '@this'
{ end, { desc = 'Add to opencode' })
'<leader>oa', vim.keymap.set({ 'n', 't' }, '<leader>ot', function()
function()
require('opencode').ask '@cursor: '
end,
desc = 'Ask opencode about this',
mode = 'n',
},
{
'<leader>oa',
function()
require('opencode').ask '@selection: '
end,
desc = 'Ask opencode about selection',
mode = 'v',
},
{
'<leader>ot',
function()
require('opencode').toggle() require('opencode').toggle()
end, { desc = 'Toggle opencode' })
vim.keymap.set('n', '<S-C-u>', function()
require('opencode').command 'session.half.page.up'
end, { desc = 'opencode half page up' })
vim.keymap.set('n', '<S-C-d>', function()
require('opencode').command 'session.half.page.down'
end, { desc = 'opencode half page down' })
end, end,
desc = 'Toggle embedded opencode', -- keys = {
}, -- -- Recommended keymaps
{ -- {
'<leader>on', -- '<leader>oA',
function() -- function()
require('opencode').command 'session_new' -- require('opencode').ask()
end, -- end,
desc = 'New session', -- desc = 'Ask opencode',
}, -- },
{ -- -- {
'<leader>oy', -- -- '<leader>oa',
function() -- -- function()
require('opencode').command 'messages_copy' -- -- require('opencode').ask('@this: ', { submit = true })
end, -- -- end,
desc = 'Copy last message', -- -- desc = 'Ask opencode about this',
}, -- -- mode = 'n',
{ -- -- },
'<S-C-u>', -- -- {
function() -- -- '<leader>oa',
require('opencode').command 'messages_half_page_up' -- -- function()
end, -- -- require('opencode').ask '@selection: '
desc = 'Scroll messages up', -- -- end,
}, -- -- desc = 'Ask opencode about selection',
{ -- -- mode = 'v',
'<S-C-d>', -- -- },
function() -- {
require('opencode').command 'messages_half_page_down' -- '<leader>ot',
end, -- function()
desc = 'Scroll messages down', -- require('opencode').toggle()
}, -- end,
{ -- desc = 'Toggle embedded opencode',
'<leader>op', -- },
function() -- {
require('opencode').select_prompt() -- '<leader>on',
end, -- function()
desc = 'Select prompt', -- require('opencode').command 'session_new'
mode = { 'n', 'v' }, -- end,
}, -- desc = 'New session',
-- Example: keymap for custom prompt -- },
{ -- {
'<leader>oe', -- '<leader>oy',
function() -- function()
require('opencode').prompt 'Explain @cursor and its context' -- require('opencode').command 'messages_copy'
end, -- end,
desc = 'Explain code near cursor', -- desc = 'Copy last message',
}, -- },
}, -- {
-- '<S-C-u>',
-- function()
-- require('opencode').command 'messages_half_page_up'
-- end,
-- desc = 'Scroll messages up',
-- },
-- {
-- '<S-C-d>',
-- function()
-- require('opencode').command 'messages_half_page_down'
-- end,
-- desc = 'Scroll messages down',
-- },
-- {
-- '<leader>op',
-- function()
-- require('opencode').select_prompt()
-- end,
-- desc = 'Select prompt',
-- mode = { 'n', 'v' },
-- },
-- -- Example: keymap for custom prompt
-- {
-- '<leader>oe',
-- function()
-- require('opencode').prompt 'Explain @cursor and its context'
-- end,
-- desc = 'Explain code near cursor',
-- },
-- },
-- { -- {
-- 'dmtrKovalenko/fff.nvim', -- 'dmtrKovalenko/fff.nvim',
-- build = 'cargo build --release', -- build = 'cargo build --release',

View File

@ -23,64 +23,106 @@ return {
-- Add your own debuggers here -- Add your own debuggers here
'leoluz/nvim-dap-go', 'leoluz/nvim-dap-go',
'wojciech-kulik/xcodebuild.nvim',
}, },
keys = { keys = {
-- Basic debugging keymaps, feel free to change to your liking! -- Basic debugging keymaps, feel free to change to your liking!
{ {
'<F5>', '<leader>ee',
function() function()
require('dap').continue() require('xcodebuild.integrations.dap').build_and_debug()
end, end,
desc = 'Debug: Start/Continue', desc = 'Build & Debug',
}, },
{ {
'<F1>', '<leader>dr',
function() function()
require('dap').step_into() require('xcodebuild.integrations.dap').debug_without_build()
end, end,
desc = 'Debug: Step Into', desc = 'Debug Without Building',
}, },
{ {
'<F2>', '<leader>dt',
function() function()
require('dap').step_over() require('xcodebuild.integrations.dap').debug_tests()
end, end,
desc = 'Debug: Step Over', desc = 'Debug Tests',
}, },
{ {
'<F3>', '<leader>dT',
function() function()
require('dap').step_out() require('xcodebuild.integrations.dap').debug_class_tests()
end, end,
desc = 'Debug: Step Out', desc = 'Debug Class Tests',
}, },
{ {
'<leader>b', '<leader>b',
function() function()
require('dap').toggle_breakpoint() require('xcodebuild.integrations.dap').toggle_breakpoint()
end, end,
desc = 'Debug: Toggle Breakpoint', desc = 'Toggle Breakpoint',
}, },
{ {
'<leader>B', '<leader>B',
function() function()
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') require('xcodebuild.integrations.dap').toggle_message_breakpoint()
end, end,
desc = 'Debug: Set Breakpoint', desc = 'Toggle Message Breakpoint',
}, },
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ {
'<F7>', '<leader>dx',
function() function()
require('dapui').toggle() require('xcodebuild.integrations.dap').terminate_session()
end, end,
desc = 'Debug: See last session result.', desc = 'Terminate Debugger',
}, },
}, },
config = function() config = function()
local dap = require 'dap' local dap = require 'dap'
local dapui = require 'dapui' local dapui = require 'dapui'
local xcodebuild = require 'xcodebuild.integrations.dap'
xcodebuild.setup()
local function setupListeners()
local dap = require 'dap'
local areSet = false
dap.listeners.after['event_initialized']['me'] = function()
if not areSet then
areSet = true
vim.keymap.set('n', '<leader>dc', dap.continue, { desc = 'Continue', noremap = true })
vim.keymap.set('n', '<leader>dC', dap.run_to_cursor, { desc = 'Run To Cursor' })
vim.keymap.set('n', '<leader>ds', dap.step_over, { desc = 'Step Over' })
vim.keymap.set('n', '<leader>di', dap.step_into, { desc = 'Step Into' })
vim.keymap.set('n', '<leader>do', dap.step_out, { desc = 'Step Out' })
vim.keymap.set({ 'n', 'v' }, '<Leader>dh', require('dap.ui.widgets').hover, { desc = 'Hover' })
vim.keymap.set({ 'n', 'v' }, '<Leader>de', require('dapui').eval, { desc = 'Eval' })
end
end
dap.listeners.after['event_terminated']['me'] = function()
if areSet then
areSet = false
vim.keymap.del('n', '<leader>dc')
vim.keymap.del('n', '<leader>dC')
vim.keymap.del('n', '<leader>ds')
vim.keymap.del('n', '<leader>di')
vim.keymap.del('n', '<leader>do')
vim.keymap.del({ 'n', 'v' }, '<Leader>dh')
vim.keymap.del({ 'n', 'v' }, '<Leader>de')
end
end
end
setupListeners()
require('dap').defaults.fallback.switchbuf = 'usetab,uselast'
vim.keymap.set('n', '<leader>dx', function()
xcodebuild.terminate_session()
require('dap').listeners.after['event_terminated']['me']()
end, { desc = 'Terminate debugger' })
require('mason-nvim-dap').setup { require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with -- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations -- reasonable debug configurations