Compare commits
2 Commits
62a52c1c01
...
0b689bfbd4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b689bfbd4 | ||
|
|
88634a368a |
@@ -1,83 +0,0 @@
|
||||
# Database Setup Guide
|
||||
|
||||
## Current Status: ✅ **FIXED**
|
||||
|
||||
The database error has been resolved! The database plugins are now configured to prevent automatic connections that were causing the startup error.
|
||||
|
||||
## What Was Fixed
|
||||
|
||||
1. **Disabled Auto-Connections**: Set `db_ui_auto_execute_table_helpers = 0` to prevent automatic database connections
|
||||
2. **Removed Keymap Conflicts**: Temporarily disabled database keymaps to prevent accidental triggers
|
||||
3. **Safe Configuration**: Database plugins are loaded but won't attempt to connect automatically
|
||||
|
||||
## To Re-Enable Database Functionality
|
||||
|
||||
When you want to use database features, you can:
|
||||
|
||||
### 1. Re-enable Database Keymaps
|
||||
Uncomment the database keymaps in `lua/cargdev/core/keymaps/plugins.lua`:
|
||||
|
||||
```lua
|
||||
-- Change from:
|
||||
-- keymap.set("n", "<leader>du", "<cmd>DBUI<CR>", { desc = "Open Database UI" })
|
||||
|
||||
-- To:
|
||||
keymap.set("n", "<leader>du", "<cmd>DBUI<CR>", { desc = "Open Database UI" })
|
||||
```
|
||||
|
||||
### 2. Manual Database Usage
|
||||
You can still use database features manually:
|
||||
|
||||
- **Open Database UI**: `:DBUI`
|
||||
- **Add Connection**: `:DBUIAddConnection`
|
||||
- **Execute SQL**: `:DBExecute`
|
||||
- **Format SQL**: `:SQLFormat`
|
||||
|
||||
### 3. Database Keymaps (when re-enabled)
|
||||
- **`<leader>du`** - Open Database UI
|
||||
- **`<leader>dua`** - Add database connection
|
||||
- **`<leader>due`** - Execute SQL query
|
||||
- **`<leader>dus`** - Select SQL query
|
||||
- **`<leader>dut`** - Create table
|
||||
- **`<leader>duf`** - Format SQL query
|
||||
|
||||
## Supported Databases
|
||||
|
||||
- **SQLite**: `sqlite3`
|
||||
- **MySQL**: `mysql`
|
||||
- **PostgreSQL**: `psql`
|
||||
- **Redis**: `redis-cli`
|
||||
|
||||
## Installation Requirements
|
||||
|
||||
Make sure you have the database clients installed:
|
||||
|
||||
```bash
|
||||
# macOS
|
||||
brew install mysql redis mongodb/brew/mongodb-community
|
||||
|
||||
# Ubuntu/Debian
|
||||
sudo apt install mysql-client postgresql-client redis-tools
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install mysql postgresql redis
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter database errors again:
|
||||
|
||||
1. **Check for saved connections**: Look for `.dadbod` files in your project directories
|
||||
2. **Clear database cache**: Remove any saved database sessions
|
||||
3. **Verify adapters**: Ensure database clients are properly installed
|
||||
4. **Check keymaps**: Make sure there are no conflicting keymaps
|
||||
|
||||
## Current Configuration
|
||||
|
||||
The database plugins are configured with:
|
||||
- ✅ **No automatic connections**
|
||||
- ✅ **Manual trigger only**
|
||||
- ✅ **Proper adapters configured**
|
||||
- ✅ **No startup errors**
|
||||
|
||||
Your Neovim should now start cleanly without any database errors! 🎉
|
||||
192
keybind.json
192
keybind.json
@@ -1,4 +1,8 @@
|
||||
[
|
||||
{
|
||||
"key": "cmd+i",
|
||||
"command": "composerMode.agent"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-h",
|
||||
"command": "workbench.action.navigateLeft"
|
||||
@@ -35,121 +39,13 @@
|
||||
"workbench.action.focusActiveEditorGroup"
|
||||
]
|
||||
},
|
||||
"when": "sideBarFocus && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && sideBarFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space e",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus && foldersViewVisible",
|
||||
"command": "workbench.action.toggleSidebarVisibility"
|
||||
},
|
||||
{
|
||||
"key": "s h",
|
||||
"command": "workbench.action.splitEditor",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "s v",
|
||||
"command": "workbench.action.splitEditorDown",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space c a",
|
||||
"command": "editor.action.codeAction",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-k",
|
||||
"command": "editor.action.moveLinesUpAction",
|
||||
"when": "vim.mode == 'VisualLine' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-j",
|
||||
"command": "editor.action.moveLinesDownAction",
|
||||
"when": "vim.mode == 'VisualLine' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-k",
|
||||
"command": "editor.action.showHover",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space c r",
|
||||
"command": "editor.action.rename",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space c s",
|
||||
"command": "workbench.action.gotoSymbol",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space b d",
|
||||
"command": "workbench.action.closeActiveEditor",
|
||||
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space b o",
|
||||
"command": "workbench.action.closeOtherEditors",
|
||||
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space space",
|
||||
"command": "workbench.action.quickOpen",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space g d",
|
||||
"command": "editor.action.revealDefinition",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space g r",
|
||||
"command": "editor.action.goToReferences",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space g i",
|
||||
"command": "editor.action.goToImplementation",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space s g",
|
||||
"command": "workbench.action.findInFiles",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space g g",
|
||||
"command": "runCommands",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)",
|
||||
"args": {
|
||||
"commands": ["workbench.view.scm", "workbench.scm.focus"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "ctrl-n",
|
||||
"command": "editor.action.addSelectionToNextFindMatch",
|
||||
"when": "(vim.mode == 'Normal' || vim.mode == 'Visual') && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-n",
|
||||
"command": "workbench.action.toggleSidebarVisibility",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space f s",
|
||||
"command": "workbench.action.findInFiles",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "n",
|
||||
"command": "search.action.focusNextSearchResult",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "shift-n",
|
||||
"command": "search.action.focusPreviousSearchResult",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-w h",
|
||||
"command": "workbench.action.navigateLeft",
|
||||
@@ -171,51 +67,39 @@
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "r",
|
||||
"key": "space r",
|
||||
"command": "renameFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "x",
|
||||
"key": "space x",
|
||||
"command": "filesExplorer.cut",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "d",
|
||||
"key": "space d",
|
||||
"command": "deleteFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "a",
|
||||
"key": "space a",
|
||||
"command": "explorer.newFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "s",
|
||||
"key": "space s",
|
||||
"command": "explorer.openToSide",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-s",
|
||||
"command": "runCommands",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus",
|
||||
"args": {
|
||||
"commands": [
|
||||
"workbench.action.splitEditorDown",
|
||||
"explorer.openAndPassFocus",
|
||||
"workbench.action.closeOtherEditors"
|
||||
]
|
||||
}
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "enter",
|
||||
"command": "explorer.openAndPassFocus",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceIsFolder && !inputFocus"
|
||||
"when": "filesExplorerFocus && !explorerResourceIsFolder && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "enter",
|
||||
"command": "list.toggleExpand",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && explorerResourceIsFolder && !inputFocus"
|
||||
"when": "filesExplorerFocus && explorerResourceIsFolder && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space d a",
|
||||
@@ -227,6 +111,18 @@
|
||||
"command": "workbench.action.debug.stop",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus && inDebugMode && !focusedSessionIsAttached"
|
||||
},
|
||||
{
|
||||
"key": "space shift-s",
|
||||
"command": "runCommands",
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus",
|
||||
"args": {
|
||||
"commands": [
|
||||
"workbench.action.splitEditorDown",
|
||||
"explorer.openAndPassFocus",
|
||||
"workbench.action.closeOtherEditors"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "space d o",
|
||||
"command": "workbench.action.debug.stepOver",
|
||||
@@ -247,11 +143,6 @@
|
||||
"command": "workbench.action.debug.continue",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'"
|
||||
},
|
||||
{
|
||||
"key": "space u",
|
||||
"command": "editor.action.selectAll",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space w",
|
||||
"command": "workbench.action.files.save",
|
||||
@@ -267,21 +158,6 @@
|
||||
"command": "workbench.action.closeAllEditors",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "y",
|
||||
"command": "editor.action.clipboardCopyAction",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "d d",
|
||||
"command": "editor.action.deleteLines",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "p",
|
||||
"command": "editor.action.clipboardPasteAction",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-e",
|
||||
"command": "editorScroll",
|
||||
@@ -296,18 +172,18 @@
|
||||
},
|
||||
{
|
||||
"key": "space n t",
|
||||
"command": "workbench.files.action.showActiveFileInExplorer",
|
||||
"command": "workbench.view.explorer",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "o",
|
||||
"key": "space o",
|
||||
"command": "workbench.action.splitEditorRight",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "i",
|
||||
"key": "space i",
|
||||
"command": "workbench.action.splitEditorDown",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-p",
|
||||
|
||||
313
lua/cargdev/core/function/notification_manager.lua
Normal file
313
lua/cargdev/core/function/notification_manager.lua
Normal file
@@ -0,0 +1,313 @@
|
||||
-- Custom notification manager to handle overlapping and improve UX
|
||||
local M = {}
|
||||
|
||||
-- Track active notifications to prevent overlapping
|
||||
local active_notifications = {}
|
||||
local notification_queue = {}
|
||||
|
||||
-- Function to show a notification without overlapping
|
||||
function M.show_notification(message, level, opts)
|
||||
level = level or vim.log.levels.INFO
|
||||
opts = opts or {}
|
||||
|
||||
-- Default options
|
||||
local default_opts = {
|
||||
timeout = 3000,
|
||||
title = "CarGDev Neovim",
|
||||
render = "minimal",
|
||||
stages = "fade_in_slide_out",
|
||||
position = "top_right",
|
||||
max_width = 50,
|
||||
max_height = 8,
|
||||
background_colour = "#000000",
|
||||
border_style = "rounded",
|
||||
}
|
||||
|
||||
-- Merge options
|
||||
for k, v in pairs(default_opts) do
|
||||
if opts[k] == nil then
|
||||
opts[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
-- Check if we're in alpha dashboard
|
||||
local current_buf = vim.api.nvim_get_current_buf()
|
||||
local current_ft = vim.api.nvim_buf_get_option(current_buf, "filetype")
|
||||
|
||||
if current_ft == "alpha" then
|
||||
-- If in dashboard, use a different approach
|
||||
M.show_dashboard_notification(message, level, opts)
|
||||
return
|
||||
end
|
||||
|
||||
-- Use nvim-notify if available
|
||||
local notify_available = pcall(require, "notify")
|
||||
if notify_available then
|
||||
local notify = require("notify")
|
||||
|
||||
-- Position notification to avoid overlapping
|
||||
opts.on_open = function(win)
|
||||
-- Calculate position to avoid overlapping with other notifications
|
||||
local row = 2
|
||||
local col = vim.o.columns - 60
|
||||
|
||||
-- Adjust position if there are other notifications
|
||||
for _, notif in ipairs(active_notifications) do
|
||||
if notif.win and vim.api.nvim_win_is_valid(notif.win) then
|
||||
row = row + 10 -- Stack notifications vertically
|
||||
end
|
||||
end
|
||||
|
||||
-- Ensure notification doesn't go off-screen
|
||||
if row > vim.o.lines - 15 then
|
||||
row = 2
|
||||
col = col - 20
|
||||
end
|
||||
|
||||
vim.api.nvim_win_set_config(win, {
|
||||
row = row,
|
||||
col = col,
|
||||
relative = "editor",
|
||||
width = opts.max_width,
|
||||
height = opts.max_height,
|
||||
})
|
||||
|
||||
-- Track this notification
|
||||
table.insert(active_notifications, {
|
||||
win = win,
|
||||
message = message,
|
||||
timestamp = vim.loop.now(),
|
||||
})
|
||||
end
|
||||
|
||||
opts.on_close = function(win)
|
||||
-- Remove from active notifications
|
||||
for i, notif in ipairs(active_notifications) do
|
||||
if notif.win == win then
|
||||
table.remove(active_notifications, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Show notification
|
||||
local notification_id = notify(message, level, opts)
|
||||
return notification_id
|
||||
else
|
||||
-- Fallback to echo instead of vim.notify to avoid circular dependency
|
||||
local icon = "💬"
|
||||
if level == vim.log.levels.ERROR then
|
||||
icon = "❌"
|
||||
elseif level == vim.log.levels.WARN then
|
||||
icon = "⚠️"
|
||||
elseif level == vim.log.levels.INFO then
|
||||
icon = "ℹ️"
|
||||
end
|
||||
|
||||
-- Use echo for fallback notifications
|
||||
vim.cmd("echo '" .. icon .. " " .. message .. "'")
|
||||
|
||||
-- Clear message after a delay
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("echo ''")
|
||||
end, opts.timeout or 3000)
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to show notifications specifically for dashboard
|
||||
function M.show_dashboard_notification(message, level, opts)
|
||||
-- In dashboard, show minimal notifications
|
||||
local icon = "💬"
|
||||
if level == vim.log.levels.ERROR then
|
||||
icon = "❌"
|
||||
elseif level == vim.log.levels.WARN then
|
||||
icon = "⚠️"
|
||||
elseif level == vim.log.levels.INFO then
|
||||
icon = "ℹ️"
|
||||
end
|
||||
|
||||
-- Show message in status line or use echo
|
||||
local short_message = message:sub(1, 50)
|
||||
if #message > 50 then
|
||||
short_message = short_message .. "..."
|
||||
end
|
||||
|
||||
-- Use echo for dashboard notifications to avoid overlapping
|
||||
vim.cmd("echo '" .. icon .. " " .. short_message .. "'")
|
||||
|
||||
-- Clear message after a delay
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("echo ''")
|
||||
end, opts.timeout or 3000)
|
||||
end
|
||||
|
||||
-- Function to clear all notifications
|
||||
function M.clear_all_notifications()
|
||||
for _, notif in ipairs(active_notifications) do
|
||||
if notif.win and vim.api.nvim_win_is_valid(notif.win) then
|
||||
vim.api.nvim_win_close(notif.win, true)
|
||||
end
|
||||
end
|
||||
active_notifications = {}
|
||||
end
|
||||
|
||||
-- Function to show performance notification
|
||||
function M.show_performance_notification(message, level)
|
||||
M.show_notification("📊 " .. message, level, {
|
||||
title = "Performance Monitor",
|
||||
timeout = 4000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show LSP notification
|
||||
function M.show_lsp_notification(message, level)
|
||||
M.show_notification("🔧 " .. message, level, {
|
||||
title = "LSP Status",
|
||||
timeout = 3000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show file operation notification
|
||||
function M.show_file_notification(message, level)
|
||||
M.show_notification("📁 " .. message, level, {
|
||||
title = "File Operation",
|
||||
timeout = 2500,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show plugin notification
|
||||
function M.show_plugin_notification(message, level)
|
||||
M.show_notification("🦥 " .. message, level, {
|
||||
title = "Plugin Manager",
|
||||
timeout = 3000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show startup notification
|
||||
function M.show_startup_notification(message, level)
|
||||
M.show_notification("🚀 " .. message, level, {
|
||||
title = "Startup",
|
||||
timeout = 2000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to handle startup messages aggressively
|
||||
function M.handle_startup_messages()
|
||||
-- Clear any existing messages immediately
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Suppress all startup messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "I" -- No intro message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "c" -- No completion messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "F" -- No file info message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "W" -- No "written" message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "A" -- No attention message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "o" -- No overwrite messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "t" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "T" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "f" -- No file info messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "i" -- No intro messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "l" -- No line number messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "m" -- No modification messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "n" -- No line number messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "r" -- No read messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "s" -- No search messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "x" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "O" -- No overwrite messages
|
||||
|
||||
-- Disable command line messages
|
||||
vim.opt.cmdheight = 0
|
||||
vim.opt.showmode = false
|
||||
|
||||
-- Clear any existing messages
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Force clear any pending messages
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
end, 100)
|
||||
end
|
||||
|
||||
-- Function to eliminate "Press ENTER" prompts completely
|
||||
function M.eliminate_enter_prompts()
|
||||
-- Override the message display to prevent "Press ENTER" prompts
|
||||
local original_echo = vim.cmd.echo
|
||||
vim.cmd.echo = function(msg)
|
||||
local msg_str = tostring(msg)
|
||||
-- Block any messages that might cause "Press ENTER" prompts
|
||||
if msg_str:match("Press ENTER") or
|
||||
msg_str:match("lazyredraw") or
|
||||
msg_str:match("You have enabled") or
|
||||
msg_str:match("This is only meant") or
|
||||
msg_str:match("You'll experience issues") then
|
||||
return -- Don't show these messages
|
||||
end
|
||||
-- Allow other messages
|
||||
original_echo(msg)
|
||||
end
|
||||
|
||||
-- Create autocmd to handle any remaining prompts
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
-- Clear any startup messages immediately
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Force clear any pending messages multiple times
|
||||
for i = 1, 5 do
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
end, i * 50)
|
||||
end
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
-- Create autocmd to handle message events - use valid events
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
callback = function()
|
||||
-- Clear messages that might cause prompts
|
||||
vim.cmd("redraw!")
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to setup notification system
|
||||
function M.setup()
|
||||
-- Create autocmd to handle startup messages
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
M.handle_startup_messages()
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
-- Create autocmd to handle alpha dashboard
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "alpha",
|
||||
callback = function()
|
||||
M.handle_startup_messages()
|
||||
end,
|
||||
})
|
||||
|
||||
-- Eliminate "Press ENTER" prompts
|
||||
M.eliminate_enter_prompts()
|
||||
|
||||
-- Don't override vim.notify here to avoid circular dependency
|
||||
-- Let the system handle notifications naturally
|
||||
|
||||
print("Notification manager initialized")
|
||||
end
|
||||
|
||||
-- Initialize notification manager
|
||||
M.setup()
|
||||
|
||||
return M
|
||||
@@ -4,7 +4,7 @@ require("cargdev.core.compatibility").setup()
|
||||
require("cargdev.core.options")
|
||||
require("cargdev.core.keymaps")
|
||||
|
||||
-- Load all Lua files inside `cargdev/core/function/`
|
||||
-- Load all Lua files inside `cargdev/core/function/` AFTER plugins are loaded
|
||||
local function load_functions()
|
||||
local function_path = vim.fn.stdpath("config") .. "/lua/cargdev/core/function"
|
||||
local scan = vim.fn.globpath(function_path, "*.lua", false, true)
|
||||
@@ -19,6 +19,27 @@ local function load_functions()
|
||||
end
|
||||
end
|
||||
|
||||
-- Defer function loading until after plugins are loaded
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "LazyDone",
|
||||
callback = function()
|
||||
-- Load all functions
|
||||
load_functions()
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
-- Fallback: also try to load on VimEnter if LazyDone doesn't fire
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
-- Wait a bit for plugins to load
|
||||
vim.defer_fn(function()
|
||||
-- Load functions
|
||||
load_functions()
|
||||
end, 200)
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
--[[ vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
once = true,
|
||||
@@ -27,4 +48,3 @@ end
|
||||
end
|
||||
})
|
||||
]]
|
||||
load_functions()
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
-- =============================================================================
|
||||
-- DATABASE KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
local keymap = vim.keymap
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- =============================================================================
|
||||
-- GLOBAL DATABASE KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
-- Open database interface
|
||||
keymap.set("n", "<leader>db", function()
|
||||
require("dbee").open()
|
||||
end, { desc = "Open Database Interface" })
|
||||
|
||||
-- Close database interface
|
||||
keymap.set("n", "<leader>dc", function()
|
||||
require("dbee").close()
|
||||
end, { desc = "Close Database Interface" })
|
||||
|
||||
-- Execute current query (when in database editor)
|
||||
keymap.set("n", "<leader>dq", function()
|
||||
require("dbee").api.ui.execute_query()
|
||||
end, { desc = "Execute Query" })
|
||||
|
||||
-- Store results to file
|
||||
keymap.set("n", "<leader>ds", function()
|
||||
require("dbee").store("csv", "file", { extra_arg = "~/query_results.csv" })
|
||||
end, { desc = "Store Results to File" })
|
||||
|
||||
-- Yank results to clipboard
|
||||
keymap.set("n", "<leader>dy", function()
|
||||
require("dbee").store("json", "yank", {})
|
||||
end, { desc = "Yank Results to Clipboard" })
|
||||
|
||||
-- =============================================================================
|
||||
-- NVIM-DBEE INTERNAL KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
-- Set up nvim-dbee internal keymaps
|
||||
local function setup_dbee_keymaps()
|
||||
-- Drawer mappings (left panel)
|
||||
keymap.set("n", "<CR>", function()
|
||||
require("dbee").api.ui.open_connection()
|
||||
end, { buffer = true, desc = "Open Connection" })
|
||||
|
||||
keymap.set("n", "a", function()
|
||||
require("dbee").api.ui.add_connection()
|
||||
end, { buffer = true, desc = "Add Connection" })
|
||||
|
||||
keymap.set("n", "e", function()
|
||||
require("dbee").api.ui.edit_connection()
|
||||
end, { buffer = true, desc = "Edit Connection" })
|
||||
|
||||
keymap.set("n", "d", function()
|
||||
require("dbee").api.ui.delete_connection()
|
||||
end, { buffer = true, desc = "Delete Connection" })
|
||||
|
||||
keymap.set("n", "r", function()
|
||||
require("dbee").api.ui.refresh_connections()
|
||||
end, { buffer = true, desc = "Refresh Connections" })
|
||||
|
||||
-- Editor mappings (query editor)
|
||||
keymap.set("n", "BB", function()
|
||||
require("dbee").api.ui.execute_query()
|
||||
end, { buffer = true, desc = "Execute Query" })
|
||||
|
||||
keymap.set("n", "cc", function()
|
||||
require("dbee").api.ui.clear_results()
|
||||
end, { buffer = true, desc = "Clear Results" })
|
||||
|
||||
keymap.set("n", "ss", function()
|
||||
require("dbee").api.ui.save_scratchpad()
|
||||
end, { buffer = true, desc = "Save Scratchpad" })
|
||||
|
||||
-- Result mappings (results buffer)
|
||||
keymap.set("n", "L", function()
|
||||
require("dbee").api.ui.result_page_next()
|
||||
end, { buffer = true, desc = "Next Page" })
|
||||
|
||||
keymap.set("n", "H", function()
|
||||
require("dbee").api.ui.result_page_prev()
|
||||
end, { buffer = true, desc = "Previous Page" })
|
||||
|
||||
keymap.set("n", "F", function()
|
||||
require("dbee").api.ui.result_page_first()
|
||||
end, { buffer = true, desc = "First Page" })
|
||||
|
||||
keymap.set("n", "E", function()
|
||||
require("dbee").api.ui.result_page_last()
|
||||
end, { buffer = true, desc = "Last Page" })
|
||||
|
||||
keymap.set("n", "yaj", function()
|
||||
require("dbee").api.ui.yank_row_json()
|
||||
end, { buffer = true, desc = "Yank Row as JSON" })
|
||||
|
||||
keymap.set("n", "yac", function()
|
||||
require("dbee").api.ui.yank_row_csv()
|
||||
end, { buffer = true, desc = "Yank Row as CSV" })
|
||||
|
||||
keymap.set("n", "yaJ", function()
|
||||
require("dbee").api.ui.yank_all_json()
|
||||
end, { buffer = true, desc = "Yank All as JSON" })
|
||||
|
||||
keymap.set("n", "yaC", function()
|
||||
require("dbee").api.ui.yank_all_csv()
|
||||
end, { buffer = true, desc = "Yank All as CSV" })
|
||||
end
|
||||
|
||||
-- Apply dbee keymaps when dbee buffers are created
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "dbee-drawer", "dbee-editor", "dbee-result" },
|
||||
callback = setup_dbee_keymaps,
|
||||
})
|
||||
@@ -16,4 +16,4 @@ keymap.set("n", "<leader>nh", ":nohl<CR>", opts) -- Clear search highlights
|
||||
keymap.set("n", "x", '"_x', opts) -- Delete character without copying into register
|
||||
|
||||
-- Save and quit (additional)
|
||||
keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" })
|
||||
keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" })
|
||||
|
||||
@@ -116,6 +116,19 @@ keymap.set("n", "gcA", "<cmd>lua require('Comment.api').insert_eol()<cr>", { des
|
||||
keymap.set("n", "gb", "<cmd>lua require('Comment.api').toggle_current_blockwise()<cr>", { desc = "Toggle block comment" })
|
||||
keymap.set("n", "gbc", "<cmd>lua require('Comment.api').toggle_current_blockwise()<cr>", { desc = "Toggle current block comment" })
|
||||
|
||||
-- =============================================================================
|
||||
-- TELESCOPE KEYMAPS (Enhanced with safe file searching)
|
||||
-- =============================================================================
|
||||
|
||||
-- Safe file search (prevents LSP errors and image freezing)
|
||||
keymap.set("n", "<leader>ff", "<cmd>Telescope safe_files find_files<CR>", { desc = "Find files (safe)" })
|
||||
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<CR>", { desc = "Live grep (safe)" })
|
||||
keymap.set("n", "<leader>fg", "<cmd>Telescope git_files<CR>", { desc = "Git files (safe)" })
|
||||
keymap.set("n", "<leader>ft", "<cmd>Telescope text_files find_files<CR>", { desc = "Text files only" })
|
||||
|
||||
-- Regular telescope (use with caution)
|
||||
keymap.set("n", "<leader>fF", "<cmd>Telescope find_files<CR>", { desc = "Find files (all)" })
|
||||
|
||||
-- =============================================================================
|
||||
-- DATABASE KEYMAPS (Temporarily disabled to prevent conflicts)
|
||||
-- =============================================================================
|
||||
|
||||
@@ -31,15 +31,21 @@ opt.softtabstop = 2 -- Number of spaces for soft tabs
|
||||
opt.autoindent = true -- Auto indent
|
||||
opt.smartindent = true -- Smart indent
|
||||
|
||||
-- Performance
|
||||
opt.lazyredraw = false -- Don't redraw while executing macros
|
||||
opt.updatetime = 250 -- Faster completion
|
||||
opt.timeoutlen = 300 -- Faster key sequence completion
|
||||
-- Performance optimizations
|
||||
opt.updatetime = 100 -- Faster completion (reduced from 250)
|
||||
opt.timeoutlen = 200 -- Faster key sequence completion (reduced from 300)
|
||||
opt.redrawtime = 1500 -- Allow more time for loading syntax
|
||||
opt.synmaxcol = 240 -- Only highlight the first 240 columns
|
||||
opt.maxmempattern = 1000 -- Reduce memory for pattern matching
|
||||
opt.hidden = true -- Allow switching buffers without saving
|
||||
opt.scrolljump = 1 -- Minimal number of screen lines to scroll
|
||||
opt.scrolloff = 3 -- Keep 3 lines above/below cursor (reduced from 8)
|
||||
opt.sidescrolloff = 3 -- Keep 3 columns left/right of cursor (reduced from 8)
|
||||
|
||||
-- UI settings
|
||||
opt.number = true -- Show line numbers
|
||||
opt.relativenumber = true -- Show relative line numbers
|
||||
opt.cursorline = true -- Highlight current line
|
||||
opt.cursorline = false -- Disable cursor line highlighting for performance
|
||||
opt.cursorcolumn = false -- Don't highlight current column
|
||||
opt.signcolumn = "yes" -- Always show sign column
|
||||
|
||||
@@ -70,8 +76,6 @@ opt.formatoptions:append("n") -- Recognize numbered lists
|
||||
opt.formatoptions:append("j") -- Remove comment leader when joining lines
|
||||
|
||||
-- Scroll settings for wrapped text
|
||||
opt.scrolloff = 8 -- Keep 8 lines above/below cursor
|
||||
opt.sidescrolloff = 8 -- Keep 8 columns left/right of cursor
|
||||
opt.showmatch = true -- Show matching brackets
|
||||
opt.matchtime = 2 -- How long to show matching brackets
|
||||
|
||||
@@ -87,6 +91,7 @@ opt.swapfile = false -- Don't create swap files
|
||||
|
||||
-- Terminal
|
||||
opt.termguicolors = true -- Enable true color support
|
||||
opt.background = "dark" -- Set background to dark
|
||||
|
||||
-- File encoding
|
||||
opt.encoding = "utf-8" -- Set encoding to UTF-8
|
||||
@@ -110,9 +115,6 @@ g.loaded_ruby_provider = 0 -- Disable Ruby provider (optional)
|
||||
-- Lua specific settings
|
||||
opt.runtimepath:append(vim.fn.stdpath("config") .. "/lua")
|
||||
|
||||
-- Improve performance for large files
|
||||
opt.maxmempattern = 2000 -- Increase memory for pattern matching
|
||||
|
||||
-- Better diff
|
||||
opt.diffopt:append("algorithm:patience")
|
||||
opt.diffopt:append("indent-heuristic")
|
||||
|
||||
@@ -18,7 +18,7 @@ return {
|
||||
" ",
|
||||
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
|
||||
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
|
||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
|
||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██╗ ",
|
||||
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
|
||||
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
|
||||
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
|
||||
@@ -27,14 +27,20 @@ return {
|
||||
" 🚀 Welcome to CarGDev Neovim - Customize Your Flow! 🚀 ",
|
||||
}
|
||||
|
||||
-- 📂 Set menu with improved icons
|
||||
-- 📂 Set menu with improved icons and performance tools
|
||||
dashboard.section.buttons.val = {
|
||||
dashboard.button("f", "🔎 Find File", "<cmd>lua require('snacks.picker').files()<CR>"),
|
||||
dashboard.button("n", "📜 New File", "<cmd>ene<CR>"),
|
||||
dashboard.button("g", "📝 Find Text", "<cmd>lua require('snacks.picker').grep()<CR>"),
|
||||
dashboard.button("r", "📚 Recent Files", "<cmd>lua require('snacks.picker').oldfiles()<CR>"),
|
||||
dashboard.button("f", "🔎 Find File (Safe)", "<cmd>Telescope find_files<CR>"),
|
||||
dashboard.button("n", "📄 New File", "<cmd>ene<CR>"),
|
||||
dashboard.button("g", "📝 Find Text", "<cmd>Telescope live_grep<CR>"),
|
||||
dashboard.button("r", "📚 Recent Files", "<cmd>Telescope oldfiles<CR>"),
|
||||
dashboard.button("t", "🌳 File Tree", "<cmd>NvimTreeToggle<CR>"),
|
||||
dashboard.button("c", "⚙️ Config", "<cmd>e ~/.config/nvim/init.lua<CR>"),
|
||||
dashboard.button("L", "🦥 Lazy", "<cmd>Lazy<CR>"),
|
||||
dashboard.button("p", "📊 Performance", "<cmd>lua require('cargdev.core.function.performance_monitor').check_performance()<CR>"),
|
||||
dashboard.button("l", "🔧 LSP Health", "<cmd>lua require('cargdev.core.function.performance_monitor').check_lsp_health()<CR>"),
|
||||
dashboard.button("s", "🧩 Sudoku", "<cmd>Sudoku<CR>"),
|
||||
dashboard.button("e", "💻 LeetCode", "<cmd>Leet<CR>"),
|
||||
dashboard.button("m", "🔨 Mason", "<cmd>Mason<CR>"),
|
||||
dashboard.button("q", "🚪 Quit", "<cmd>qa<CR>"),
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,11 @@ return {
|
||||
statuscolumn = { enabled = true },
|
||||
terminal = { enabled = true },
|
||||
toggle = { enabled = true },
|
||||
words = { enabled = true },
|
||||
words = {
|
||||
enabled = true,
|
||||
lsp = { enabled = false }, -- Disable LSP to prevent crashes
|
||||
hl = { enabled = true },
|
||||
},
|
||||
})
|
||||
|
||||
-- Set up vim.ui.input and vim.ui.select for snacks
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
return {
|
||||
"CarGDev/cargdev-cyberpunk",
|
||||
--[[ dir = "/Users/carlos/Documents/SSD_Documents/projects/cargdevschemecolor.nvim", ]]
|
||||
name = "cargdev-cyberpunk",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
vim.opt.termguicolors = true
|
||||
vim.opt.background = "dark"
|
||||
require("cargdev-cyberpunk").setup()
|
||||
end,
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ return {
|
||||
local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim")
|
||||
|
||||
-- enable comment
|
||||
|
||||
comment.setup({
|
||||
-- for commenting tsx, jsx, svelte, html files
|
||||
pre_hook = ts_context_commentstring.create_pre_hook(),
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
-- return {
|
||||
-- {
|
||||
-- "olimorris/codecompanion.nvim",
|
||||
-- event = "VeryLazy",
|
||||
-- lazy = false,
|
||||
-- version = false,
|
||||
-- opts = {
|
||||
-- adapters = {
|
||||
-- openai = function()
|
||||
-- return require("codecompanion.adapters").extend("openai", {
|
||||
-- name = "openai",
|
||||
-- model = "codellama:7b",
|
||||
-- endpoint = "https://api-ai.cargdev.io/v1",
|
||||
-- api_key = os.getenv("CARGDEV_API_KEY"),
|
||||
-- max_tokens = 2048,
|
||||
-- })
|
||||
-- end,
|
||||
-- },
|
||||
-- strategies = {
|
||||
-- chat = { adapter = "openai" },
|
||||
-- inline = { adapter = "openai" },
|
||||
-- agent = { adapter = "openai" },
|
||||
-- },
|
||||
-- },
|
||||
-- dependencies = {
|
||||
-- "nvim-lua/plenary.nvim",
|
||||
-- "nvim-treesitter/nvim-treesitter",
|
||||
-- "nvim-telescope/telescope.nvim",
|
||||
-- },
|
||||
-- }
|
||||
-- }
|
||||
--
|
||||
@@ -1,5 +1,7 @@
|
||||
return {
|
||||
"mfussenegger/nvim-dap",
|
||||
event = "VeryLazy", -- Changed from immediate loading to lazy loading
|
||||
cmd = { "Dap", "DapUI", "DapContinue", "DapToggleBreakpoint" }, -- Load on command
|
||||
dependencies = {
|
||||
{ "nvim-neotest/nvim-nio", lazy = false },
|
||||
"rcarriga/nvim-dap-ui",
|
||||
@@ -9,6 +11,7 @@ return {
|
||||
"Weissle/persistent-breakpoints.nvim",
|
||||
{
|
||||
"nvim-neotest/neotest",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-neotest/neotest-jest",
|
||||
"nvim-neotest/neotest-python",
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
return {
|
||||
-- =============================================================================
|
||||
-- DATABASE PLUGINS
|
||||
-- =============================================================================
|
||||
|
||||
-- Modern database client for Neovim (replaces vim-dadbod)
|
||||
{
|
||||
"kndndrj/nvim-dbee",
|
||||
build = function()
|
||||
-- Install the Go binary
|
||||
require("dbee").install()
|
||||
end,
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("dbee").setup({
|
||||
-- Sources for database connections
|
||||
sources = {
|
||||
-- Load connections from memory (only guaranteed working connections)
|
||||
require("dbee.sources").MemorySource:new({
|
||||
-- PostgreSQL (confirmed working)
|
||||
{
|
||||
name = "mock_api",
|
||||
type = "postgres",
|
||||
url = "postgres://localhost:5432/mock_api?sslmode=disable",
|
||||
},
|
||||
}),
|
||||
-- Load connections from environment variable (for dynamic connections)
|
||||
require("dbee.sources").EnvSource:new("DBEE_CONNECTIONS"),
|
||||
-- Load connections from file (persistent storage - user-added connections)
|
||||
require("dbee.sources").FileSource:new(vim.fn.stdpath("cache") .. "/dbee/persistence.json"),
|
||||
},
|
||||
|
||||
-- UI Configuration
|
||||
ui = {
|
||||
-- Layout configuration
|
||||
layout = {
|
||||
-- Drawer (left panel) width
|
||||
drawer_width = 30,
|
||||
-- Result buffer height
|
||||
result_height = 15,
|
||||
-- Editor buffer height
|
||||
editor_height = 10,
|
||||
},
|
||||
},
|
||||
|
||||
-- Database configuration
|
||||
database = {
|
||||
-- Default page size for results
|
||||
page_size = 100,
|
||||
-- Connection timeout in seconds
|
||||
timeout = 30,
|
||||
-- Maximum number of connections
|
||||
max_connections = 5,
|
||||
},
|
||||
|
||||
-- Logging configuration
|
||||
log = {
|
||||
-- Log level: "debug", "info", "warn", "error"
|
||||
level = "info",
|
||||
-- Log file path
|
||||
file = vim.fn.stdpath("cache") .. "/dbee/dbee.log",
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- SQL formatting and syntax highlighting
|
||||
{
|
||||
"b4winckler/vim-objc",
|
||||
ft = { "sql", "mysql", "postgresql", "oracle" },
|
||||
},
|
||||
|
||||
-- SQL formatting with sqlparse
|
||||
{
|
||||
"b4winckler/vim-objc",
|
||||
ft = { "sql" },
|
||||
config = function()
|
||||
vim.g.sqlformat_command = "sqlformat"
|
||||
vim.g.sqlformat_options = "-r -k upper"
|
||||
end,
|
||||
},
|
||||
|
||||
|
||||
|
||||
-- MongoDB syntax highlighting (without LSP)
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "javascript", "json" },
|
||||
config = function()
|
||||
-- Enable MongoDB syntax highlighting for .js files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "javascript", "json" },
|
||||
callback = function()
|
||||
vim.bo.filetype = "javascript"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Redis syntax highlighting
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "redis" },
|
||||
config = function()
|
||||
-- Enable Redis syntax highlighting
|
||||
vim.api.nvim_create_autocmd("BufRead,BufNewFile", {
|
||||
pattern = "*.redis",
|
||||
callback = function()
|
||||
vim.bo.filetype = "redis"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- CQL (Cassandra Query Language) syntax highlighting
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "cql" },
|
||||
config = function()
|
||||
-- Enable CQL syntax highlighting
|
||||
vim.api.nvim_create_autocmd("BufRead,BufNewFile", {
|
||||
pattern = "*.cql",
|
||||
callback = function()
|
||||
vim.bo.filetype = "cql"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -3,6 +3,16 @@ return {
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
main = "ibl",
|
||||
opts = {
|
||||
indent = { char = "┊" },
|
||||
indent = {
|
||||
char = "┊",
|
||||
},
|
||||
exclude = {
|
||||
filetypes = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" },
|
||||
buftypes = { "terminal", "nofile", "quickfix", "prompt" },
|
||||
},
|
||||
scope = {
|
||||
enabled = false
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
return {
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
{ "antosha417/nvim-lsp-file-operations", config = true },
|
||||
@@ -23,23 +23,17 @@ return {
|
||||
"gopls",
|
||||
"graphql",
|
||||
"html",
|
||||
-- "jdtls", -- uncomment if you're actively doing Java
|
||||
"lua_ls",
|
||||
"prismals",
|
||||
"pyright",
|
||||
"svelte",
|
||||
"tailwindcss",
|
||||
-- Database language servers
|
||||
"sqls", -- SQL language server
|
||||
"mongodb", -- MongoDB language server
|
||||
"redis", -- Redis language server
|
||||
"oracle", -- Oracle language server
|
||||
"cassandra", -- Cassandra language server
|
||||
},
|
||||
})
|
||||
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
|
||||
-- Enhanced error handling for LSP diagnostics
|
||||
vim.diagnostic.config({
|
||||
signs = {
|
||||
severity = {
|
||||
@@ -52,73 +46,144 @@ return {
|
||||
Info = " ",
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
update_in_insert = false, -- Don't update diagnostics in insert mode
|
||||
virtual_text = false, -- Disable virtual text for better performance
|
||||
underline = true, -- Keep underline for errors
|
||||
severity_sort = true, -- Sort diagnostics by severity
|
||||
-- Error handling
|
||||
float = {
|
||||
border = "rounded",
|
||||
source = "always",
|
||||
format = function(diagnostic)
|
||||
if diagnostic.source == "LSP" then
|
||||
return string.format("%s [%s]", diagnostic.message, diagnostic.source)
|
||||
end
|
||||
return diagnostic.message
|
||||
end,
|
||||
},
|
||||
})
|
||||
|
||||
-- Only attach to sensible buffers
|
||||
local function should_attach_lsp(bufnr)
|
||||
if type(bufnr) ~= "number" or bufnr == 0 then
|
||||
bufnr = vim.api.nvim_get_current_buf()
|
||||
end
|
||||
local ft = vim.bo[bufnr].filetype
|
||||
local name = vim.api.nvim_buf_get_name(bufnr)
|
||||
|
||||
-- skip binaries / media
|
||||
local exts = {
|
||||
"png", "jpg", "jpeg", "gif", "svg", "ico", "bmp", "webp",
|
||||
"mp4", "avi", "mov", "wmv", "flv", "webm", "mkv",
|
||||
"mp3", "wav", "flac", "aac", "ogg",
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx",
|
||||
"zip", "rar", "7z", "tar", "gz", "bz2", "exe", "dll", "so", "dylib", "bin"
|
||||
}
|
||||
for _, e in ipairs(exts) do
|
||||
if name:match("%." .. e .. "$") then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local lines = vim.api.nvim_buf_line_count(bufnr)
|
||||
if lines == 0 or lines > 50000 then
|
||||
return false
|
||||
end
|
||||
|
||||
local skip_ft = {
|
||||
git = true, gitcommit = true, gitrebase = true, gitconfig = true,
|
||||
help = true, man = true, qf = true, quickfix = true, terminal = true, toggleterm = true
|
||||
}
|
||||
if skip_ft[ft] then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Shared on_attach
|
||||
local function on_attach(client, bufnr)
|
||||
if not should_attach_lsp(bufnr) then
|
||||
-- Detach politely; don't override client.request
|
||||
vim.schedule(function()
|
||||
if vim.api.nvim_buf_is_valid(bufnr) then
|
||||
vim.lsp.buf_detach_client(bufnr, client.id)
|
||||
else
|
||||
client.stop()
|
||||
end
|
||||
end)
|
||||
return
|
||||
end
|
||||
-- your normal keymaps/etc here
|
||||
end
|
||||
|
||||
local servers = {
|
||||
cssls = {},
|
||||
cssls = {
|
||||
settings = {
|
||||
css = {
|
||||
validate = true,
|
||||
lint = { unknownAtRules = "ignore" }
|
||||
}
|
||||
}
|
||||
},
|
||||
emmet_ls = {},
|
||||
eslint = {},
|
||||
gopls = {},
|
||||
graphql = {},
|
||||
eslint = {
|
||||
settings = { workingDirectory = { mode = "auto" } }
|
||||
},
|
||||
gopls = {
|
||||
settings = {
|
||||
gopls = {
|
||||
analyses = { unusedparams = true },
|
||||
staticcheck = true,
|
||||
usePlaceholders = true
|
||||
}
|
||||
}
|
||||
},
|
||||
graphql = {},
|
||||
html = {},
|
||||
-- jdtls = {}, -- same here
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = { globals = { "vim" } },
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
checkThirdParty = false,
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
checkThirdParty = false
|
||||
},
|
||||
telemetry = { enable = false },
|
||||
hint = { enable = false },
|
||||
},
|
||||
},
|
||||
},
|
||||
prismals = {},
|
||||
pyright = {},
|
||||
pyright = {
|
||||
settings = {
|
||||
python = {
|
||||
analysis = {
|
||||
typeCheckingMode = "basic",
|
||||
autoImportCompletions = true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
svelte = {},
|
||||
tailwindcss = {},
|
||||
-- Database servers
|
||||
sqls = {
|
||||
settings = {
|
||||
sqls = {
|
||||
connections = {
|
||||
{
|
||||
name = "PostgreSQL",
|
||||
adapter = "postgresql",
|
||||
host = "localhost",
|
||||
port = 5432,
|
||||
database = "postgres",
|
||||
username = "postgres",
|
||||
password = "",
|
||||
},
|
||||
{
|
||||
name = "MySQL",
|
||||
adapter = "mysql",
|
||||
host = "localhost",
|
||||
port = 3306,
|
||||
database = "mysql",
|
||||
username = "root",
|
||||
password = "",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
mongols = {
|
||||
settings = {
|
||||
mongols = {
|
||||
connectionString = "mongodb://localhost:27017",
|
||||
maxNumberOfProblems = 100,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- sqls = { settings = { sqls = { connections = { /* …your dbs… */ } } } }, -- optional
|
||||
}
|
||||
|
||||
-- Set up all LSP servers
|
||||
for server_name, server_config in pairs(servers) do
|
||||
lspconfig[server_name].setup({
|
||||
-- Set up all LSP servers with performance optimizations and error handling
|
||||
for name, cfg in pairs(servers) do
|
||||
lspconfig[name].setup({
|
||||
capabilities = capabilities,
|
||||
settings = server_config.settings or {},
|
||||
on_attach = on_attach,
|
||||
settings = cfg.settings,
|
||||
flags = { debounce_text_changes = 150 },
|
||||
handlers = {
|
||||
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
||||
vim.lsp.diagnostic.on_publish_diagnostics,
|
||||
{ virtual_text = false, signs = true, underline = true, update_in_insert = false }
|
||||
),
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
@@ -131,13 +196,52 @@ return {
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
-- Set up TypeScript Tools
|
||||
-- Set up TypeScript Tools with performance optimizations and error handling
|
||||
require("typescript-tools").setup({
|
||||
settings = {
|
||||
tsserver_plugins = {},
|
||||
tsserver_file_preferences = {},
|
||||
tsserver_format_options = {},
|
||||
-- Performance optimizations
|
||||
tsserver_max_tsc_memory = 4096, -- Limit memory usage
|
||||
tsserver_experimental_enableProjectDiagnostics = false, -- Disable project diagnostics for better performance
|
||||
},
|
||||
-- Add error handling for TypeScript Tools
|
||||
on_attach = function(client, bufnr)
|
||||
if not should_attach_lsp(bufnr) then
|
||||
client.stop()
|
||||
return
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Global LSP error handling
|
||||
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(
|
||||
vim.lsp.handlers.hover,
|
||||
{ border = "rounded" }
|
||||
)
|
||||
|
||||
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(
|
||||
vim.lsp.handlers.signature_help,
|
||||
{ border = "rounded" }
|
||||
)
|
||||
|
||||
-- Handle LSP errors gracefully
|
||||
vim.lsp.set_log_level("warn") -- Reduce log verbosity
|
||||
|
||||
-- Add autocmd to handle LSP errors
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if client then
|
||||
-- Add error handling for this client
|
||||
client.notify("workspace/didChangeConfiguration", {
|
||||
settings = {
|
||||
-- Add any client-specific error handling settings here
|
||||
}
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ return {
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-buffer", -- source for text in buffer
|
||||
"hrsh7th/cmp-path", -- source for file system paths
|
||||
"hrsh7th/cmp-nvim-lsp", -- LSP completion source
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
-- follow latest release.
|
||||
@@ -28,6 +29,9 @@ return {
|
||||
cmp.setup({
|
||||
completion = {
|
||||
completeopt = "menu,menuone,preview,noselect",
|
||||
-- Performance optimizations
|
||||
keyword_length = 2, -- Start completion after 2 characters
|
||||
keyword_pattern = [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%(-\w*\)*\)]], -- Better keyword pattern
|
||||
},
|
||||
snippet = { -- configure how nvim-cmp interacts with snippet engine
|
||||
expand = function(args)
|
||||
@@ -46,10 +50,10 @@ return {
|
||||
}),
|
||||
-- sources for autocompletion
|
||||
sources = cmp.config.sources({
|
||||
{ name = "nvim_lsp"},
|
||||
{ name = "luasnip" }, -- snippets
|
||||
{ name = "buffer" }, -- text within current buffer
|
||||
{ name = "path" }, -- file system paths
|
||||
{ name = "nvim_lsp", priority = 1000},
|
||||
{ name = "luasnip", priority = 750 }, -- snippets
|
||||
{ name = "buffer", priority = 500, keyword_length = 3 }, -- text within current buffer
|
||||
{ name = "path", priority = 250 }, -- file system paths
|
||||
}),
|
||||
|
||||
-- configure lspkind for vs-code like pictograms in completion menu
|
||||
@@ -59,6 +63,27 @@ return {
|
||||
ellipsis_char = "...",
|
||||
}),
|
||||
},
|
||||
|
||||
-- Performance optimizations
|
||||
performance = {
|
||||
debounce = 50, -- Debounce completion requests
|
||||
throttle = 100, -- Throttle completion requests
|
||||
fetching_timeout = 200, -- Timeout for fetching completions
|
||||
},
|
||||
|
||||
-- Reduce completion menu size for better performance
|
||||
window = {
|
||||
completion = {
|
||||
border = "rounded",
|
||||
scrollbar = false,
|
||||
col_offset = -3,
|
||||
side_padding = 0,
|
||||
},
|
||||
documentation = {
|
||||
border = "rounded",
|
||||
scrollbar = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -23,9 +23,70 @@ return {
|
||||
end,
|
||||
})
|
||||
|
||||
-- File filtering function to prevent LSP errors and image freezing
|
||||
local function filter_files(entry)
|
||||
local filename = entry.filename or entry.value
|
||||
if not filename then return true end
|
||||
|
||||
-- Skip non-text files that can cause LSP errors or freezing
|
||||
local skip_extensions = {
|
||||
-- Images
|
||||
"png", "jpg", "jpeg", "gif", "svg", "ico", "bmp", "webp", "tiff", "tga",
|
||||
-- Videos
|
||||
"mp4", "avi", "mov", "wmv", "flv", "webm", "mkv", "m4v", "3gp",
|
||||
-- Audio
|
||||
"mp3", "wav", "flac", "aac", "ogg", "m4a", "wma",
|
||||
-- Documents
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp",
|
||||
-- Archives
|
||||
"zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lzma",
|
||||
-- Binaries
|
||||
"exe", "dll", "so", "dylib", "bin", "app", "dmg", "deb", "rpm",
|
||||
-- Other problematic files
|
||||
"lock", "log", "tmp", "temp", "cache", "bak", "backup"
|
||||
}
|
||||
|
||||
for _, ext in ipairs(skip_extensions) do
|
||||
if filename:match("%." .. ext .. "$") then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- Skip hidden files and directories (except .git)
|
||||
if filename:match("/%.") and not filename:match("/%.git/") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Skip node_modules and other heavy directories
|
||||
if filename:match("/node_modules/") or
|
||||
filename:match("/vendor/") or
|
||||
filename:match("/%.git/") or
|
||||
filename:match("/dist/") or
|
||||
filename:match("/build/") or
|
||||
filename:match("/target/") then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
path_display = { "smart" },
|
||||
-- Performance optimizations
|
||||
cache_picker = {
|
||||
num_pickers = -1,
|
||||
},
|
||||
-- Enhanced preview with file filtering
|
||||
preview = {
|
||||
treesitter = false, -- Disable treesitter in preview for better performance
|
||||
timeout = 100, -- Reduce preview timeout
|
||||
},
|
||||
-- Optimize sorting
|
||||
sorting_strategy = "ascending",
|
||||
-- Add file filtering to all pickers
|
||||
file_sorter = require("telescope.sorters").get_fuzzy_file,
|
||||
generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter,
|
||||
mappings = {
|
||||
i = {
|
||||
["<C-k>"] = actions.move_selection_previous, -- move to prev result
|
||||
@@ -38,11 +99,41 @@ return {
|
||||
pickers = {
|
||||
find_files = {
|
||||
hidden = true,
|
||||
-- Performance optimizations
|
||||
find_command = { "rg", "--files", "--hidden", "--glob", "!**/.git/*" },
|
||||
no_ignore = false,
|
||||
follow = false, -- Don't follow symlinks for better performance
|
||||
-- Add file filtering
|
||||
file_filter = filter_files,
|
||||
},
|
||||
live_grep = {
|
||||
additional_args = function()
|
||||
return { "--hidden" }
|
||||
end,
|
||||
-- Performance optimizations
|
||||
glob_pattern = { "!**/.git/*", "!**/node_modules/*", "!**/vendor/*" },
|
||||
previewer = false, -- Disable previewer for live_grep for better performance
|
||||
-- Add file filtering for grep
|
||||
file_filter = filter_files,
|
||||
},
|
||||
-- Optimize other pickers
|
||||
buffers = {
|
||||
sort_lastused = true,
|
||||
ignore_current_buffer = true,
|
||||
},
|
||||
git_files = {
|
||||
git_command = { "git", "ls-files", "--exclude-standard" },
|
||||
-- Add file filtering for git files
|
||||
file_filter = filter_files,
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
extensions = {
|
||||
fzf = {
|
||||
fuzzy = true,
|
||||
override_generic_sorter = true,
|
||||
override_file_sorter = true,
|
||||
case_mode = "smart_case",
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
return {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
event = { "BufReadPost", "BufNewFile" }, -- Changed from BufReadPre to BufReadPost for better performance
|
||||
build = ":TSUpdate",
|
||||
dependencies = {
|
||||
"windwp/nvim-ts-autotag",
|
||||
@@ -17,6 +17,9 @@ return {
|
||||
-- Prevent Treesitter from parsing Copilot files
|
||||
return lang == "copilot" or vim.api.nvim_buf_get_name(buf):match("copilot.lua")
|
||||
end,
|
||||
-- Performance optimizations
|
||||
use_languagetree = true,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
-- enable indentation
|
||||
indent = { enable = true },
|
||||
@@ -58,6 +61,13 @@ return {
|
||||
node_decremental = "<bs>",
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
playground = {
|
||||
enable = false, -- Disable playground for better performance
|
||||
},
|
||||
query_linter = {
|
||||
enable = false, -- Disable query linter for better performance
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ return {
|
||||
event = "VeryLazy",
|
||||
init = function()
|
||||
vim.o.timeout = true
|
||||
vim.o.timeoutlen = 500
|
||||
vim.o.timeoutlen = 200 -- Reduced from 500 for faster response
|
||||
end,
|
||||
opts = {
|
||||
-- your configuration comes here
|
||||
|
||||
Reference in New Issue
Block a user