Compare commits

23 Commits

Author SHA1 Message Date
Carlos Gutierrez
795bc802b3 Add C++ formatting support with clang-format 2025-12-06 19:39:53 -05:00
Carlos Gutierrez
fa6c35ff1e Clean up repository for public sharing
- Updated .gitignore to exclude log files, backup files, and temporary files
- Removed log files containing personal paths and system information
- Removed backup files with personal development paths
- Repository is now ready for public visibility
2025-10-22 22:12:49 -04:00
Carlos Gutierrez
1c3558380e updating packages 2025-10-22 21:59:07 -04:00
Carlos Gutierrez
bf573ef961 updating packages 2025-10-22 21:58:30 -04:00
Carlos Gutierrez
9638b5346d fixing issue on the database 2025-09-15 18:11:44 -04:00
cg8936
72d8698ecb fixing some issues 2025-08-12 08:51:16 -04:00
Carlos Gutierrez
b774da0743 adding mapping on md files 2025-08-12 06:48:18 -04:00
CarGDev
0b689bfbd4 Feature/upgrading (#2)
* feat: Major performance optimization and LSP stability improvements

- Add comprehensive file type filtering to prevent LSP errors on non-text files
- Fix image freezing issues during file searches in Telescope
- Optimize leader key response time (500ms → 200ms)
- Add performance monitoring tools and LSP health checks
- Implement safe file search commands to prevent crashes
- Add startup optimization and deferred heavy operations
- Enhance LSP error handling with timeouts and graceful fallbacks
- Optimize Treesitter, completion, and search performance
- Add comprehensive troubleshooting guide for LSP issues

Performance improvements:
- Faster scrolling and UI responsiveness
- Better memory management and startup times
- Reduced diagnostic updates and LSP overhead
- Automatic exclusion of problematic file types

New keymaps:
- <leader>pp - Performance monitoring
- <leader>pl - LSP health check
- <leader>pr - Restart LSP
- <leader>ff - Safe file search (prevents LSP errors)
- <leader>ft - Text files only search

* fix: Resolve startup errors and enhance user experience

- Fix telescope configuration error that was causing startup failures
- Fix performance monitor memory info issue for cross-platform compatibility
- Eliminate 'Press ENTER' prompts by optimizing startup messages
- Make colorscheme lazy loaded for faster startup
- Add performance monitoring buttons to alpha dashboard
- Create essential plugin enhancements for better UX
- Optimize DAP loading to improve startup performance
- Remove backup files and clean up plugin directory
- Add comprehensive performance monitoring and LSP health tools

New features:
- Performance dashboard integration
- Safe file search commands
- Enhanced session management
- Better project navigation
- Improved notifications and UI
- Enhanced terminal and buffer management

Performance improvements:
- 20-30% faster startup time
- Eliminated startup blocking prompts
- Lazy loading for heavy plugins
- Better memory management

* feat: Implement comprehensive notification system and fix overlapping issues

- Create custom notification manager to handle overlapping notifications
- Fix notification positioning to avoid dashboard overlap
- Improve alpha dashboard appearance and message suppression
- Add smart notification routing for different contexts
- Implement notification stacking and positioning logic
- Add notification management keymaps for better control
- Enhance startup message handling to prevent overlapping
- Improve UI layout and reduce visual clutter
- Add context-aware notifications (dashboard vs regular mode)
- Implement notification clearing and testing functionality

New features:
- <leader>nc - Clear all notifications
- <leader>nn - Test notification system
- Smart notification positioning
- Context-aware notification display
- Notification stacking and management

UI improvements:
- Better dashboard appearance
- Reduced overlapping elements
- Cleaner startup experience
- Improved notification aesthetics
- Better message routing

* fix: Completely eliminate 'Press ENTER' prompts and resolve lazyredraw conflicts

- Fix lazyredraw conflict with Noice plugin that was causing warnings
- Completely eliminate 'Press ENTER or type command to continue' prompts
- Implement aggressive startup message suppression
- Add comprehensive message filtering for all startup prompts
- Create multiple layers of prompt elimination (autocmds, overrides, deferred clearing)
- Add manual keymaps for clearing any remaining prompts
- Enhance notification manager with aggressive startup message handling
- Implement message blocking for problematic startup messages
- Add multiple redraw and echo clearing operations during startup
- Create comprehensive startup prompt elimination system

New keymaps:
- <leader>ns - Clear startup prompts manually
- <leader>nr - Redraw screen to clear any visual artifacts

Technical improvements:
- Disable lazyredraw to prevent Noice conflicts
- Override echo function to block problematic messages
- Multiple autocmd layers for prompt elimination
- Deferred message clearing for persistent prompts
- Comprehensive shortmess configuration
- Command line height optimization

Expected results:
- No more 'Press ENTER' prompts at startup
- No more lazyredraw warnings
- Clean, smooth startup experience
- Immediate access to dashboard without prompts
- Professional startup appearance

* adding new theme

* adding new theme

* adding new theme

* adding new theme
2025-08-12 04:12:12 -04:00
CarGDev
88634a368a Feature/upgrading (#1)
* feat: Major performance optimization and LSP stability improvements

- Add comprehensive file type filtering to prevent LSP errors on non-text files
- Fix image freezing issues during file searches in Telescope
- Optimize leader key response time (500ms → 200ms)
- Add performance monitoring tools and LSP health checks
- Implement safe file search commands to prevent crashes
- Add startup optimization and deferred heavy operations
- Enhance LSP error handling with timeouts and graceful fallbacks
- Optimize Treesitter, completion, and search performance
- Add comprehensive troubleshooting guide for LSP issues

Performance improvements:
- Faster scrolling and UI responsiveness
- Better memory management and startup times
- Reduced diagnostic updates and LSP overhead
- Automatic exclusion of problematic file types

New keymaps:
- <leader>pp - Performance monitoring
- <leader>pl - LSP health check
- <leader>pr - Restart LSP
- <leader>ff - Safe file search (prevents LSP errors)
- <leader>ft - Text files only search

* fix: Resolve startup errors and enhance user experience

- Fix telescope configuration error that was causing startup failures
- Fix performance monitor memory info issue for cross-platform compatibility
- Eliminate 'Press ENTER' prompts by optimizing startup messages
- Make colorscheme lazy loaded for faster startup
- Add performance monitoring buttons to alpha dashboard
- Create essential plugin enhancements for better UX
- Optimize DAP loading to improve startup performance
- Remove backup files and clean up plugin directory
- Add comprehensive performance monitoring and LSP health tools

New features:
- Performance dashboard integration
- Safe file search commands
- Enhanced session management
- Better project navigation
- Improved notifications and UI
- Enhanced terminal and buffer management

Performance improvements:
- 20-30% faster startup time
- Eliminated startup blocking prompts
- Lazy loading for heavy plugins
- Better memory management

* feat: Implement comprehensive notification system and fix overlapping issues

- Create custom notification manager to handle overlapping notifications
- Fix notification positioning to avoid dashboard overlap
- Improve alpha dashboard appearance and message suppression
- Add smart notification routing for different contexts
- Implement notification stacking and positioning logic
- Add notification management keymaps for better control
- Enhance startup message handling to prevent overlapping
- Improve UI layout and reduce visual clutter
- Add context-aware notifications (dashboard vs regular mode)
- Implement notification clearing and testing functionality

New features:
- <leader>nc - Clear all notifications
- <leader>nn - Test notification system
- Smart notification positioning
- Context-aware notification display
- Notification stacking and management

UI improvements:
- Better dashboard appearance
- Reduced overlapping elements
- Cleaner startup experience
- Improved notification aesthetics
- Better message routing

* fix: Completely eliminate 'Press ENTER' prompts and resolve lazyredraw conflicts

- Fix lazyredraw conflict with Noice plugin that was causing warnings
- Completely eliminate 'Press ENTER or type command to continue' prompts
- Implement aggressive startup message suppression
- Add comprehensive message filtering for all startup prompts
- Create multiple layers of prompt elimination (autocmds, overrides, deferred clearing)
- Add manual keymaps for clearing any remaining prompts
- Enhance notification manager with aggressive startup message handling
- Implement message blocking for problematic startup messages
- Add multiple redraw and echo clearing operations during startup
- Create comprehensive startup prompt elimination system

New keymaps:
- <leader>ns - Clear startup prompts manually
- <leader>nr - Redraw screen to clear any visual artifacts

Technical improvements:
- Disable lazyredraw to prevent Noice conflicts
- Override echo function to block problematic messages
- Multiple autocmd layers for prompt elimination
- Deferred message clearing for persistent prompts
- Comprehensive shortmess configuration
- Command line height optimization

Expected results:
- No more 'Press ENTER' prompts at startup
- No more lazyredraw warnings
- Clean, smooth startup experience
- Immediate access to dashboard without prompts
- Professional startup appearance

* adding new theme

* adding new theme

* adding new theme

* adding new theme
2025-08-12 04:09:13 -04:00
cg8936
62a52c1c01 adding other bind key 2025-08-07 18:23:12 -04:00
cg8936
3d8e976741 adding log hightliht 2025-08-05 09:31:23 -04:00
cg8936
3096929bd4 adding node 18 and updating the scripts 2025-08-05 09:14:34 -04:00
cg8936
cc56142c99 Merge branch 'master' of github.com:CarGDev/lua-nvim 2025-08-05 09:13:21 -04:00
cg8936
3cf01cefbd adding node 18 and updating the scripts 2025-08-05 09:12:58 -04:00
Carlos Gutierrez
d79ca0b927 Add missing problem 2116 to README table and fix row numbering 2025-08-05 08:20:34 -04:00
Carlos Gutierrez
9e529ef0bb feat: adding snacks over telescope 2025-08-03 21:09:30 -04:00
cg8936
6738adc58b feat adding all the files 2025-08-03 21:02:10 -04:00
Carlos Gutierrez
28410ecfab feat: adding new database 2025-08-03 20:27:24 -04:00
Carlos
6919892952 adding new theme 2025-08-03 11:03:18 -04:00
Carlos
cfe16ef1d0 adding new color scheme 2025-08-02 14:24:47 -04:00
Carlos
831b80c1ab fixing issues on nerd tree modifying the tree 2025-08-02 12:24:01 -04:00
Carlos
0c5942a85d fixing deprecated packages 2025-08-02 12:19:04 -04:00
Carlos
420b30df3d feat: refactoring 2025-08-02 11:31:50 -04:00
58 changed files with 1954 additions and 2767 deletions

25
.gitignore vendored
View File

@@ -1 +1,26 @@
lazy-lock.json lazy-lock.json
# Log files (contain personal paths and system info)
*.log
checkhealth*.log
nvim-profile.log
lazigitconfig.log
# Backup files with personal paths
*.bak
# Temporary files
*.tmp
*.temp
# Session files
Session.vim
session.vim
# Swap files
*.swp
*.swo
*~
# Local configuration overrides
local.lua

View File

@@ -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! 🎉

View File

@@ -0,0 +1,208 @@
# Neovim Performance Analysis & Optimization Results
## Overview
This document analyzes the performance profile from `nvim-profile.log` and shows the results of applied optimizations.
## 📊 Performance Comparison Results
### ✅ **Significant Improvements**
#### 1. Clipboard Provider Performance
- **Before**: 2.16s total time, 123 calls
- **After**: 0.54s total time, 78 calls
- **Improvement**: **75% reduction** in total time, **37% fewer** calls
- **Status**: ✅ **MAJOR SUCCESS**
#### 2. Syntax Loading Performance
- **Before**: 0.70s total time, 699 calls
- **After**: 0.47s total time, 189 calls
- **Improvement**: **33% reduction** in total time, **73% fewer** calls
- **Status**: ✅ **SUCCESS**
#### 3. Filetype Plugin Loading
- **Before**: 0.70s total time, 278 calls
- **After**: 0.62s total time, 175 calls
- **Improvement**: **11% reduction** in total time, **37% fewer** calls
- **Status**: ✅ **MODERATE SUCCESS**
### ⚠️ **Performance Regressions**
#### 4. WakaTime Plugin Performance
- **Before**: 0.48s total time, 686 calls
- **After**: 1.82s total time, 2,052 calls
- **Change**: **279% increase** in total time, **199% more** calls
- **Status**: ❌ **REGRESSION** - Need to investigate
#### 5. Matchparen Highlighting
- **Before**: 0.23s total time, 2,912 calls
- **After**: 0.78s total time, 6,055 calls
- **Change**: **239% increase** in total time, **108% more** calls
- **Status**: ❌ **REGRESSION** - Need to investigate
## 🔧 Applied Optimizations
### ✅ Successful Optimizations
#### 1. Keymap Conflict Resolution
- **Fixed**: Changed `<leader>s` to `<leader>sub` to avoid conflict with `<leader>fs`
- **File**: `lua/cargdev/core/keymaps/plugins.lua`
- **Impact**: `<leader>fs` now works correctly for file search
- **Status**: ✅ **CONFIRMED WORKING**
#### 2. Clipboard Provider Optimization
- **Fixed**: Added explicit macOS clipboard configuration
- **File**: `lua/cargdev/core/options.lua`
- **Changes**: Configured `pbcopy`/`pbpaste` with caching enabled
- **Result**: **75% performance improvement**
- **Status**: ✅ **MAJOR SUCCESS**
#### 3. Syntax Loading Optimization
- **Fixed**: Optimized syntax highlighting settings
- **File**: `lua/cargdev/core/options.lua`
- **Changes**: Reduced `synmaxcol` to 200, disabled modelines
- **Result**: **33% performance improvement**
- **Status**: ✅ **SUCCESS**
#### 4. Filetype Plugin Optimization
- **Fixed**: Optimized filetype plugin loading
- **File**: `lua/cargdev/core/options.lua`
- **Changes**: Disabled modelines for security and performance
- **Result**: **11% performance improvement**
- **Status**: ✅ **MODERATE SUCCESS**
### ❌ Failed Optimizations
#### 5. WakaTime Performance Optimization
- **Attempted**: Optimized heartbeat frequency and buffering
- **File**: `lua/cargdev/plugins/wakatime.lua`
- **Changes**: Increased heartbeat frequency to 2 minutes, enabled buffering
- **Result**: **279% performance regression**
- **Status**: ❌ **NEEDS REVERT**
#### 6. Matchparen Performance Optimization
- **Attempted**: Reduced timeout values for faster response
- **File**: `lua/cargdev/core/options.lua`
- **Changes**: Reduced `matchparen_timeout` to 100ms, `matchparen_insert_timeout` to 50ms
- **Result**: **239% performance regression**
- **Status**: ❌ **NEEDS REVERT**
## 🚨 Issues Requiring Immediate Attention
### 1. WakaTime Regression
**Problem**: WakaTime is now consuming significantly more resources
**Possible Causes**:
- Buffering enabled may be causing overhead
- Increased heartbeat frequency may be triggering more processing
- Debug mode changes may have unintended effects
**Recommended Actions**:
- Revert WakaTime configuration to original settings
- Consider disabling WakaTime temporarily to measure impact
- Investigate alternative WakaTime configurations
### 2. Matchparen Regression
**Problem**: Matchparen highlighting is now much slower
**Possible Causes**:
- Reduced timeout values may be causing more frequent recalculations
- Timeout settings may be conflicting with other optimizations
- The optimization may have triggered a different code path
**Recommended Actions**:
- Revert matchparen timeout settings to defaults
- Test with original settings to confirm improvement
- Consider alternative matchparen optimization strategies
## 📈 Overall Performance Impact
### Net Performance Change
- **Clipboard**: +1.62s improvement
- **Syntax**: +0.23s improvement
- **Filetype**: +0.08s improvement
- **WakaTime**: -1.34s regression
- **Matchparen**: -0.55s regression
**Net Result**: **+0.04s improvement** (essentially neutral)
### Recommendations
1. **Keep successful optimizations** (clipboard, syntax, filetype)
2. **Revert failed optimizations** (WakaTime, matchparen)
3. **Investigate alternative approaches** for WakaTime and matchparen
4. **Consider disabling WakaTime** if not actively used
## 🔍 **Additional Performance Issues Discovered**
### 6. CursorHold Events Performance
- **Total Time**: 0.92s (CursorHold_Cb) + 0.30s (CursorHoldI_Cb) = **1.22s total**
- **Calls**: 1,213 + 625 = **1,838 calls**
- **Issue**: FixCursorHold plugin is consuming significant resources
- **Status**: ⚠️ **NEW ISSUE** - Major performance bottleneck
### 7. Tmux Navigation Performance
- **Total Time**: 0.61s (TmuxAwareNavigate) + 0.56s (VimNavigate) = **1.17s total**
- **Calls**: 63 + 63 = **126 calls**
- **Issue**: Tmux-aware navigation is slow
- **Status**: ⚠️ **NEW ISSUE** - Significant overhead
### 8. Treesitter Indentation Performance
- **Total Time**: 0.08s
- **Calls**: 15 calls
- **Issue**: Treesitter indentation is being called frequently
- **Status**: ⚠️ **NEW ISSUE** - Moderate impact
### 9. WakaTime Heartbeat System
- **Total Time**: 0.98s (SetLastHeartbeat) + 0.11s (SendHeartbeats) = **1.09s total**
- **Calls**: 206 + 60 = **266 calls**
- **Issue**: Heartbeat system is very slow
- **Status**: ❌ **MAJOR ISSUE** - Part of WakaTime regression
## 📊 **Updated Performance Summary**
### Total Performance Impact (All Issues)
- **WakaTime System**: 2.91s total (HandleActivity + Heartbeats)
- **CursorHold Events**: 1.22s total
- **Tmux Navigation**: 1.17s total
- **Matchparen**: 0.78s total
- **Clipboard**: 0.54s total (improved from 2.16s)
- **Syntax Loading**: 0.47s total (improved from 0.70s)
- **Filetype Plugins**: 0.62s total (improved from 0.70s)
**Total Identified Issues**: **~7.7 seconds** of performance overhead
## 🚨 **Critical Issues Requiring Immediate Attention**
### 1. WakaTime Complete System Failure
- **Problem**: Entire WakaTime system is consuming 2.91s total
- **Components**: HandleActivity (1.82s) + Heartbeats (1.09s)
- **Impact**: Single biggest performance bottleneck
- **Action**: **DISABLE WAKATIME IMMEDIATELY**
### 2. CursorHold Events Overhead
- **Problem**: FixCursorHold plugin consuming 1.22s
- **Impact**: Major performance hit on cursor movement
- **Action**: **OPTIMIZE OR DISABLE FixCursorHold**
### 3. Tmux Navigation Overhead
- **Problem**: Tmux-aware navigation consuming 1.17s
- **Impact**: Significant overhead for navigation
- **Action**: **OPTIMIZE Tmux integration**
## 🎯 **Revised Priority Actions**
### Immediate (Critical)
1. **Disable WakaTime completely** - Save 2.91s
2. **Optimize FixCursorHold** - Save up to 1.22s
3. **Revert matchparen settings** - Save 0.55s
### High Priority
4. **Optimize Tmux navigation** - Save up to 1.17s
5. **Investigate Treesitter indentation** - Save up to 0.08s
### Medium Priority
6. **Keep successful optimizations** (clipboard, syntax, filetype)
**Potential Total Savings**: **~5.8 seconds** (75% improvement)
---
*Analysis based on comparison of original and optimized nvim-profile.log*
*Last updated: $(date)*
*Keymap conflict: ✅ Fixed | Clipboard: ✅ 75% improvement | Syntax: ✅ 33% improvement | Filetype: ✅ 11% improvement | WakaTime: ❌ 279% regression | Matchparen: ❌ 239% regression*

View File

@@ -0,0 +1,106 @@
# Telescope to Snacks Migration
## Overview
Successfully migrated from Telescope to Snacks throughout the project for a more modern, faster, and cleaner interface.
## Changes Made
### 1. **Alpha Menu** (`lua/cargdev/plugins/alpha.lua`)
-**Find File**: `Telescope find_files``Snacks.picker.files()`
-**Find Text**: `Telescope live_grep``Snacks.picker.grep()`
-**Recent Files**: `Telescope oldfiles``Snacks.picker.oldfiles()`
### 2. **Keymaps** (`lua/cargdev/core/keymaps/snacks.lua`)
-**File Navigation**: All file search keymaps updated to Snacks
-**Buffer Management**: Buffer search updated to Snacks
-**LSP Integration**: LSP pickers updated to Snacks
-**Symbol Search**: Document and workspace symbols updated to Snacks
### 3. **LSP Keymaps** (`lua/cargdev/core/keymaps/lsp.lua`)
-**Navigation**: `gd`, `gi`, `gr`, `gt` updated to Snacks
-**Symbols**: `<leader>ds`, `<leader>ws` updated to Snacks
-**Diagnostics**: `<leader>D` updated to Snacks
### 4. **DAP Keymaps** (`lua/cargdev/core/keymaps/dap.lua`)
-**DAP Integration**: All DAP pickers updated to Snacks
### 5. **File Structure**
-**Renamed**: `telescope.lua``snacks.lua`
-**Updated**: All documentation references
## Kept Telescope For
Some features were kept with Telescope as Snacks may not have equivalent functionality:
### **Git Features**
```lua
-- Git (using Telescope for git features as Snacks may not have all git pickers)
keymap.set("n", "<leader>fG", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
keymap.set("n", "<leader>fB", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
keymap.set("n", "<leader>fg", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
keymap.set("n", "<leader>gs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
```
### **Todos**
```lua
-- Todos (keep Telescope for todos as Snacks may not have this)
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })
```
## Benefits of Migration
### **Performance**
-**Faster**: Snacks is generally faster than Telescope
- 🚀 **Better UX**: Smoother animations and transitions
- 📱 **Modern**: Better touch/gesture support
### **Interface**
- 🎨 **Cleaner**: More modern, less overwhelming interface
- 🎯 **Focused**: Streamlined experience
- 🔧 **Integrated**: Better integration with other Snacks components
### **Consistency**
- 🎯 **Unified**: All pickers now use the same interface
- 🔄 **Cohesive**: Consistent experience across all features
- 📱 **Modern**: Contemporary design language
## Keymaps Summary
### **File Navigation**
- `<leader>ff` - Find files (Snacks)
- `<leader>fs` - Live grep (Snacks)
- `<leader>fc` - Grep string (Snacks)
- `<leader>fr` - Recent files (Snacks)
### **Buffer Management**
- `<leader>fb` - Find buffers (Snacks)
- `<leader>fh` - Help tags (Snacks)
- `<leader>fm` - Find marks (Snacks)
- `<leader>fk` - Find keymaps (Snacks)
- `<leader>fC` - Find commands (Snacks)
### **LSP Navigation**
- `gd` - Go to definition (Snacks)
- `gi` - Go to implementation (Snacks)
- `gr` - Show references (Snacks)
- `gt` - Go to type definition (Snacks)
- `<leader>ds` - Document symbols (Snacks)
- `<leader>ws` - Workspace symbols (Snacks)
- `<leader>D` - Show diagnostics (Snacks)
### **DAP Integration**
- `<leader>dcf` - DAP configurations (Snacks)
- `<leader>dcb` - List breakpoints (Snacks)
- `<leader>dco` - DAP commands (Snacks)
## Alpha Menu
The alpha menu now uses Snacks for all navigation:
- **`f`** - Find File (Snacks)
- **`g`** - Find Text (Snacks)
- **`r`** - Recent Files (Snacks)
## Migration Complete! 🎉
Your Neovim configuration now uses Snacks for all primary navigation and search functionality, providing a faster, more modern, and consistent experience throughout your editor.

View File

@@ -1,609 +0,0 @@
==============================================================================
CopilotChat: ✅
CopilotChat.nvim [core] ~
- ✅ OK nvim: NVIM v0.11.3
Build type: Release
LuaJIT 2.1.1753364724
Run "nvim -V1 -v" for more info
- ✅ OK setup: called
CopilotChat.nvim [commands] ~
- ✅ OK curl: curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0
Release-Date: 2024-03-27
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL threadsafe UnixSockets
- ✅ OK git: git version 2.50.1
- ✅ OK rg: ripgrep 14.1.1
features:+pcre2
simd(compile):+NEON
simd(runtime):+NEON
PCRE2 10.43 is available (JIT is available)
- ✅ OK lynx: Lynx Version 2.9.2 (31 May 2024)
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 3.5.1, ncurses 6.5.20240427
Built on darwin24.2.0 (May 31 2024 23:03:20).
Copyrights held by the Lynx Developers Group,
the University of Kansas, CERN, and other contributors.
Distributed under the GNU General Public License (Version 2).
See https://lynx.invisible-island.net/ and the online help for more information.
See http://www.openssl.org/ for information about OpenSSL.
CopilotChat.nvim [dependencies] ~
- ✅ OK plenary: installed
- ✅ OK copilot: copilot.lua
- ✅ OK vim.ui.select: overridden by `@/Users/carlos/.local/share/nvim/lazy/dressing.nvim/lua/dressing/patch.lua`
- ✅ OK tiktoken_core: installed
- ✅ OK treesitter[markdown]: installed
- ✅ OK treesitter[diff]: installed
==============================================================================
auto-session: 1 ⚠️
Setup ~
- ✅ OK setup() called
Lazy.nvim settings ~
- ✅ OK Lazy.nvim support is enabled
- ✅ OK auto-session is not lazy loaded
Config ~
- ⚠️ WARNING `vim.o.sessionoptions` should contain 'localoptions' to make sure
filetype and highlighting work correctly after a session is restored.
Recommended setting is:
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
Current Config ~
- {
auto_restore = false,
suppressed_dirs = { "~/", "~/Dev/", "~/Downloads", "~/Documents", "~/Desktop/" }
}
General Info ~
- Session directory: /Users/carlos/.local/share/nvim/sessions/
- Current session:
- Current session file:
==============================================================================
avante: ✅
avante.nvim ~
- ✅ OK Found required plugin: nvim-lua/plenary.nvim
- ✅ OK Found required plugin: MunifTanjim/nui.nvim
- ✅ OK Found icons plugin (nvim-web-devicons or mini.icons)
- ✅ OK Using native input provider (no additional dependencies required)
TreeSitter Dependencies ~
- ✅ OK All essential TreeSitter parsers are installed
- ✅ OK TreeSitter highlighter is available
==============================================================================
copilot: 1 ❌
{copilot.lua} ~
- {copilot.lua} GitHub Copilot plugin for Neovim
Copilot Dependencies ~
- ✅ OK `node` found: v22.11.0
Copilot Authentication ~
- No environment token set (`GITHUB_COPILOT_TOKEN` or `GH_COPILOT_TOKEN`)
- ✅ OK Local credentials file found
- Location: `/Users/carlos/.config/github-copilot/apps.json`
- ❌ ERROR Copilot LSP client not available
- Check that the plugin is properly loaded and configured
- Or restart Neovim if the plugin was just installed
==============================================================================
dap: ✅
dap: Adapters ~
dap.adapter: node2 ~
- ✅ OK is executable: node
dap.adapter: java ~
- Adapter is a function. Can't validate it
dap: Sessions ~
- ✅ OK No active sessions
==============================================================================
dressing: ✅
dressing.nvim ~
- ✅ OK vim.ui.input active
- ✅ OK vim.ui.select active: telescope
==============================================================================
fzf_lua: ✅
fzf-lua [required] ~
- ✅ OK 'fzf' `0.65.0 (brew)`
- ✅ OK 'git' `git version 2.50.1`
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK 'fd' `fd 10.2.0`
fzf-lua [optional] ~
- ✅ OK `nvim-web-devicons` found
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK 'fd' `fd 10.2.0`
- ✅ OK 'bat' `bat 0.25.0`
- ✅ OK 'delta' `delta 0.18.2`
fzf-lua [optional:media] ~
- ✅ OK 'viu' `viu 1.5.1`
- ✅ OK 'chafa' `Chafa version 1.16.2`
- ✅ OK 'ueberzugpp' `ueberzugpp 2.9.6`
fzf-lua [env] ~
- ✅ OK `$FZF_DEFAULT_OPTS` is set to:
--color=fg:#CBE0F0,bg:#011628,hl:#B388FF,fg+:#CBE0F0,bg+:#143652,hl+:#B388FF,info:#06BCE4,prompt:#2CF9ED,pointer:#2CF9ED,marker:#2CF9ED,spinner:#2CF9ED,header:#2CF9ED
- ✅ OK `FZF_DEFAULT_OPTS_FILE` is not set
==============================================================================
img-clip: ✅
img-clip.nvim ~
- ✅ OK `pngpaste` is installed
==============================================================================
lazy: 2 ⚠️
lazy.nvim ~
- {lazy.nvim} version `11.17.1`
- ✅ OK {git} `version 2.50.1`
- ✅ OK no existing packages found by other package managers
- ✅ OK packer_compiled.lua not found
luarocks ~
- checking `luarocks` installation
- ✅ OK no plugins require `luarocks`, so you can ignore any warnings below
- ✅ OK {luarocks} `/opt/homebrew/bin/luarocks 3.12.2`
- ⚠️ WARNING `lua` version `5.1` needed, but found `Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio`
- ⚠️ WARNING {lua5.1} or {lua} or {lua-5.1} version `5.1` not installed
==============================================================================
luasnip: ✅
luasnip ~
- ✅ OK jsregexp is installed
==============================================================================
mason: ✅
mason.nvim ~
- ✅ OK mason.nvim version v2.0.1
- ✅ OK PATH: prepend
- ✅ OK Providers:
mason.providers.registry-api
mason.providers.client
- ✅ OK neovim version >= 0.10.0
mason.nvim [Registries] ~
- ✅ OK Registry `github.com/mason-org/mason-registry version: 2025-07-28-rusty-action` is installed.
mason.nvim [Core utils] ~
- ✅ OK unzip: `UnZip 6.00 of 20 April 2009, by Info-ZIP, with modifications by Apple Inc.`
- ✅ OK wget: `GNU Wget 1.25.0, a non-interactive network retriever.`
- ✅ OK curl: `curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0`
- ✅ OK gzip: `Apple gzip 457.120.3`
- ✅ OK tar: `bsdtar 3.5.3 - libarchive 3.7.4 zlib/1.2.12 liblzma/5.4.3 bz2lib/1.0.8 `
- ✅ OK bash: `GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24)`
- ✅ OK sh: `Ok`
mason.nvim [Languages] ~
- ✅ OK Go: `go version go1.24.5 darwin/arm64`
- ✅ OK luarocks: `/opt/homebrew/bin/luarocks 3.12.2`
- ✅ OK cargo: `cargo 1.82.0 (8f40fc59f 2024-08-21)`
- ✅ OK Ruby: `ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin24]`
- ✅ OK node: `v22.11.0`
- ✅ OK RubyGem: `3.5.3`
- ✅ OK npm: `11.4.2`
- ✅ OK PHP: `PHP 8.4.10 (cli) (built: Jul 2 2025 02:22:42) (NTS)`
- ✅ OK python: `Python 3.13.5`
- ✅ OK java: `openjdk version "23.0.2" 2025-01-21`
- ✅ OK Composer: `Composer version 2.8.10 2025-07-10 19:08:33`
- ✅ OK javac: `javac 23.0.2`
- ✅ OK julia: `julia version 1.11.6`
- ✅ OK pip: `pip 25.1.1 from /opt/homebrew/lib/python3.13/site-packages/pip (python 3.13)`
- ✅ OK python venv: `Ok`
==============================================================================
mason-lspconfig: ✅
mason-lspconfig.nvim ~
- ✅ OK Neovim v0.11
- ✅ OK mason.nvim v2
==============================================================================
mcphub: 1 ⚠️
mcphub.nvim ~
- mcphub.nvim version: 6.1.0
- mcp-hub binary:
- mcp-hub required version: 4.2.0
- mcp-hub installed version: 4.2.0
- ✅ OK mcp-hub version 4.2.0 is compatible
Plugin Dependencies: ~
- ✅ OK plenary.nvim installed
Libraries: ~
- ✅ OK curl installed
- ✅ OK node installed
- ✅ OK uv installed
Chat plugins ~
- ⚠️ WARNING codecompanion.nvim not found
- ✅ OK avante.nvim installed
- ✅ OK CopilotChat.nvim installed
==============================================================================
nvim-treesitter: ✅
Installation ~
- ✅ OK `tree-sitter` found 0.25.8 (parser generator, only needed for :TSInstallFromGrammar)
- ✅ OK `node` found v22.11.0 (only needed for :TSInstallFromGrammar)
- ✅ OK `git` executable found.
- ✅ OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
Version: Apple clang version 17.0.0 (clang-1700.0.13.5)
- ✅ OK Neovim was compiled with tree-sitter runtime ABI version 15 (required >=13). Parsers must be compatible with runtime ABI.
OS Info:
{
machine = "arm64",
release = "24.5.0",
sysname = "Darwin",
version = "Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:33 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T8122"
} ~
Parser/Features H L F I J
- bash ✓ ✓ ✓ . ✓
- c ✓ ✓ ✓ ✓ ✓
- css ✓ . ✓ ✓ ✓
- diff ✓ . ✓ . ✓
- dockerfile ✓ . . . ✓
- gitignore ✓ . . . ✓
- graphql ✓ . . ✓ ✓
- html ✓ ✓ ✓ ✓ ✓
- java ✓ ✓ ✓ ✓ ✓
- javascript ✓ ✓ ✓ ✓ ✓
- json ✓ ✓ ✓ ✓ .
- latex ✓ . ✓ . ✓
- lua ✓ ✓ ✓ ✓ ✓
- markdown ✓ . ✓ ✓ ✓
- markdown_inline ✓ . . . ✓
- prisma ✓ . ✓ . ✓
- query ✓ ✓ ✓ ✓ ✓
- regex ✓ . . . .
- sql ✓ . ✓ ✓ ✓
- svelte ✓ ✓ ✓ ✓ ✓
- tsx ✓ ✓ ✓ ✓ ✓
- typescript ✓ ✓ ✓ ✓ ✓
- vim ✓ ✓ ✓ . ✓
- vimdoc ✓ . . . ✓
- yaml ✓ ✓ ✓ ✓ ✓
Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
+) multiple parsers found, only one will be used
x) errors found in the query, try to run :TSUpdate {lang} ~
==============================================================================
render-markdown: ✅
render-markdown.nvim [version] ~
- ✅ OK plugin 8.6.9
- ✅ OK neovim >= 0.11
render-markdown.nvim [configuration] ~
- ✅ OK valid
render-markdown.nvim [treesitter] ~
- ✅ OK markdown: parser installed
- ✅ OK markdown: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown/highlights.scm
- ✅ OK markdown: highlighter enabled
- ✅ OK markdown_inline: parser installed
- ✅ OK markdown_inline: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown_inline/highlights.scm
- ✅ OK html: parser installed
render-markdown.nvim [icons] ~
- ✅ OK using: nvim-web-devicons
render-markdown.nvim [executables] ~
render-markdown.nvim [conflicts] ~
- ✅ OK headlines: not installed
- ✅ OK markview: not installed
- ✅ OK obsidian: not installed
==============================================================================
snacks: 4 ⚠️ 3 ❌
Snacks ~
- ✅ OK setup called
Snacks.bigfile ~
- ✅ OK setup {enabled}
Snacks.dashboard ~
- ✅ OK setup {enabled}
- ❌ ERROR setup did not run
Snacks.explorer ~
- ✅ OK setup {enabled}
Snacks.image ~
- ✅ OK setup {enabled}
- ✅ OK 'kitty' `kitty 0.42.2 created by Kovid Goyal`
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-0 Q16-HDRI aarch64 23234 https://imagemagick.org`
- ✅ OK 'convert' `WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"`
- ✅ OK `wezterm` detected and supported
- ⚠️ WARNING `wezterm` does not support placeholders. Fallback rendering will be used
- ⚠️ WARNING Inline images are disabled
- ✅ OK `tmux` detected and supported
- ✅ OK Terminal Dimensions:
- {size}: `0` x `0` pixels
- {scale}: `1.00`
- {cell}: `0` x `0` pixels
- ✅ OK Available Treesitter languages:
`css`, `html`, `javascript`, `latex`, `markdown_inline`, `markdown`, `svelte`, `tsx`
- ⚠️ WARNING Missing Treesitter languages:
`norg`, `scss`, `typst`, `vue`
- ⚠️ WARNING Image rendering in docs with missing treesitter parsers won't work
- ✅ OK 'gs' `10.05.1`
- ✅ OK PDF files are supported
- ✅ OK 'tectonic' `tectonic 0.15.0Tectonic 0.15.0`
- ✅ OK LaTeX math equations are supported
- ✅ OK 'mmdc' `node:internal/modules/esm/resolve:838`
- ✅ OK Mermaid diagrams are supported
- ✅ OK your terminal supports the kitty graphics protocol
Snacks.input ~
- ✅ OK setup {enabled}
- ❌ ERROR `vim.ui.input` is not set to `Snacks.input`
Snacks.lazygit ~
- ✅ OK {lazygit} installed
Snacks.notifier ~
- ✅ OK setup {enabled}
- ✅ OK is ready
Snacks.picker ~
- ✅ OK setup {enabled}
- ❌ ERROR `vim.ui.select` is not set to `Snacks.picker.select`
- ✅ OK Available Treesitter languages:
`regex`
- ✅ OK 'git' `git version 2.50.1`
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK `Snacks.picker.grep()` is available
- ✅ OK 'fd' `fd 10.2.0`
- ✅ OK `Snacks.picker.files()` is available
- ✅ OK `Snacks.picker.explorer()` is available
- ✅ OK `SQLite3` is available
Snacks.quickfile ~
- ✅ OK setup {enabled}
Snacks.scope ~
- ✅ OK setup {enabled}
Snacks.scroll ~
- ✅ OK setup {enabled}
Snacks.statuscolumn ~
- ✅ OK setup {enabled}
Snacks.terminal ~
- ✅ OK shell configured
- `vim.o.shell`: /bin/zsh
- `parsed`: { "/bin/zsh" }
Snacks.toggle ~
- ✅ OK {which-key} is installed
Snacks.words ~
- ✅ OK setup {enabled}
==============================================================================
telescope: ✅
Checking for required plugins ~
- ✅ OK plenary installed.
- ✅ OK nvim-treesitter installed.
Checking external dependencies ~
- ✅ OK rg: found ripgrep 14.1.1
- ✅ OK fd: found fd 10.2.0
===== Installed extensions ===== ~
Telescope Extension: `dap` ~
- No healthcheck provided
Telescope Extension: `fzf` ~
- ✅ OK lib working as expected
- ✅ OK file_sorter correctly configured
- ✅ OK generic_sorter correctly configured
Telescope Extension: `session-lens` ~
- No healthcheck provided
==============================================================================
vim.deprecated: ✅
- ✅ OK No deprecated functions detected
==============================================================================
vim.health: 1 ❌
Configuration ~
- ✅ OK no issues found
Runtime ~
- ✅ OK $VIMRUNTIME: /opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime
Performance ~
- ✅ OK Build type: Release
Remote Plugins ~
- ✅ OK Up to date
terminal ~
- key_backspace (kbs) terminfo entry: `key_backspace=^H`
- key_dc (kdch1) terminfo entry: `key_dc=\E[3~`
- $TERM_PROGRAM="vscode"
- $COLORTERM="truecolor"
tmux ~
- ✅ OK escape-time: 10
- ✅ OK focus-events: on
- $TERM: xterm-256color
- default-terminal: tmux-256color
- ❌ ERROR $TERM differs from the tmux `default-terminal` setting. Colors might look wrong.
- ADVICE:
- $TERM may have been set by some rc (.bashrc, .zshrc, ...).
External Tools ~
- ✅ OK ripgrep 14.1.1 (/opt/homebrew/bin/rg)
==============================================================================
vim.lsp: 15 ⚠️
- LSP log level : WARN
- Log path: /Users/carlos/.local/state/nvim/lsp.log
- Log size: 9415 KB
vim.lsp: Active Clients ~
- No active clients
vim.lsp: Enabled Configurations ~
- ⚠️ WARNING 'css_variables' config not found. Ensure that vim.lsp.config('css_variables') was called.
- css_variables:
- ⚠️ WARNING 'cssls' config not found. Ensure that vim.lsp.config('cssls') was called.
- cssls:
- ⚠️ WARNING 'cssmodules_ls' config not found. Ensure that vim.lsp.config('cssmodules_ls') was called.
- cssmodules_ls:
- ⚠️ WARNING 'emmet_ls' config not found. Ensure that vim.lsp.config('emmet_ls') was called.
- emmet_ls:
- ⚠️ WARNING 'eslint' config not found. Ensure that vim.lsp.config('eslint') was called.
- eslint:
- ⚠️ WARNING 'gopls' config not found. Ensure that vim.lsp.config('gopls') was called.
- gopls:
- ⚠️ WARNING 'graphql' config not found. Ensure that vim.lsp.config('graphql') was called.
- graphql:
- ⚠️ WARNING 'html' config not found. Ensure that vim.lsp.config('html') was called.
- html:
- ⚠️ WARNING 'jdtls' config not found. Ensure that vim.lsp.config('jdtls') was called.
- jdtls:
- ⚠️ WARNING 'lua_ls' config not found. Ensure that vim.lsp.config('lua_ls') was called.
- lua_ls:
- ⚠️ WARNING 'prismals' config not found. Ensure that vim.lsp.config('prismals') was called.
- prismals:
- ⚠️ WARNING 'pyright' config not found. Ensure that vim.lsp.config('pyright') was called.
- pyright:
- ⚠️ WARNING 'svelte' config not found. Ensure that vim.lsp.config('svelte') was called.
- svelte:
- ⚠️ WARNING 'tailwindcss' config not found. Ensure that vim.lsp.config('tailwindcss') was called.
- tailwindcss:
- ⚠️ WARNING 'ts_ls' config not found. Ensure that vim.lsp.config('ts_ls') was called.
- ts_ls:
vim.lsp: File Watcher ~
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients
vim.lsp: Position Encodings ~
- No active clients
==============================================================================
vim.provider: ✅
Clipboard (optional) ~
- ✅ OK Clipboard tool found: pbcopy
Node.js provider (optional) ~
- Node.js: v22.11.0
- Nvim node.js host: /Users/carlos/.config/yarn/global//node_modules/neovim/bin/cli.js
Perl provider (optional) ~
- Disabled (loaded_perl_provider=0).
Python 3 provider (optional) ~
- pyenv: Path: /opt/homebrew/Cellar/pyenv/2.6.5/libexec/pyenv
- pyenv: Root: /Users/carlos/.pyenv
- `g:python3_host_prog` is not set. Searching for python3.12 in the environment.
- Executable: /opt/homebrew/bin/python3.12
- Python version: 3.12.11
- pynvim version: 0.5.2
- ✅ OK Latest pynvim is installed.
Python virtualenv ~
- ✅ OK no $VIRTUAL_ENV
Ruby provider (optional) ~
- Disabled (loaded_ruby_provider=0).
==============================================================================
vim.treesitter: ✅
Treesitter features ~
- Treesitter ABI support: min 13, max 15
- WASM parser support: false
Treesitter parsers ~
- ✅ OK Parser: bash ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/bash.so
- ✅ OK Parser: c ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/c.so
- ✅ OK Parser: c ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/c.so
- ✅ OK Parser: css ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/css.so
- ✅ OK Parser: diff ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/diff.so
- ✅ OK Parser: dockerfile ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/dockerfile.so
- ✅ OK Parser: gitignore ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/gitignore.so
- ✅ OK Parser: graphql ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/graphql.so
- ✅ OK Parser: html ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/html.so
- ✅ OK Parser: java ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/java.so
- ✅ OK Parser: javascript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/javascript.so
- ✅ OK Parser: json ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/json.so
- ✅ OK Parser: latex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/latex.so
- ✅ OK Parser: lua ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/lua.so
- ✅ OK Parser: lua ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/lua.so
- ✅ OK Parser: markdown ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown.so
- ✅ OK Parser: markdown ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown.so
- ✅ OK Parser: markdown_inline ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown_inline.so
- ✅ OK Parser: markdown_inline ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown_inline.so
- ✅ OK Parser: prisma ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/prisma.so
- ✅ OK Parser: query ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/query.so
- ✅ OK Parser: query ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/query.so
- ✅ OK Parser: regex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/regex.so
- ✅ OK Parser: sql ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/sql.so
- ✅ OK Parser: svelte ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/svelte.so
- ✅ OK Parser: tsx ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/tsx.so
- ✅ OK Parser: typescript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/typescript.so
- ✅ OK Parser: vim ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vim.so
- ✅ OK Parser: vim ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vim.so
- ✅ OK Parser: vimdoc ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vimdoc.so
- ✅ OK Parser: vimdoc ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vimdoc.so
- ✅ OK Parser: yaml ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/yaml.so

View File

@@ -1,577 +0,0 @@
==============================================================================
CopilotChat: ✅
CopilotChat.nvim [core] ~
- ✅ OK nvim: NVIM v0.11.3
Build type: Release
LuaJIT 2.1.1753364724
Run "nvim -V1 -v" for more info
- ✅ OK setup: called
CopilotChat.nvim [commands] ~
- ✅ OK curl: curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0
Release-Date: 2024-03-27
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL threadsafe UnixSockets
- ✅ OK git: git version 2.50.1
- ✅ OK rg: ripgrep 14.1.1
features:+pcre2
simd(compile):+NEON
simd(runtime):+NEON
PCRE2 10.43 is available (JIT is available)
- ✅ OK lynx: Lynx Version 2.9.2 (31 May 2024)
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 3.5.1, ncurses 6.5.20240427
Built on darwin24.2.0 (May 31 2024 23:03:20).
Copyrights held by the Lynx Developers Group,
the University of Kansas, CERN, and other contributors.
Distributed under the GNU General Public License (Version 2).
See https://lynx.invisible-island.net/ and the online help for more information.
See http://www.openssl.org/ for information about OpenSSL.
CopilotChat.nvim [dependencies] ~
- ✅ OK plenary: installed
- ✅ OK copilot: copilot.lua
- ✅ OK vim.ui.select: overridden by `@/Users/carlos/.local/share/nvim/lazy/dressing.nvim/lua/dressing/patch.lua`
- ✅ OK tiktoken_core: installed
- ✅ OK treesitter[markdown]: installed
- ✅ OK treesitter[diff]: installed
==============================================================================
avante: ✅
avante.nvim ~
- ✅ OK Found required plugin: nvim-lua/plenary.nvim
- ✅ OK Found required plugin: MunifTanjim/nui.nvim
- ✅ OK Found icons plugin (nvim-web-devicons or mini.icons)
- ✅ OK Using native input provider (no additional dependencies required)
TreeSitter Dependencies ~
- ✅ OK All essential TreeSitter parsers are installed
- ✅ OK TreeSitter highlighter is available
==============================================================================
copilot: 1 ❌
{copilot.lua} ~
- {copilot.lua} GitHub Copilot plugin for Neovim
Copilot Dependencies ~
- ✅ OK `node` found: v22.11.0
Copilot Authentication ~
- No environment token set (`GITHUB_COPILOT_TOKEN` or `GH_COPILOT_TOKEN`)
- ✅ OK Local credentials file found
- Location: `/Users/carlos/.config/github-copilot/apps.json`
- ❌ ERROR Copilot LSP client not available
- Check that the plugin is properly loaded and configured
- Or restart Neovim if the plugin was just installed
==============================================================================
dap: ✅
dap: Adapters ~
dap.adapter: node2 ~
- ✅ OK is executable: node
dap.adapter: java ~
- Adapter is a function. Can't validate it
dap: Sessions ~
- ✅ OK No active sessions
==============================================================================
dressing: ✅
dressing.nvim ~
- ✅ OK vim.ui.input active
- ✅ OK vim.ui.select active: telescope
==============================================================================
fzf_lua: ✅
fzf-lua [required] ~
- ✅ OK 'fzf' `0.65.0 (brew)`
- ✅ OK 'git' `git version 2.50.1`
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK 'fd' `fd 10.2.0`
fzf-lua [optional] ~
- ✅ OK `nvim-web-devicons` found
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK 'fd' `fd 10.2.0`
- ✅ OK 'bat' `bat 0.25.0`
- ✅ OK 'delta' `delta 0.18.2`
fzf-lua [optional:media] ~
- ✅ OK 'viu' `viu 1.5.1`
- ✅ OK 'chafa' `Chafa version 1.16.2`
- ✅ OK 'ueberzugpp' `ueberzugpp 2.9.6`
fzf-lua [env] ~
- ✅ OK `$FZF_DEFAULT_OPTS` is set to:
--color=fg:#CBE0F0,bg:#011628,hl:#B388FF,fg+:#CBE0F0,bg+:#143652,hl+:#B388FF,info:#06BCE4,prompt:#2CF9ED,pointer:#2CF9ED,marker:#2CF9ED,spinner:#2CF9ED,header:#2CF9ED
- ✅ OK `FZF_DEFAULT_OPTS_FILE` is not set
==============================================================================
img-clip: ✅
img-clip.nvim ~
- ✅ OK `pngpaste` is installed
==============================================================================
lazy: 2 ⚠️
lazy.nvim ~
- {lazy.nvim} version `11.17.1`
- ✅ OK {git} `version 2.50.1`
- ✅ OK no existing packages found by other package managers
- ✅ OK packer_compiled.lua not found
luarocks ~
- checking `luarocks` installation
- ✅ OK no plugins require `luarocks`, so you can ignore any warnings below
- ✅ OK {luarocks} `/opt/homebrew/bin/luarocks 3.12.2`
- ⚠️ WARNING `lua` version `5.1` needed, but found `Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio`
- ⚠️ WARNING {lua5.1} or {lua} or {lua-5.1} version `5.1` not installed
==============================================================================
luasnip: ✅
luasnip ~
- ✅ OK jsregexp is installed
==============================================================================
mason: ✅
mason.nvim ~
- ✅ OK mason.nvim version v2.0.1
- ✅ OK PATH: prepend
- ✅ OK Providers:
mason.providers.registry-api
mason.providers.client
- ✅ OK neovim version >= 0.10.0
mason.nvim [Registries] ~
- ✅ OK Registry `github.com/mason-org/mason-registry version: 2025-07-28-rusty-action` is installed.
mason.nvim [Core utils] ~
- ✅ OK unzip: `UnZip 6.00 of 20 April 2009, by Info-ZIP, with modifications by Apple Inc.`
- ✅ OK wget: `GNU Wget 1.25.0, a non-interactive network retriever.`
- ✅ OK curl: `curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0`
- ✅ OK gzip: `Apple gzip 457.120.3`
- ✅ OK tar: `bsdtar 3.5.3 - libarchive 3.7.4 zlib/1.2.12 liblzma/5.4.3 bz2lib/1.0.8 `
- ✅ OK bash: `GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24)`
- ✅ OK sh: `Ok`
mason.nvim [Languages] ~
- ✅ OK Go: `go version go1.24.5 darwin/arm64`
- ✅ OK luarocks: `/opt/homebrew/bin/luarocks 3.12.2`
- ✅ OK cargo: `cargo 1.82.0 (8f40fc59f 2024-08-21)`
- ✅ OK Ruby: `ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin24]`
- ✅ OK node: `v22.11.0`
- ✅ OK npm: `11.4.2`
- ✅ OK PHP: `PHP 8.4.10 (cli) (built: Jul 2 2025 02:22:42) (NTS)`
- ✅ OK Composer: `Composer version 2.8.10 2025-07-10 19:08:33`
- ✅ OK RubyGem: `3.5.3`
- ✅ OK python: `Python 3.13.5`
- ✅ OK java: `openjdk version "23.0.2" 2025-01-21`
- ✅ OK javac: `javac 23.0.2`
- ✅ OK julia: `julia version 1.11.6`
- ✅ OK pip: `pip 25.1.1 from /opt/homebrew/lib/python3.13/site-packages/pip (python 3.13)`
- ✅ OK python venv: `Ok`
==============================================================================
mason-lspconfig: ✅
mason-lspconfig.nvim ~
- ✅ OK Neovim v0.11
- ✅ OK mason.nvim v2
==============================================================================
mcphub: 1 ⚠️
mcphub.nvim ~
- mcphub.nvim version: 6.1.0
- mcp-hub binary:
- mcp-hub required version: 4.2.0
- mcp-hub installed version: 4.2.0
- ✅ OK mcp-hub version 4.2.0 is compatible
Plugin Dependencies: ~
- ✅ OK plenary.nvim installed
Libraries: ~
- ✅ OK curl installed
- ✅ OK node installed
- ✅ OK uv installed
Chat plugins ~
- ⚠️ WARNING codecompanion.nvim not found
- ✅ OK avante.nvim installed
- ✅ OK CopilotChat.nvim installed
==============================================================================
nvim-treesitter: ✅
Installation ~
- ✅ OK `tree-sitter` found 0.25.8 (parser generator, only needed for :TSInstallFromGrammar)
- ✅ OK `node` found v22.11.0 (only needed for :TSInstallFromGrammar)
- ✅ OK `git` executable found.
- ✅ OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
Version: Apple clang version 17.0.0 (clang-1700.0.13.5)
- ✅ OK Neovim was compiled with tree-sitter runtime ABI version 15 (required >=13). Parsers must be compatible with runtime ABI.
OS Info:
{
machine = "arm64",
release = "24.5.0",
sysname = "Darwin",
version = "Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:33 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T8122"
} ~
Parser/Features H L F I J
- bash ✓ ✓ ✓ . ✓
- c ✓ ✓ ✓ ✓ ✓
- css ✓ . ✓ ✓ ✓
- diff ✓ . ✓ . ✓
- dockerfile ✓ . . . ✓
- gitignore ✓ . . . ✓
- graphql ✓ . . ✓ ✓
- html ✓ ✓ ✓ ✓ ✓
- java ✓ ✓ ✓ ✓ ✓
- javascript ✓ ✓ ✓ ✓ ✓
- json ✓ ✓ ✓ ✓ .
- latex ✓ . ✓ . ✓
- lua ✓ ✓ ✓ ✓ ✓
- markdown ✓ . ✓ ✓ ✓
- markdown_inline ✓ . . . ✓
- prisma ✓ . ✓ . ✓
- query ✓ ✓ ✓ ✓ ✓
- regex ✓ . . . .
- sql ✓ . ✓ ✓ ✓
- svelte ✓ ✓ ✓ ✓ ✓
- tsx ✓ ✓ ✓ ✓ ✓
- typescript ✓ ✓ ✓ ✓ ✓
- vim ✓ ✓ ✓ . ✓
- vimdoc ✓ . . . ✓
- yaml ✓ ✓ ✓ ✓ ✓
Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
+) multiple parsers found, only one will be used
x) errors found in the query, try to run :TSUpdate {lang} ~
==============================================================================
render-markdown: ✅
render-markdown.nvim [version] ~
- ✅ OK plugin 8.6.9
- ✅ OK neovim >= 0.11
render-markdown.nvim [configuration] ~
- ✅ OK valid
render-markdown.nvim [treesitter] ~
- ✅ OK markdown: parser installed
- ✅ OK markdown: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown/highlights.scm
- ✅ OK markdown: highlighter enabled
- ✅ OK markdown_inline: parser installed
- ✅ OK markdown_inline: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown_inline/highlights.scm
- ✅ OK html: parser installed
render-markdown.nvim [icons] ~
- ✅ OK using: nvim-web-devicons
render-markdown.nvim [executables] ~
render-markdown.nvim [conflicts] ~
- ✅ OK headlines: not installed
- ✅ OK markview: not installed
- ✅ OK obsidian: not installed
==============================================================================
snacks: 4 ⚠️ 3 ❌
Snacks ~
- ✅ OK setup called
Snacks.bigfile ~
- ✅ OK setup {enabled}
Snacks.dashboard ~
- ✅ OK setup {enabled}
- ❌ ERROR setup did not run
Snacks.explorer ~
- ✅ OK setup {enabled}
Snacks.image ~
- ✅ OK setup {enabled}
- ✅ OK 'kitty' `kitty 0.42.2 created by Kovid Goyal`
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-0 Q16-HDRI aarch64 23234 https://imagemagick.org`
- ✅ OK 'convert' `WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"`
- ✅ OK `wezterm` detected and supported
- ⚠️ WARNING `wezterm` does not support placeholders. Fallback rendering will be used
- ⚠️ WARNING Inline images are disabled
- ✅ OK `tmux` detected and supported
- ✅ OK Terminal Dimensions:
- {size}: `0` x `0` pixels
- {scale}: `1.00`
- {cell}: `0` x `0` pixels
- ✅ OK Available Treesitter languages:
`css`, `html`, `javascript`, `latex`, `markdown_inline`, `markdown`, `svelte`, `tsx`
- ⚠️ WARNING Missing Treesitter languages:
`norg`, `scss`, `typst`, `vue`
- ⚠️ WARNING Image rendering in docs with missing treesitter parsers won't work
- ✅ OK 'gs' `10.05.1`
- ✅ OK PDF files are supported
- ✅ OK 'tectonic' `tectonic 0.15.0Tectonic 0.15.0`
- ✅ OK LaTeX math equations are supported
- ✅ OK 'mmdc' `node:internal/modules/esm/resolve:838`
- ✅ OK Mermaid diagrams are supported
- ✅ OK your terminal supports the kitty graphics protocol
Snacks.input ~
- ✅ OK setup {enabled}
- ❌ ERROR `vim.ui.input` is not set to `Snacks.input`
Snacks.lazygit ~
- ✅ OK {lazygit} installed
Snacks.notifier ~
- ✅ OK setup {enabled}
- ✅ OK is ready
Snacks.picker ~
- ✅ OK setup {enabled}
- ❌ ERROR `vim.ui.select` is not set to `Snacks.picker.select`
- ✅ OK Available Treesitter languages:
`regex`
- ✅ OK 'git' `git version 2.50.1`
- ✅ OK 'rg' `ripgrep 14.1.1`
- ✅ OK `Snacks.picker.grep()` is available
- ✅ OK 'fd' `fd 10.2.0`
- ✅ OK `Snacks.picker.files()` is available
- ✅ OK `Snacks.picker.explorer()` is available
- ✅ OK `SQLite3` is available
Snacks.quickfile ~
- ✅ OK setup {enabled}
Snacks.scope ~
- ✅ OK setup {enabled}
Snacks.scroll ~
- ✅ OK setup {enabled}
Snacks.statuscolumn ~
- ✅ OK setup {enabled}
Snacks.terminal ~
- ✅ OK shell configured
- `vim.o.shell`: /bin/zsh
- `parsed`: { "/bin/zsh" }
Snacks.toggle ~
- ✅ OK {which-key} is installed
Snacks.words ~
- ✅ OK setup {enabled}
==============================================================================
telescope: ✅
Checking for required plugins ~
- ✅ OK plenary installed.
- ✅ OK nvim-treesitter installed.
Checking external dependencies ~
- ✅ OK rg: found ripgrep 14.1.1
- ✅ OK fd: found fd 10.2.0
===== Installed extensions ===== ~
Telescope Extension: `dap` ~
- No healthcheck provided
Telescope Extension: `fzf` ~
- ✅ OK lib working as expected
- ✅ OK file_sorter correctly configured
- ✅ OK generic_sorter correctly configured
==============================================================================
vim.deprecated: ✅
- ✅ OK No deprecated functions detected
==============================================================================
vim.health: 1 ❌
Configuration ~
- ✅ OK no issues found
Runtime ~
- ✅ OK $VIMRUNTIME: /opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime
Performance ~
- ✅ OK Build type: Release
Remote Plugins ~
- ✅ OK Up to date
terminal ~
- key_backspace (kbs) terminfo entry: `key_backspace=^H`
- key_dc (kdch1) terminfo entry: `key_dc=\E[3~`
- $TERM_PROGRAM="vscode"
- $COLORTERM="truecolor"
tmux ~
- ✅ OK escape-time: 10
- ✅ OK focus-events: on
- $TERM: xterm-256color
- default-terminal: tmux-256color
- ❌ ERROR $TERM differs from the tmux `default-terminal` setting. Colors might look wrong.
- ADVICE:
- $TERM may have been set by some rc (.bashrc, .zshrc, ...).
External Tools ~
- ✅ OK ripgrep 14.1.1 (/opt/homebrew/bin/rg)
==============================================================================
vim.lsp: 15 ⚠️
- LSP log level : WARN
- Log path: /Users/carlos/.local/state/nvim/lsp.log
- Log size: 9416 KB
vim.lsp: Active Clients ~
- No active clients
vim.lsp: Enabled Configurations ~
- ⚠️ WARNING 'css_variables' config not found. Ensure that vim.lsp.config('css_variables') was called.
- css_variables:
- ⚠️ WARNING 'cssls' config not found. Ensure that vim.lsp.config('cssls') was called.
- cssls:
- ⚠️ WARNING 'cssmodules_ls' config not found. Ensure that vim.lsp.config('cssmodules_ls') was called.
- cssmodules_ls:
- ⚠️ WARNING 'emmet_ls' config not found. Ensure that vim.lsp.config('emmet_ls') was called.
- emmet_ls:
- ⚠️ WARNING 'eslint' config not found. Ensure that vim.lsp.config('eslint') was called.
- eslint:
- ⚠️ WARNING 'gopls' config not found. Ensure that vim.lsp.config('gopls') was called.
- gopls:
- ⚠️ WARNING 'graphql' config not found. Ensure that vim.lsp.config('graphql') was called.
- graphql:
- ⚠️ WARNING 'html' config not found. Ensure that vim.lsp.config('html') was called.
- html:
- ⚠️ WARNING 'jdtls' config not found. Ensure that vim.lsp.config('jdtls') was called.
- jdtls:
- ⚠️ WARNING 'lua_ls' config not found. Ensure that vim.lsp.config('lua_ls') was called.
- lua_ls:
- ⚠️ WARNING 'prismals' config not found. Ensure that vim.lsp.config('prismals') was called.
- prismals:
- ⚠️ WARNING 'pyright' config not found. Ensure that vim.lsp.config('pyright') was called.
- pyright:
- ⚠️ WARNING 'svelte' config not found. Ensure that vim.lsp.config('svelte') was called.
- svelte:
- ⚠️ WARNING 'tailwindcss' config not found. Ensure that vim.lsp.config('tailwindcss') was called.
- tailwindcss:
- ⚠️ WARNING 'ts_ls' config not found. Ensure that vim.lsp.config('ts_ls') was called.
- ts_ls:
vim.lsp: File Watcher ~
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients
vim.lsp: Position Encodings ~
- No active clients
==============================================================================
vim.provider: ✅
Clipboard (optional) ~
- ✅ OK Clipboard tool found: pbcopy
Node.js provider (optional) ~
- Node.js: v22.11.0
- Nvim node.js host: /Users/carlos/.config/yarn/global//node_modules/neovim/bin/cli.js
Perl provider (optional) ~
- Disabled (loaded_perl_provider=0).
Python 3 provider (optional) ~
- pyenv: Path: /opt/homebrew/Cellar/pyenv/2.6.5/libexec/pyenv
- pyenv: Root: /Users/carlos/.pyenv
- `g:python3_host_prog` is not set. Searching for python3.12 in the environment.
- Executable: /opt/homebrew/bin/python3.12
- Python version: 3.12.11
- pynvim version: 0.5.2
- ✅ OK Latest pynvim is installed.
Python virtualenv ~
- ✅ OK no $VIRTUAL_ENV
Ruby provider (optional) ~
- Disabled (loaded_ruby_provider=0).
==============================================================================
vim.treesitter: ✅
Treesitter features ~
- Treesitter ABI support: min 13, max 15
- WASM parser support: false
Treesitter parsers ~
- ✅ OK Parser: bash ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/bash.so
- ✅ OK Parser: c ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/c.so
- ✅ OK Parser: c ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/c.so
- ✅ OK Parser: css ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/css.so
- ✅ OK Parser: diff ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/diff.so
- ✅ OK Parser: dockerfile ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/dockerfile.so
- ✅ OK Parser: gitignore ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/gitignore.so
- ✅ OK Parser: graphql ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/graphql.so
- ✅ OK Parser: html ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/html.so
- ✅ OK Parser: java ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/java.so
- ✅ OK Parser: javascript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/javascript.so
- ✅ OK Parser: json ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/json.so
- ✅ OK Parser: latex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/latex.so
- ✅ OK Parser: lua ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/lua.so
- ✅ OK Parser: lua ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/lua.so
- ✅ OK Parser: markdown ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown.so
- ✅ OK Parser: markdown ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown.so
- ✅ OK Parser: markdown_inline ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown_inline.so
- ✅ OK Parser: markdown_inline ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown_inline.so
- ✅ OK Parser: prisma ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/prisma.so
- ✅ OK Parser: query ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/query.so
- ✅ OK Parser: query ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/query.so
- ✅ OK Parser: regex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/regex.so
- ✅ OK Parser: sql ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/sql.so
- ✅ OK Parser: svelte ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/svelte.so
- ✅ OK Parser: tsx ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/tsx.so
- ✅ OK Parser: typescript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/typescript.so
- ✅ OK Parser: vim ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vim.so
- ✅ OK Parser: vim ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vim.so
- ✅ OK Parser: vimdoc ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vimdoc.so
- ✅ OK Parser: vimdoc ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vimdoc.so
- ✅ OK Parser: yaml ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/yaml.so

View File

@@ -0,0 +1,28 @@
-- Cleanup script for deprecated debug adapters
-- Run this in Neovim with :lua loadfile("cleanup_deprecated_adapters.lua")()
local function cleanup_deprecated_adapters()
local mason_registry = require("mason-registry")
-- List of deprecated adapters to remove
local deprecated_adapters = {
"node-debug2-adapter",
"chrome-debug-adapter"
}
print("🧹 Cleaning up deprecated debug adapters...")
for _, adapter in ipairs(deprecated_adapters) do
if mason_registry.is_installed(adapter) then
print("🗑️ Uninstalling " .. adapter)
mason_registry.uninstall(adapter)
else
print("" .. adapter .. " is not installed")
end
end
print("✨ Cleanup complete! Make sure to restart Neovim for changes to take effect.")
end
-- Run the cleanup
cleanup_deprecated_adapters()

228
keybind.json Normal file
View File

@@ -0,0 +1,228 @@
[
{
"key": "cmd+i",
"command": "composerMode.agent"
},
{
"key": "ctrl-h",
"command": "workbench.action.navigateLeft"
},
{
"key": "ctrl-l",
"command": "workbench.action.navigateRight"
},
{
"key": "ctrl-k",
"command": "workbench.action.navigateUp"
},
{
"key": "ctrl-j",
"command": "workbench.action.navigateDown"
},
{
"key": "space e",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.toggleSidebarVisibility",
"workbench.files.action.focusFilesExplorer"
]
},
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && !sideBarFocus"
},
{
"key": "space e",
"command": "runCommands",
"args": {
"commands": [
"workbench.action.toggleSidebarVisibility",
"workbench.action.focusActiveEditorGroup"
]
},
"when": "vim.mode == 'Normal' && sideBarFocus && !inputFocus"
},
{
"key": "space e",
"when": "vim.mode == 'Normal' && editorTextFocus && foldersViewVisible",
"command": "workbench.action.toggleSidebarVisibility"
},
{
"key": "ctrl-w h",
"command": "workbench.action.navigateLeft",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-w l",
"command": "workbench.action.navigateRight",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-w k",
"command": "workbench.action.navigateUp",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-w j",
"command": "workbench.action.navigateDown",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space r",
"command": "renameFile",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "space x",
"command": "filesExplorer.cut",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "space d",
"command": "deleteFile",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "space a",
"command": "explorer.newFile",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "space s",
"command": "explorer.openToSide",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "enter",
"command": "explorer.openAndPassFocus",
"when": "filesExplorerFocus && !explorerResourceIsFolder && !inputFocus"
},
{
"key": "enter",
"command": "list.toggleExpand",
"when": "filesExplorerFocus && explorerResourceIsFolder && !inputFocus"
},
{
"key": "space d a",
"command": "workbench.action.debug.selectandstart",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && debuggersAvailable"
},
{
"key": "space d t",
"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",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'"
},
{
"key": "space d b",
"command": "editor.debug.action.toggleBreakpoint",
"when": "vim.mode == 'Normal' && editorTextFocus"
},
{
"key": "space d e",
"command": "editor.debug.action.showDebugHover",
"when": "vim.mode == 'Normal' && editorTextFocus && inDebugMode && debugState == 'stopped'"
},
{
"key": "space d c",
"command": "workbench.action.debug.continue",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'"
},
{
"key": "space w",
"command": "workbench.action.files.save",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space q",
"command": "workbench.action.closeActiveEditor",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space x a",
"command": "workbench.action.closeAllEditors",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-e",
"command": "editorScroll",
"args": { "to": "down", "by": "line", "value": 10, "revealCursor": true },
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-y",
"command": "editorScroll",
"args": { "to": "up", "by": "line", "value": 10, "revealCursor": true },
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space n t",
"command": "workbench.view.explorer",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space o",
"command": "workbench.action.splitEditorRight",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "space i",
"command": "workbench.action.splitEditorDown",
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
},
{
"key": "ctrl-p",
"command": "workbench.action.previousEditor",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "ctrl-n",
"command": "workbench.action.nextEditor",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c c",
"command": "workbench.action.openChat",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c q",
"command": "workbench.action.closeChat",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c i",
"command": "workbench.action.focusChatInput",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c n",
"command": "workbench.action.newChat",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c k",
"command": "workbench.action.keepChat",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
},
{
"key": "space c u",
"command": "workbench.action.undoChatChanges",
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
}
]

View File

@@ -1,296 +0,0 @@
gui:
authorColors: {}
branchColors: {}
branchColorPatterns: {}
scrollHeight: 2
scrollPastBottom: true
scrollOffMargin: 2
scrollOffBehavior: margin
mouseEvents: true
skipDiscardChangeWarning: false
skipStashWarning: false
skipNoStagedFilesWarning: false
skipRewordInEditorWarning: false
sidePanelWidth: 0.3333
expandFocusedSidePanel: false
expandedSidePanelWeight: 2
mainPanelSplitMode: flexible
enlargedSideViewLocation: left
wrapLinesInStagingView: true
language: auto
timeFormat: 02 Jan 06
shortTimeFormat: 3:04PM
theme:
activeBorderColor:
- green
- bold
inactiveBorderColor:
- default
searchingActiveBorderColor:
- cyan
- bold
optionsTextColor:
- blue
selectedLineBgColor:
- blue
inactiveViewSelectedLineBgColor:
- bold
cherryPickedCommitFgColor:
- blue
cherryPickedCommitBgColor:
- cyan
markedBaseCommitFgColor:
- blue
markedBaseCommitBgColor:
- yellow
unstagedChangesColor:
- red
defaultFgColor:
- default
commitLength:
show: true
showListFooter: true
showFileTree: true
showNumstatInFilesView: false
showRandomTip: true
showCommandLog: true
showBottomLine: true
showPanelJumps: true
showIcons: false
nerdFontsVersion: ""
showFileIcons: true
commitAuthorShortLength: 2
commitAuthorLongLength: 17
commitHashLength: 8
showBranchCommitHash: false
showDivergenceFromBaseBranch: none
commandLogSize: 8
splitDiff: auto
screenMode: normal
border: rounded
animateExplosion: true
portraitMode: auto
filterMode: substring
spinner:
frames:
- '|'
- /
- '-'
- \
rate: 50
statusPanelView: dashboard
switchToFilesAfterStashPop: true
switchToFilesAfterStashApply: true
switchTabsWithPanelJumpKeys: false
git:
paging:
colorArg: always
pager: ""
useConfig: false
externalDiffCommand: ""
commit:
signOff: false
autoWrapCommitMessage: true
autoWrapWidth: 72
merging:
manualCommit: false
args: ""
squashMergeMessage: Squash merge {{selectedRef}} into {{currentBranch}}
mainBranches:
- master
- main
skipHookPrefix: WIP
autoFetch: true
autoRefresh: true
fetchAll: true
autoStageResolvedConflicts: true
branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --
allBranchesLogCmd: git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium
allBranchesLogCmds: []
overrideGpg: false
disableForcePushing: false
commitPrefix: null
commitPrefixes: {}
branchPrefix: ""
parseEmoji: false
log:
order: topo-order
showGraph: always
showWholeGraph: false
truncateCopiedCommitHashesTo: 12
update:
method: prompt
days: 14
refresher:
refreshInterval: 10
fetchInterval: 60
confirmOnQuit: false
quitOnTopLevelReturn: false
disableStartupPopups: false
customCommands: []
services: {}
notARepository: prompt
promptToReturnFromSubprocess: true
keybinding:
universal:
quit: q
quit-alt1: <c-c>
return: <esc>
quitWithoutChangingDirectory: Q
togglePanel: <tab>
prevItem: <up>
nextItem: <down>
prevItem-alt: k
nextItem-alt: j
prevPage: ','
nextPage: .
scrollLeft: H
scrollRight: L
gotoTop: <
gotoBottom: '>'
toggleRangeSelect: v
rangeSelectDown: <s-down>
rangeSelectUp: <s-up>
prevBlock: <left>
nextBlock: <right>
prevBlock-alt: h
nextBlock-alt: l
nextBlock-alt2: <tab>
prevBlock-alt2: <backtab>
jumpToBlock:
- "1"
- "2"
- "3"
- "4"
- "5"
nextMatch: "n"
prevMatch: "N"
startSearch: /
optionMenu: <disabled>
optionMenu-alt1: '?'
select: <space>
goInto: <enter>
confirm: <enter>
confirmInEditor: <a-enter>
remove: d
new: "n"
edit: e
openFile: o
scrollUpMain: <pgup>
scrollDownMain: <pgdown>
scrollUpMain-alt1: K
scrollDownMain-alt1: J
scrollUpMain-alt2: <c-u>
scrollDownMain-alt2: <c-d>
executeShellCommand: ':'
createRebaseOptionsMenu: m
pushFiles: P
pullFiles: p
refresh: R
createPatchOptionsMenu: <c-p>
nextTab: ']'
prevTab: '['
nextScreenMode: +
prevScreenMode: _
undo: z
redo: <c-z>
filteringMenu: <c-s>
diffingMenu: W
diffingMenu-alt: <c-e>
copyToClipboard: <c-o>
openRecentRepos: <c-r>
submitEditorText: <enter>
extrasMenu: '@'
toggleWhitespaceInDiffView: <c-w>
increaseContextInDiffView: '}'
decreaseContextInDiffView: '{'
increaseRenameSimilarityThreshold: )
decreaseRenameSimilarityThreshold: (
openDiffTool: <c-t>
status:
checkForUpdate: u
recentRepos: <enter>
allBranchesLogGraph: a
files:
commitChanges: c
commitChangesWithoutHook: w
amendLastCommit: A
commitChangesWithEditor: C
findBaseCommitForFixup: <c-f>
confirmDiscard: x
ignoreFile: i
refreshFiles: r
stashAllChanges: s
viewStashOptions: S
toggleStagedAll: a
viewResetOptions: D
fetch: f
toggleTreeView: '`'
openMergeTool: M
openStatusFilter: <c-b>
copyFileInfoToClipboard: "y"
collapseAll: '-'
expandAll: =
branches:
createPullRequest: o
viewPullRequestOptions: O
copyPullRequestURL: <c-y>
checkoutBranchByName: c
forceCheckoutBranch: F
rebaseBranch: r
renameBranch: R
mergeIntoCurrentBranch: M
viewGitFlowOptions: i
fastForward: f
createTag: T
pushTag: P
setUpstream: u
fetchRemote: f
sortOrder: s
worktrees:
viewWorktreeOptions: w
commits:
squashDown: s
renameCommit: r
renameCommitWithEditor: R
viewResetOptions: g
markCommitAsFixup: f
createFixupCommit: F
squashAboveCommits: S
moveDownCommit: <c-j>
moveUpCommit: <c-k>
amendToCommit: A
resetCommitAuthor: a
pickCommit: p
revertCommit: t
cherryPickCopy: C
pasteCommits: V
markCommitAsBaseForRebase: B
tagCommit: T
checkoutCommit: <space>
resetCherryPick: <c-R>
copyCommitAttributeToClipboard: "y"
openLogMenu: <c-l>
openInBrowser: o
viewBisectOptions: b
startInteractiveRebase: i
amendAttribute:
resetAuthor: a
setAuthor: A
addCoAuthor: c
stash:
popStash: g
renameStash: r
commitFiles:
checkoutCommitFile: c
main:
toggleSelectHunk: a
pickBothHunks: b
editSelectHunk: E
submodules:
init: i
update: u
bulkMenu: b
commitMessage:
commitMenu: <c-o>

View File

@@ -0,0 +1,7 @@
-- Highlight .njk files as htmldjango for better templating syntax
vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, {
pattern = "*.njk",
callback = function()
vim.cmd("set filetype=htmldjango")
end,
})

View 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

View File

@@ -1,24 +1,59 @@
-- Load compatibility layer first
-- =============================================================================
-- cargdev/core/init.lua
-- Main core initialization for cargdev Neovim config
-- =============================================================================
-- 0. Setup LuaRocks path for rest.nvim dependencies (Lua 5.1 - Neovim uses LuaJIT)
local function setup_luarocks_path()
local luarocks_path = vim.fn.system("luarocks path --lr-path --lua-version=5.1 --local"):gsub("\n", "")
if luarocks_path and luarocks_path ~= "" then
package.path = package.path .. ";" .. luarocks_path
end
end
setup_luarocks_path()
-- 1. Compatibility Layer
require("cargdev.core.compatibility").setup() require("cargdev.core.compatibility").setup()
-- 2. Core Options and Keymaps
require("cargdev.core.options") require("cargdev.core.options")
require("cargdev.core.keymaps") require("cargdev.core.keymaps")
-- Load all Lua files inside `cargdev/core/function/` -- 3. Utility: Load all Lua files inside `cargdev/core/function/` AFTER plugins are loaded
local function load_functions() local function load_functions()
local function_path = vim.fn.stdpath("config") .. "/lua/cargdev/core/function" local function_path = vim.fn.stdpath("config") .. "/lua/cargdev/core/function"
local scan = vim.fn.globpath(function_path, "*.lua", false, true) local scan = vim.fn.globpath(function_path, "*.lua", false, true)
for _, file in ipairs(scan) do for _, file in ipairs(scan) do
local module_name = "cargdev.core.function." .. file:match("([^/]+)%.lua$") local module_name = "cargdev.core.function." .. file:match("([^/]+)%.lua$")
local success, err = pcall(require, module_name) local success, err = pcall(require, module_name)
if not success then if not success then
vim.notify("Error loading function module: " .. module_name .. "\n" .. err, vim.log.levels.ERROR) vim.notify("Error loading function module: " .. module_name .. "\n" .. err, vim.log.levels.ERROR)
end end
end end
end end
-- 4. Fix: Force filetype detection on BufRead (fix for nvim-tree/plain text issue)
vim.api.nvim_create_autocmd("BufRead", {
pattern = "*",
callback = function()
vim.cmd("filetype detect")
end,
})
-- 5. Load functions immediately
load_functions()
-- 6. 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()
end, 200)
end,
once = true,
})
--[[ vim.api.nvim_create_autocmd("BufReadPost", { --[[ vim.api.nvim_create_autocmd("BufReadPost", {
once = true, once = true,
@@ -27,4 +62,3 @@ end
end end
}) })
]] ]]
load_functions()

View File

@@ -10,7 +10,7 @@ keymaps/
├── general.lua # General keymaps (leader, basic navigation) ├── general.lua # General keymaps (leader, basic navigation)
├── personal.lua # Personal workflow keymaps ├── personal.lua # Personal workflow keymaps
├── lsp.lua # LSP and function navigation keymaps ├── lsp.lua # LSP and function navigation keymaps
├── telescope.lua # Telescope search and navigation keymaps ├── snacks.lua # Snacks search and navigation keymaps (replacing Telescope)
└── plugins.lua # Plugin-specific keymaps └── plugins.lua # Plugin-specific keymaps
``` ```
@@ -36,7 +36,7 @@ The main `keymaps.lua` file automatically loads all `.lua` files from this folde
- Code actions and documentation - Code actions and documentation
- Diagnostics - Diagnostics
### **telescope.lua** ### **snacks.lua**
- File search (`<leader>ff`, `<leader>fs`) - File search (`<leader>ff`, `<leader>fs`)
- Buffer management - Buffer management
- Git integration - Git integration
@@ -71,7 +71,7 @@ To add new keymaps:
| General | `general.lua` | Basic setup and utilities | | General | `general.lua` | Basic setup and utilities |
| Personal | `personal.lua` | Your workflow shortcuts | | Personal | `personal.lua` | Your workflow shortcuts |
| LSP | `lsp.lua` | Function navigation and LSP features | | LSP | `lsp.lua` | Function navigation and LSP features |
| Search | `telescope.lua` | File and text search | | Search | `snacks.lua` | File and text search |
| Plugins | `plugins.lua` | Plugin-specific functionality | | Plugins | `plugins.lua` | Plugin-specific functionality |
## 🔄 Benefits ## 🔄 Benefits
@@ -86,8 +86,8 @@ To add new keymaps:
The keymaps are automatically loaded when Neovim starts. You can: The keymaps are automatically loaded when Neovim starts. You can:
- **View all keymaps**: `<leader>fk` (Telescope keymaps) - **View all keymaps**: `<leader>fk` (Snacks keymaps)
- **Search keymaps**: Use Telescope to search through your keymaps - **Search keymaps**: Use Snacks to search through your keymaps
- **Modify keymaps**: Edit the appropriate file and restart Neovim - **Modify keymaps**: Edit the appropriate file and restart Neovim
## 📝 Notes ## 📝 Notes

View File

@@ -0,0 +1,13 @@
-- -- Copilot Chat keymaps
-- local keymap = vim.keymap
--
-- keymap.set("v", "<leader>zn", ":CopilotChatRename<CR>", { desc = "Rename variable (Copilot Chat)" })
-- keymap.set("n", "<leader>zc", ":CopilotChat<CR>", { desc = "Open Copilot Chat" })
-- keymap.set("v", "<leader>ze", ":CopilotChatExplain<CR>", { desc = "Explain code (Copilot Chat)" })
-- keymap.set("v", "<leader>zr", ":CopilotChatReview<CR>", { desc = "Review code (Copilot Chat)" })
-- keymap.set("v", "<leader>zf", ":CopilotChatFix<CR>", { desc = "Fix code issues (Copilot Chat)" })
-- keymap.set("v", "<leader>zo", ":CopilotChatOptimize<CR>", { desc = "Optimize code (Copilot Chat)" })
-- keymap.set("v", "<leader>zd", ":CopilotChatDocs<CR>", { desc = "Generate docs (Copilot Chat)" })
-- keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
-- keymap.set("n", "<leader>cd", ":Copilot disable<CR>", { desc = "Copilot: Disabled" })
-- keymap.set("n", "<leader>cs", ":Copilot status<CR>", { desc = "Copilot: Status" })

View File

@@ -0,0 +1,35 @@
-- DAP (Debug Adapter Protocol) keymaps
local ok_dap, dap = pcall(require, "dap")
local ok_dapui, dapui = pcall(require, "dapui")
local fn = vim.fn
local keymap = vim.keymap.set
if ok_dap and ok_dapui then
keymap("n", "<leader>dcr", dap.continue, { desc = "▶ Start Debugging" })
keymap("n", "<leader>do", dap.step_over, { desc = "⏭ Step Over" })
keymap("n", "<leader>di", dap.step_into, { desc = "⤵ Step Into" })
keymap("n", "<leader>dot", dap.step_out, { desc = "⤴ Step Out" })
keymap("n", "<leader>db", dap.toggle_breakpoint, { desc = "🔴 Toggle Breakpoint" })
keymap("n", "<leader>dB", function()
dap.set_breakpoint(fn.input("Breakpoint condition: "))
end, { desc = "⚠ Conditional Breakpoint" })
keymap("n", "<leader>dr", dap.repl.open, { desc = "💬 Open REPL" })
keymap("n", "<leader>dl", dap.run_last, { desc = "🔁 Run Last Debug" })
keymap("n", "<leader>du", dapui.toggle, { desc = "🧩 Toggle DAP UI" })
keymap("n", "<leader>dq", dap.terminate, { desc = "⛔ Stop Debugging" })
-- 🧼 Reset UI
keymap("n", "<leader>drt", function()
dap.terminate()
dapui.close()
vim.defer_fn(function()
dapui.open()
end, 200)
end, { desc = "🧼 Reset DAP UI Layout" })
-- 🔭 Snacks Integration (replacing Telescope)
keymap("n", "<leader>dcf", "<cmd>lua require('snacks.picker').dap_configurations()<cr>", { desc = "🔭 DAP Configs" })
keymap("n", "<leader>dcb", "<cmd>lua require('snacks.picker').dap_list_breakpoints()<cr>", { desc = "🧷 List Breakpoints" })
keymap("n", "<leader>dco", "<cmd>lua require('snacks.picker').dap_commands()<cr>", { desc = "⚙️ DAP Commands" })
end

View File

@@ -6,14 +6,111 @@ local opts = { noremap = true, silent = true }
-- GENERAL KEYMAPS -- GENERAL KEYMAPS
-- ============================================================================= -- =============================================================================
-- Set leader key
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- General keymaps -- General keymaps
keymap.set("i", "jk", "<ESC>", opts) -- Exit insert mode with jk keymap.set("i", "jk", "<ESC>", opts) -- Exit insert mode with jk
keymap.set("n", "<leader>nh", ":nohl<CR>", opts) -- Clear search highlights keymap.set("n", "<leader>nh", ":nohl<CR>", opts) -- Clear search highlights
keymap.set("n", "x", '"_x', opts) -- Delete character without copying into register keymap.set("n", "x", '"_x', opts) -- Delete character without copying into register
-- Save and quit (additional) -- Save and quit (additional)
keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" }) keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" })
-- Put this in your init.lua
local vault_path = vim.env.IDEA_DIR
local function follow_obsidian_link()
-- Extract the full [[...]] link from the current line under/around the cursor
local line = vim.api.nvim_get_current_line()
local col = vim.fn.col('.')
local start_idx, end_idx, raw
-- Search for all [[...]] in the line, pick the one under/around the cursor
local i = 1
while true do
local s, e = line:find('%[%[.-%]%]', i)
if not s then break end
if col >= s and col <= e + 1 then
start_idx, end_idx = s, e
break
end
i = e + 1
end
if not start_idx then
vim.notify('No [[link]] under cursor', vim.log.levels.WARN)
return
end
raw = line:sub(start_idx, end_idx)
raw = raw:gsub('^!%[%[', '[[') -- strip leading ! from embeds
local link = raw:gsub('%[%[', ''):gsub('%]%]', '')
-- split off alias (|) and heading (#) only after extracting the full link
local alias
local heading
-- first, split off alias if present
local pipe_idx = link:find("|", 1, true)
if pipe_idx then
alias = link:sub(pipe_idx + 1)
link = link:sub(1, pipe_idx - 1)
end
-- then, split off heading if present
local hash_idx = link:find("#", 1, true)
if hash_idx then
heading = link:sub(hash_idx + 1)
link = link:sub(1, hash_idx - 1)
end
-- normalize spaces
link = link:gsub("\\ ", " "):gsub("^%s+", ""):gsub("%s+$", "")
local function goto_heading(h)
if not h or h == "" then
return
end
-- crude jump: search for markdown heading or block that contains it
vim.cmd("keepjumps normal! gg")
local pat = "^%s*#+%s*" .. vim.pesc(h)
if vim.fn.search(pat) == 0 then
-- fallback: plain search
vim.fn.search(vim.pesc(h))
end
end
-- if link contains a '/', treat it as a relative path inside the vault
if link:find("/") then
local target = vault_path .. "/" .. link .. ".md"
vim.cmd.edit(target)
goto_heading(heading)
return
end
-- otherwise search recursively for basename match anywhere in the vault
local pattern = "**/" .. link .. ".md"
local matches = vim.fn.globpath(vault_path, pattern, false, true) -- list
if #matches == 1 then
vim.cmd.edit(matches[1])
goto_heading(heading)
elseif #matches > 1 then
vim.ui.select(matches, { prompt = "Multiple matches for " .. link .. ":" }, function(choice)
if choice then
vim.cmd.edit(choice)
goto_heading(heading)
end
end)
else
-- not found: offer to create at vault root
local target = vault_path .. "/" .. link .. ".md"
vim.ui.input({ prompt = "Create " .. target .. " ? (y/N) " }, function(ans)
if ans and ans:lower():sub(1, 1) == "y" then
vim.cmd.edit(target)
-- optional: insert a title
if vim.fn.line("$") == 1 and vim.fn.getline(1) == "" then
vim.api.nvim_buf_set_lines(0, 0, 0, false, { "# " .. (alias or link), "" })
end
goto_heading(heading)
end
end)
end
end
vim.keymap.set("n", "<leader>o", follow_obsidian_link, { noremap = true, silent = true })

View File

@@ -0,0 +1,10 @@
-- Git Conflict keymaps
local keymap = vim.keymap
keymap.set("n", "]x", "<Plug>(git-conflict-next-conflict)", { desc = "Go to next git conflict" })
keymap.set("n", "[x", "<Plug>(git-conflict-prev-conflict)", { desc = "Go to previous git conflict" })
keymap.set("n", "<leader>coo", "<Plug>(git-conflict-ours)", { desc = "Choose ours (git conflict)" })
keymap.set("n", "<leader>ct", "<Plug>(git-conflict-theirs)", { desc = "Choose theirs (git conflict)" })
keymap.set("n", "<leader>cb", "<Plug>(git-conflict-both)", { desc = "Choose both (git conflict)" })
keymap.set("n", "<leader>c0", "<Plug>(git-conflict-none)", { desc = "Choose none (git conflict)" })
keymap.set("n", "<leader>cq", "<Plug>(git-conflict-list)", { desc = "List all git conflicts" })

View File

@@ -0,0 +1,6 @@
-- Leet keymaps
local keymap = vim.keymap
keymap.set("n", "<leader>lr", ":Leet test<CR>", { desc = "Test the leet current problem code" })
keymap.set("n", "<leader>ls", ":Leet submit<CR>", { desc = "Submit the leet solution" })
keymap.set("n", "<leader>lls", ":Leet last_submit<CR>", { desc = "Brings the latest submition from leetcode" })

View File

@@ -6,14 +6,14 @@ local keymap = vim.keymap
-- ============================================================================= -- =============================================================================
-- Primary LSP navigation -- Primary LSP navigation
keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<cr>", { desc = "Go to definition" }) keymap.set("n", "gd", "<cmd>lua require('snacks.picker').lsp_definitions()<cr>", { desc = "Go to definition" })
keymap.set("n", "gi", "<cmd>Telescope lsp_implementations<cr>", { desc = "Go to implementation" }) keymap.set("n", "gi", "<cmd>lua require('snacks.picker').lsp_implementations()<cr>", { desc = "Go to implementation" })
keymap.set("n", "gr", "<cmd>Telescope lsp_references<cr>", { desc = "Show references" }) keymap.set("n", "gr", "<cmd>lua require('snacks.picker').lsp_references()<cr>", { desc = "Show references" })
keymap.set("n", "gt", "<cmd>Telescope lsp_type_definitions<cr>", { desc = "Go to type definition" }) keymap.set("n", "gt", "<cmd>lua require('snacks.picker').lsp_type_definitions()<cr>", { desc = "Go to type definition" })
-- Symbol search -- Symbol search
keymap.set("n", "<leader>ds", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document symbols" }) keymap.set("n", "<leader>ds", "<cmd>lua require('snacks.picker').lsp_document_symbols()<cr>", { desc = "Document symbols" })
keymap.set("n", "<leader>ws", "<cmd>Telescope lsp_workspace_symbols<cr>", { desc = "Workspace symbols" }) keymap.set("n", "<leader>ws", "<cmd>lua require('snacks.picker').lsp_workspace_symbols()<cr>", { desc = "Workspace symbols" })
-- Code actions and documentation -- Code actions and documentation
keymap.set("n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<cr>", { desc = "Code actions" }) keymap.set("n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<cr>", { desc = "Code actions" })
@@ -21,7 +21,7 @@ keymap.set("n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<cr>", { desc = "Ren
keymap.set("n", "K", "<cmd>lua vim.lsp.buf.hover()<cr>", { desc = "Hover documentation" }) keymap.set("n", "K", "<cmd>lua vim.lsp.buf.hover()<cr>", { desc = "Hover documentation" })
-- Diagnostics -- Diagnostics
keymap.set("n", "<leader>D", "<cmd>Telescope diagnostics<cr>", { desc = "Show diagnostics" }) keymap.set("n", "<leader>D", "<cmd>lua require('snacks.picker').diagnostics()<cr>", { desc = "Show diagnostics" })
keymap.set("n", "<leader>dd", "<cmd>lua vim.diagnostic.open_float()<cr>", { desc = "Line diagnostics" }) keymap.set("n", "<leader>dd", "<cmd>lua vim.diagnostic.open_float()<cr>", { desc = "Line diagnostics" })
keymap.set("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<cr>", { desc = "Previous diagnostic" }) keymap.set("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<cr>", { desc = "Previous diagnostic" })
keymap.set("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<cr>", { desc = "Next diagnostic" }) keymap.set("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<cr>", { desc = "Next diagnostic" })

View File

@@ -5,8 +5,14 @@ local keymap = vim.keymap
-- PERSONAL KEYMAPS (ORIGINAL WORKFLOW) -- PERSONAL KEYMAPS (ORIGINAL WORKFLOW)
-- ============================================================================= -- =============================================================================
keymap.set("n", "<leader>u", "gg0vG$", { desc = "Select the whole file open" }) keymap.set("n", "<leader>u", function()
keymap.set("n", "<leader>4", "0v$hy<Esc>0o<Esc>0p0kw<CR>", { desc = "Copy the entire line and paste just below" }) vim.cmd("normal! ggVG")
end, { desc = "Select the whole file" })
keymap.set("n", "<leader>4", function()
-- Copy current line and paste below
vim.cmd("normal! yy")
vim.cmd("normal! p")
end, { desc = "Copy the entire line and paste just below" })
-- file management -- file management
keymap.set("n", "<leader>w", ":w<CR>", { desc = "Save the current file" }) keymap.set("n", "<leader>w", ":w<CR>", { desc = "Save the current file" })
@@ -83,4 +89,4 @@ keymap.set("v", "<leader>zd", ":CopilotChatDocs<CR>", { desc = "Generate docs (C
-- Copilot -- Copilot
keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" }) keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
keymap.set("n", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Copilot Chat: Explain code" }) keymap.set("n", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Copilot Chat: Explain code" })

View File

@@ -21,7 +21,7 @@ keymap.set("n", "<leader>gg", "<cmd>LazyGit<CR>", { desc = "LazyGit" })
-- DAP -- DAP
keymap.set("n", "<leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<cr>", { desc = "Toggle breakpoint" }) keymap.set("n", "<leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<cr>", { desc = "Toggle breakpoint" })
keymap.set("n", "<leader>dc", "<cmd>lua require'dap'.continue()<cr>", { desc = "Continue" }) keymap.set("n", "<leader>dcc", "<cmd>lua require'dap'.continue()<cr>", { desc = "Continue" })
keymap.set("n", "<leader>di", "<cmd>lua require'dap'.step_into()<cr>", { desc = "Step into" }) keymap.set("n", "<leader>di", "<cmd>lua require'dap'.step_into()<cr>", { desc = "Step into" })
keymap.set("n", "<leader>do", "<cmd>lua require'dap'.step_over()<cr>", { desc = "Step over" }) keymap.set("n", "<leader>do", "<cmd>lua require'dap'.step_over()<cr>", { desc = "Step over" })
keymap.set("n", "<leader>dO", "<cmd>lua require'dap'.step_out()<cr>", { desc = "Step out" }) keymap.set("n", "<leader>dO", "<cmd>lua require'dap'.step_out()<cr>", { desc = "Step out" })
@@ -49,8 +49,8 @@ keymap.set("n", "<leader>sr", "<cmd>SessionRestore<cr>", { desc = "Restore sessi
-- Formatting -- Formatting
keymap.set("n", "<leader>f", "<cmd>lua vim.lsp.buf.format()<cr>", { desc = "Format buffer" }) keymap.set("n", "<leader>f", "<cmd>lua vim.lsp.buf.format()<cr>", { desc = "Format buffer" })
-- Substitute -- Substitute (changed from <leader>s to <leader>sub to avoid conflicts)
keymap.set("n", "<leader>s", "<cmd>lua require('substitute').operator()<cr>", { desc = "Substitute with motion" }) keymap.set("n", "<leader>sub", "<cmd>lua require('substitute').operator()<cr>", { desc = "Substitute with motion" })
keymap.set("n", "<leader>ss", "<cmd>lua require('substitute').line()<cr>", { desc = "Substitute line" }) keymap.set("n", "<leader>ss", "<cmd>lua require('substitute').line()<cr>", { desc = "Substitute line" })
keymap.set("n", "<leader>S", "<cmd>lua require('substitute').eol()<cr>", { desc = "Substitute to end of line" }) keymap.set("n", "<leader>S", "<cmd>lua require('substitute').eol()<cr>", { desc = "Substitute to end of line" })
@@ -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", "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" }) 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) -- DATABASE KEYMAPS (Temporarily disabled to prevent conflicts)
-- ============================================================================= -- =============================================================================
@@ -192,4 +205,4 @@ keymap.set("n", "<leader>tC", "<cmd>set formatoptions-=c<cr>", { desc = "Disable
-- Indent and wrap -- Indent and wrap
keymap.set("n", "<leader>ti", "<cmd>set breakindent!<cr>", { desc = "Toggle break indent" }) keymap.set("n", "<leader>ti", "<cmd>set breakindent!<cr>", { desc = "Toggle break indent" })
keymap.set("n", "<leader>ts", "<cmd>set showbreak=↪ <cr>", { desc = "Show break indicator" }) keymap.set("n", "<leader>ts", "<cmd>set showbreak=↪ <cr>", { desc = "Show break indicator" })
keymap.set("n", "<leader>tS", "<cmd>set showbreak=<cr>", { desc = "Hide break indicator" }) keymap.set("n", "<leader>tS", "<cmd>set showbreak=<cr>", { desc = "Hide break indicator" })

View File

@@ -0,0 +1,5 @@
-- Project Run/Debug keymaps
local keymap = vim.keymap
keymap.set("n", "<leader>pr", ":RunProject<CR>", { desc = "Run Project" })
keymap.set("n", "<leader>pd", ":DebugProject<CR>", { desc = "Debug Project" })

View File

@@ -0,0 +1,28 @@
-- Snacks keymaps (replacing Telescope)
local keymap = vim.keymap
-- =============================================================================
-- SNACKS NAVIGATION
-- =============================================================================
-- File navigation
keymap.set("n", "<leader>ff", "<cmd>lua require('snacks.picker').files()<cr>", { desc = "Find files" })
keymap.set("n", "<leader>fs", "<cmd>lua require('snacks.picker').grep()<cr>", { desc = "Live grep" })
keymap.set("n", "<leader>fc", "<cmd>lua require('snacks.picker').grep_string()<cr>", { desc = "Grep string" })
keymap.set("n", "<leader>fr", "<cmd>lua require('snacks.picker').oldfiles()<cr>", { desc = "Recent files" })
-- Buffer and session management
keymap.set("n", "<leader>fb", "<cmd>lua require('snacks.picker').buffers()<cr>", { desc = "Find buffers" })
keymap.set("n", "<leader>fh", "<cmd>lua require('snacks.picker').help_tags()<cr>", { desc = "Help tags" })
keymap.set("n", "<leader>fm", "<cmd>lua require('snacks.picker').marks()<cr>", { desc = "Find marks" })
keymap.set("n", "<leader>fk", "<cmd>lua require('snacks.picker').keymaps()<cr>", { desc = "Find keymaps" })
keymap.set("n", "<leader>fC", "<cmd>lua require('snacks.picker').commands()<cr>", { desc = "Find commands" })
-- Git (using Telescope for git features as Snacks may not have all git pickers)
keymap.set("n", "<leader>fG", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
keymap.set("n", "<leader>fB", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
keymap.set("n", "<leader>fg", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
keymap.set("n", "<leader>gs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
-- Todos (keep Telescope for todos as Snacks may not have this)
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })

View File

@@ -0,0 +1,18 @@
-- Sudoku keymaps
-- WARNING: <leader>sng is mapped to two different commands below. Only the last one will take effect in Neovim.
-- Consider changing one of the mappings if you want both actions available.
local keymap = vim.keymap
keymap.set("n", "<leader>si1", ":Sudoku insert=1<CR>", { desc = "Add number 1" })
keymap.set("n", "<leader>si2", ":Sudoku insert=2<CR>", { desc = "Add number 2" })
keymap.set("n", "<leader>si3", ":Sudoku insert=3<CR>", { desc = "Add number 3" })
keymap.set("n", "<leader>si4", ":Sudoku insert=4<CR>", { desc = "Add number 4" })
keymap.set("n", "<leader>si5", ":Sudoku insert=5<CR>", { desc = "Add number 5" })
keymap.set("n", "<leader>si6", ":Sudoku insert=6<CR>", { desc = "Add number 6" })
keymap.set("n", "<leader>si7", ":Sudoku insert=7<CR>", { desc = "Add number 7" })
keymap.set("n", "<leader>si8", ":Sudoku insert=8<CR>", { desc = "Add number 8" })
keymap.set("n", "<leader>si9", ":Sudoku insert=9<CR>", { desc = "Add number 9" })
keymap.set("n", "<leader>scc", ":Sudoku clear_cell<CR>", { desc = "Clear current cell" })
keymap.set("n", "<leader>su", ":Sudoku undo<CR>", { desc = "Undo last action" })
keymap.set("n", "<leader>sng", ":Sudoku new_game<CR>", { desc = "Starts new game" })
keymap.set("n", "<leader>sng", ":Sudoku view=settings<CR>", { desc = "Display the settings" })

View File

@@ -1,28 +0,0 @@
-- Telescope keymaps
local keymap = vim.keymap
-- =============================================================================
-- TELESCOPE NAVIGATION
-- =============================================================================
-- File navigation
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Find files" })
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Live grep" })
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "Grep string" })
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "Recent files" })
-- Buffer and session management
keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Find buffers" })
keymap.set("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help tags" })
keymap.set("n", "<leader>fm", "<cmd>Telescope marks<cr>", { desc = "Find marks" })
keymap.set("n", "<leader>fk", "<cmd>Telescope keymaps<cr>", { desc = "Find keymaps" })
keymap.set("n", "<leader>fC", "<cmd>Telescope commands<cr>", { desc = "Find commands" })
-- Git
keymap.set("n", "<leader>fg", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
keymap.set("n", "<leader>fG", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
keymap.set("n", "<leader>fb", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
keymap.set("n", "<leader>gs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
-- Todos
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })

View File

@@ -0,0 +1,16 @@
-- nvim-ufo folding keymaps
local ok_ufo, ufo = pcall(require, "ufo")
local keymap = vim.keymap.set
if ok_ufo then
keymap("n", "zR", ufo.openAllFolds, { desc = "Open all folds" })
keymap("n", "zM", ufo.closeAllFolds, { desc = "Close all folds" })
keymap("n", "zr", ufo.openFoldsExceptKinds, { desc = "Open folds except kinds" })
keymap("n", "zm", ufo.closeFoldsWith, { desc = "Close folds with" })
keymap("n", "K", function()
local winid = ufo.peekFoldedLinesUnderCursor()
if not winid then
vim.lsp.buf.hover()
end
end, { desc = "Peek fold or hover" })
end

View File

@@ -0,0 +1,16 @@
-- Window management keymaps
local keymap = vim.keymap
keymap.set("n", "<leader>sv", "<C-w>v", { desc = "Split window vertically" })
keymap.set("n", "<leader>sh", "<C-w>s", { desc = "Split window horizontally" })
keymap.set("n", "<leader>se", "<C-w>=", { desc = "Make splits equal size" })
keymap.set("n", "<leader>sx", "<cmd>close<CR>", { desc = "Close current split" })
keymap.set("n", "<leader>to", "<cmd>tabnew<CR>", { desc = "Open new tab" })
keymap.set("n", "<leader>tx", "<cmd>tabclose<CR>", { desc = "Close current tab" })
keymap.set("n", "<leader>tn", "<cmd>tabn<CR>", { desc = "Go to next tab" })
keymap.set("n", "<leader>tp", "<cmd>tabp<CR>", { desc = "Go to previous tab" })
keymap.set("n", "<leader>tf", "<cmd>tabnew %<CR>", { desc = "Open current buffer in new tab" })
keymap.set("n", "<C-l>", ":vertical resize -5<CR>", { noremap = true, silent = true })
keymap.set("n", "<C-h>", ":vertical resize +5<CR>", { noremap = true, silent = true })
keymap.set("n", "<C-k>", ":resize +5<CR>", { noremap = true, silent = true })
keymap.set("n", "<C-j>", ":resize -5<CR>", { noremap = true, silent = true })

View File

@@ -31,15 +31,38 @@ opt.softtabstop = 2 -- Number of spaces for soft tabs
opt.autoindent = true -- Auto indent opt.autoindent = true -- Auto indent
opt.smartindent = true -- Smart indent opt.smartindent = true -- Smart indent
-- Performance -- Performance optimizations
opt.lazyredraw = false -- Don't redraw while executing macros opt.updatetime = 100 -- Faster completion (reduced from 250)
opt.updatetime = 250 -- Faster completion opt.timeoutlen = 200 -- Faster key sequence completion (reduced from 300)
opt.timeoutlen = 300 -- Faster key sequence completion 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)
-- Syntax loading optimizations
opt.syntax = "on" -- Enable syntax highlighting
opt.synmaxcol = 200 -- Reduce syntax highlighting column limit
opt.lazyredraw = false -- Don't use lazy redraw (can cause issues)
opt.foldmethod = "syntax" -- Use syntax-based folding for better performance
opt.foldlevel = 99 -- Don't fold by default
-- Filetype plugin optimizations
opt.filetype = "on" -- Enable filetype detection
opt.modeline = false -- Disable modeline for security and performance
opt.modelines = 0 -- Disable modelines
-- Matchparen optimizations
g.matchparen_timeout = 100 -- Reduce from default 300ms
g.matchparen_insert_timeout = 50 -- Reduce from default 100ms
g.matchparen_disable_cursor_hl = 0 -- Keep cursor highlighting but optimize
-- UI settings -- UI settings
opt.number = true -- Show line numbers opt.number = true -- Show line numbers
opt.relativenumber = true -- Show relative 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.cursorcolumn = false -- Don't highlight current column
opt.signcolumn = "yes" -- Always show sign column opt.signcolumn = "yes" -- Always show sign column
@@ -70,8 +93,6 @@ opt.formatoptions:append("n") -- Recognize numbered lists
opt.formatoptions:append("j") -- Remove comment leader when joining lines opt.formatoptions:append("j") -- Remove comment leader when joining lines
-- Scroll settings for wrapped text -- 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.showmatch = true -- Show matching brackets
opt.matchtime = 2 -- How long to show matching brackets opt.matchtime = 2 -- How long to show matching brackets
@@ -87,6 +108,7 @@ opt.swapfile = false -- Don't create swap files
-- Terminal -- Terminal
opt.termguicolors = true -- Enable true color support opt.termguicolors = true -- Enable true color support
opt.background = "dark" -- Set background to dark
-- File encoding -- File encoding
opt.encoding = "utf-8" -- Set encoding to UTF-8 opt.encoding = "utf-8" -- Set encoding to UTF-8
@@ -103,16 +125,30 @@ opt.splitright = true -- Split right when creating vertical splits
-- Conceal -- Conceal
opt.conceallevel = 2 -- Conceal certain characters opt.conceallevel = 2 -- Conceal certain characters
-- Disable providers that cause warnings -- Provider configurations
g.loaded_perl_provider = 0 -- Disable Perl provider g.loaded_perl_provider = 0 -- Disable Perl provider
g.loaded_ruby_provider = 0 -- Disable Ruby provider (optional) g.loaded_ruby_provider = 0 -- Disable Ruby provider (optional)
-- Python provider configuration
g.python3_host_prog = "/opt/homebrew/bin/python3.12" -- Explicit Python path
-- Clipboard provider optimization (macOS)
g.clipboard = {
name = 'pbcopy',
copy = {
['+'] = 'pbcopy',
['*'] = 'pbcopy',
},
paste = {
['+'] = 'pbpaste',
['*'] = 'pbpaste',
},
cache_enabled = 1,
}
-- Lua specific settings -- Lua specific settings
opt.runtimepath:append(vim.fn.stdpath("config") .. "/lua") opt.runtimepath:append(vim.fn.stdpath("config") .. "/lua")
-- Improve performance for large files
opt.maxmempattern = 2000 -- Increase memory for pattern matching
-- Better diff -- Better diff
opt.diffopt:append("algorithm:patience") opt.diffopt:append("algorithm:patience")
opt.diffopt:append("indent-heuristic") opt.diffopt:append("indent-heuristic")
@@ -169,48 +205,37 @@ for _, plugin in pairs(disabled_built_ins) do
end end
-- ============================================================================= -- =============================================================================
-- AUTO WRAPPER AUTOCMDS -- OPTIMIZED AUTO WRAPPER AUTOCMDS
-- ============================================================================= -- =============================================================================
-- Set up auto-wrapping for different file types -- Consolidated auto-wrapping configuration
vim.api.nvim_create_autocmd("FileType", { vim.api.nvim_create_autocmd("FileType", {
pattern = { "text", "markdown", "gitcommit", "mail" }, pattern = "*",
callback = function() callback = function()
vim.opt_local.textwidth = 80 local filetype = vim.bo.filetype
vim.opt_local.wrap = true local opt = vim.opt_local
vim.opt_local.linebreak = true
vim.opt_local.formatoptions:append("t") -- Auto-wrap text -- Text/documentation files
end, if vim.tbl_contains({ "text", "markdown", "gitcommit", "mail", "help", "man" }, filetype) then
}) opt.textwidth = filetype == "help" or filetype == "man" and 78 or 80
opt.wrap = true
-- Set up auto-wrapping for code files opt.linebreak = true
vim.api.nvim_create_autocmd("FileType", { opt.formatoptions:append("t") -- Auto-wrap text
pattern = { "lua", "javascript", "typescript", "python", "java", "cpp", "c", "rust", "go" }, end
callback = function()
vim.opt_local.textwidth = 100 -- Longer lines for code -- Code files
vim.opt_local.formatoptions:append("c") -- Auto-wrap comments if vim.tbl_contains({ "lua", "javascript", "typescript", "python", "java", "cpp", "c", "rust", "go" }, filetype) then
vim.opt_local.formatoptions:append("r") -- Auto-wrap comments with leader opt.textwidth = 100 -- Longer lines for code
vim.opt_local.formatoptions:append("o") -- Auto-wrap comments with 'o' opt.formatoptions:append("c") -- Auto-wrap comments
vim.opt_local.formatoptions:append("q") -- Allow formatting of comments with 'gq' opt.formatoptions:append("r") -- Auto-wrap comments with leader
end, opt.formatoptions:append("o") -- Auto-wrap comments with 'o'
}) opt.formatoptions:append("q") -- Allow formatting of comments with 'gq'
end
-- Set up auto-wrapping for documentation files
vim.api.nvim_create_autocmd("FileType", { -- Configuration files
pattern = { "help", "man" }, if vim.tbl_contains({ "conf", "config", "ini", "toml", "yaml", "json" }, filetype) then
callback = function() opt.textwidth = 80
vim.opt_local.textwidth = 78 opt.formatoptions:append("c") -- Auto-wrap comments
vim.opt_local.wrap = true end
vim.opt_local.linebreak = true
vim.opt_local.formatoptions:append("t") -- Auto-wrap text
end,
})
-- Set up auto-wrapping for configuration files
vim.api.nvim_create_autocmd("FileType", {
pattern = { "conf", "config", "ini", "toml", "yaml", "json" },
callback = function()
vim.opt_local.textwidth = 80
vim.opt_local.formatoptions:append("c") -- Auto-wrap comments
end, end,
}) })

View File

@@ -1,56 +0,0 @@
-- return {
-- {
-- "yetone/avante.nvim",
-- event = "VeryLazy",
-- lazy = false,
-- version = false, -- Always pull the latest change
-- opts = {
-- provider = "cargdev", -- API provider configuration
-- providers = {
-- cargdev = {
-- name = "cargdev", -- Optional
-- endpoint = "https://api-ai.cargdev.io", -- API endpoint
-- api_key_name = "CARGDEV_API_KEY", -- reference the ENV VAR below
-- model = "deepseek-r1:latest",
-- __inherited_from = "ollama", -- ensures compatibility
-- max_tokens = 8192,
-- },
-- },
-- },
-- -- Optional: Build from source if required
-- build = "make",
-- dependencies = {
-- "nvim-treesitter/nvim-treesitter", -- Syntax highlighting support
-- "stevearc/dressing.nvim", -- UI elements
-- "nvim-lua/plenary.nvim", -- Utility library
-- "MunifTanjim/nui.nvim", -- UI library for modal components
-- -- Optional dependencies:
-- "nvim-tree/nvim-web-devicons", -- Icons support
-- "zbirenbaum/copilot.lua", -- Copilot integration
-- {
-- "HakonHarnes/img-clip.nvim", -- Image pasting support
-- event = "VeryLazy",
-- opts = {
-- -- Recommended settings
-- default = {
-- embed_image_as_base64 = false,
-- prompt_for_file_name = false,
-- drag_and_drop = {
-- insert_mode = true,
-- },
-- use_absolute_path = true, -- For Windows users
-- },
-- },
-- },
-- {
-- "MeanderingProgrammer/render-markdown.nvim",
-- ft = { "markdown", "Avante" },
-- config = function()
-- require("render-markdown").setup({
-- file_types = { "markdown", "Avante" },
-- })
-- end,
-- },
-- },
-- },
-- }

View File

@@ -18,7 +18,7 @@ return {
" ", " ",
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ", " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ", " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██ ", " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██ ",
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ", " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ", " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ", " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
@@ -27,14 +27,21 @@ return {
" 🚀 Welcome to CarGDev Neovim - Customize Your Flow! 🚀 ", " 🚀 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.section.buttons.val = {
dashboard.button("e", "📜 New File", "<cmd>ene<CR>"), dashboard.button("f", "🔎 Find File (Safe)", "<cmd>Telescope find_files<CR>"),
dashboard.button("SPC ee", "📂 File Explorer", "<cmd>NvimTreeToggle<CR>"), dashboard.button("n", "📄 New File", "<cmd>ene<CR>"),
dashboard.button("SPC ff", "🔎 Find File", "<cmd>Telescope find_files<CR>"), dashboard.button("g", "📝 Find Text", "<cmd>Telescope live_grep<CR>"),
dashboard.button("SPC fs", "📝 Find Word", "<cmd>Telescope live_grep<CR>"), dashboard.button("r", "📚 Recent Files", "<cmd>Telescope oldfiles<CR>"),
dashboard.button("SPC wr", "💾 Restore Session", "<cmd>SessionRestore<CR>"), dashboard.button("t", "🌳 File Tree", "<cmd>NvimTreeToggle<CR>"),
dashboard.button("q", "❌ Quit NVIM", "<cmd>qa<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>"),
} }
-- 🎯 Function to center text within a width -- 🎯 Function to center text within a width

View File

@@ -50,7 +50,11 @@ return {
statuscolumn = { enabled = true }, statuscolumn = { enabled = true },
terminal = { enabled = true }, terminal = { enabled = true },
toggle = { 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 -- Set up vim.ui.input and vim.ui.select for snacks

View File

@@ -1,55 +1,11 @@
return { return {
"folke/tokyonight.nvim", "CarGDev/cargdev-cyberpunk",
name = "cargdev-cyberpunk",
lazy = false,
priority = 1000, priority = 1000,
config = function() config = function()
local transparent = false -- set to true if you would like to enable transparency vim.opt.termguicolors = true
vim.opt.background = "dark"
local bg = "#011628" require("cargdev-cyberpunk").setup()
local bg_dark = "#011423"
local bg_highlight = "#143652"
local bg_search = "#0A64AC"
local bg_visual = "#275378"
local fg = "#CBE0F0"
local fg_dark = "#B4D0E9"
local fg_gutter = "#627E97"
local border = "#547998"
-- local bg = "#1A1A2E"
-- local bg_dark = "#29294B"
-- local bg_highlight = "#4E4E50"
-- local bg_search = "#1A1743"
-- local bg_visual = "#70707E"
-- local fg = "#BFC5D2"
-- local fg_dark = "#B4D0E9"
-- local fg_gutter = "#627E97"
-- local border = "#687494"
require("tokyonight").setup({
style = "night",
transparent = transparent,
styles = {
sidebars = transparent and "transparent" or "dark",
floats = transparent and "transparent" or "dark",
},
on_colors = function(colors)
colors.bg = bg
colors.bg_dark = transparent and colors.none or bg_dark
colors.bg_float = transparent and colors.none or bg_dark
colors.bg_highlight = bg_highlight
colors.bg_popup = bg_dark
colors.bg_search = bg_search
colors.bg_sidebar = transparent and colors.none or bg_dark
colors.bg_statusline = transparent and colors.none or bg_dark
colors.bg_visual = bg_visual
colors.border = border
colors.fg = fg
colors.fg_dark = fg_dark
colors.fg_float = fg
colors.fg_gutter = fg_gutter
colors.fg_sidebar = fg_dark
end,
})
vim.cmd("colorscheme tokyonight")
end, end,
} }

View File

@@ -11,6 +11,7 @@ return {
local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim") local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim")
-- enable comment -- enable comment
comment.setup({ comment.setup({
-- for commenting tsx, jsx, svelte, html files -- for commenting tsx, jsx, svelte, html files
pre_hook = ts_context_commentstring.create_pre_hook(), pre_hook = ts_context_commentstring.create_pre_hook(),

View File

@@ -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",
-- },
-- }
-- }
--

View File

@@ -1,75 +0,0 @@
return {
{
-- Main Copilot plugin
"zbirenbaum/copilot.lua",
lazy = false, -- Load at startup
enabled = true,
config = function()
require("copilot").setup({
-- General settings
panel = {
enabled = true,
auto_refresh = false,
keymap = {
jump_prev = "[[",
jump_next = "]]",
accept = "<CR>",
refresh = "gr",
},
layout = {
position = "bottom", -- | top | left | right | horizontal | vertical
ratio = 0.4,
},
},
suggestion = {
enabled = true,
auto_trigger = true,
debounce = 75,
trigger_on_accept = false,
keymap = {
accept = "<C-l>", -- Accept suggestion
next = "<C-j>", -- Next suggestion
prev = "<C-k>", -- Previous suggestion
dismiss = "<C-x>", -- Dismiss suggestion
},
},
filetypes = {
markdown = true,
["*"] = true, -- Enable for all filetypes
},
copilot_node_command = "node", -- Ensure your system's Node.js is v20+
})
end,
},
{
-- Copilot Chat plugin
"CopilotC-Nvim/CopilotChat.nvim",
dependencies = {
{ "zbirenbaum/copilot.lua" },
{ "nvim-lua/plenary.nvim", branch = "master" }, -- For curl, log and async functions
},
build = "make tiktoken", -- Only on MacOS or Linux
opts = {
layout = {
position = "right", -- Position of the chat window
ratio = 0.5,
},
tiktoken = {
enabled = false, -- Enable token counting
},
floating = {
enabled = true,
border = "rounded",
},
prompts = {
Rename = {
prompt = "Please rename the variable correctly in given selection based on context",
selection = function(source)
local select = require("CopilotChat.select")
return select.visual(source)
end,
},
},
},
},
}

View File

@@ -0,0 +1,44 @@
return {
"CarGDev/rest.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
opts.ensure_installed = opts.ensure_installed or {}
table.insert(opts.ensure_installed, "http")
end,
},
config = function()
-- Basic configuration for rest.nvim
vim.g.rest_nvim = {
-- Enable request highlighting
highlight = {
enable = true,
timeout = 750,
},
-- Enable response formatting
response = {
hooks = {
format = true,
decode_url = true,
},
},
-- Enable cookies
cookies = {
enable = true,
},
-- Enable environment variables
env = {
enable = true,
pattern = ".*%.env.*",
},
-- UI configuration
ui = {
winbar = true,
keybinds = {
prev = "H",
next = "L",
},
},
}
end,
}

View File

@@ -1,5 +1,7 @@
return { return {
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
event = "VeryLazy", -- Changed from immediate loading to lazy loading
cmd = { "Dap", "DapUI", "DapContinue", "DapToggleBreakpoint" }, -- Load on command
dependencies = { dependencies = {
{ "nvim-neotest/nvim-nio", lazy = false }, { "nvim-neotest/nvim-nio", lazy = false },
"rcarriga/nvim-dap-ui", "rcarriga/nvim-dap-ui",
@@ -9,6 +11,7 @@ return {
"Weissle/persistent-breakpoints.nvim", "Weissle/persistent-breakpoints.nvim",
{ {
"nvim-neotest/neotest", "nvim-neotest/neotest",
event = "VeryLazy",
dependencies = { dependencies = {
"nvim-neotest/neotest-jest", "nvim-neotest/neotest-jest",
"nvim-neotest/neotest-python", "nvim-neotest/neotest-python",
@@ -74,7 +77,7 @@ return {
-- 🧠 Mason DAP -- 🧠 Mason DAP
require("mason-nvim-dap").setup({ require("mason-nvim-dap").setup({
ensure_installed = { "node2", "chrome", "firefox" }, ensure_installed = { "js-debug-adapter", "firefox" },
automatic_setup = true, automatic_setup = true,
}) })
@@ -112,29 +115,6 @@ return {
dapui.close() dapui.close()
end end
-- 🎮 Keymaps
keymap("n", "<leader>dc", dap.continue, { desc = "▶ Start Debugging" })
keymap("n", "<leader>do", dap.step_over, { desc = "⏭ Step Over" })
keymap("n", "<leader>di", dap.step_into, { desc = "⤵ Step Into" })
keymap("n", "<leader>dot", dap.step_out, { desc = "⤴ Step Out" })
keymap("n", "<leader>db", dap.toggle_breakpoint, { desc = "🔴 Toggle Breakpoint" })
keymap("n", "<leader>dB", function()
dap.set_breakpoint(fn.input("Breakpoint condition: "))
end, { desc = "⚠ Conditional Breakpoint" })
keymap("n", "<leader>dr", dap.repl.open, { desc = "💬 Open REPL" })
keymap("n", "<leader>dl", dap.run_last, { desc = "🔁 Run Last Debug" })
keymap("n", "<leader>du", dapui.toggle, { desc = "🧩 Toggle DAP UI" })
keymap("n", "<leader>dq", dap.terminate, { desc = "⛔ Stop Debugging" })
-- 🧼 Reset UI
keymap("n", "<leader>drt", function()
dap.terminate()
dapui.close()
vim.defer_fn(function()
dapui.open()
end, 200)
end, { desc = "🧼 Reset DAP UI Layout" })
-- 🧿 Sign Icons -- 🧿 Sign Icons
for name, icon in pairs({ for name, icon in pairs({
DapBreakpoint = "🔴", DapBreakpoint = "🔴",
@@ -173,19 +153,20 @@ return {
}, },
} }
-- 🧠 Node.js (NestJS / TypeScript) -- 🧠 Node.js (NestJS / TypeScript) - Using js-debug-adapter
dap.adapters.node2 = { dap.adapters.node = {
type = "executable", type = "executable",
command = "node", command = "node",
args = { args = {
os.getenv("HOME") .. "/.local/share/nvim/mason/packages/node-debug2-adapter/out/src/nodedebug.js", os.getenv("HOME") .. "/.local/share/nvim/mason/packages/js-debug-adapter/js-debug/src/dapDebugServer.js",
"${port}",
}, },
} }
dap.configurations.typescript = { dap.configurations.typescript = {
{ {
name = "Launch NestJS", name = "Launch NestJS",
type = "node2", type = "node",
request = "launch", request = "launch",
program = "${workspaceFolder}/dist/main.js", program = "${workspaceFolder}/dist/main.js",
args = {}, args = {},
@@ -199,7 +180,7 @@ return {
}, },
{ {
name = "Attach to NestJS (start:debug)", name = "Attach to NestJS (start:debug)",
type = "node2", type = "node",
request = "attach", request = "attach",
port = 9229, port = 9229,
protocol = "inspector", protocol = "inspector",
@@ -209,5 +190,8 @@ return {
skipFiles = { "<node_internals>/**" }, skipFiles = { "<node_internals>/**" },
}, },
} }
-- Also add JavaScript configurations
dap.configurations.javascript = dap.configurations.typescript
end, end,
} }

View File

@@ -1,187 +0,0 @@
-- Temporarily disabled to fix database error
-- return {
-- -- =============================================================================
-- -- DATABASE PLUGINS
-- -- =============================================================================
-- -- Database client for Neovim
-- {
-- "tpope/vim-dadbod",
-- dependencies = {
-- "kristijanhusak/vim-dadbod-ui",
-- "kristijanhusak/vim-dadbod-completion",
-- },
-- config = function()
-- -- Dadbod UI configuration
-- vim.g.db_ui_use_nerd_fonts = 1
-- vim.g.db_ui_winwidth = 30
-- vim.g.db_ui_winposition = "right"
-- vim.g.db_ui_show_help = 0
-- vim.g.db_ui_auto_execute_table_helpers = 1
-- -- Disable auto-connection to prevent errors
-- vim.g.db_ui_auto_execute_table_helpers = 0
-- vim.g.db_ui_show_database_icon = 0
-- vim.g.db_ui_winwidth = 30
-- vim.g.db_ui_winposition = "right"
-- vim.g.db_ui_use_nerd_fonts = 1
-- vim.g.db_ui_show_help = 0
-- -- Disable automatic database loading
-- vim.g.db_ui_auto_execute_table_helpers = 0
-- vim.g.db_ui_show_database_icon = 0
-- vim.g.db_ui_auto_execute_table_helpers = 0
-- vim.g.db_ui_show_database_icon = 0
-- vim.g.db_ui_table_helpers = {
-- sqlite = {
-- count = "SELECT COUNT(*) FROM {table}",
-- explain = "EXPLAIN QUERY PLAN {last_query}",
-- indexes = "PRAGMA index_list({table})",
-- show = "PRAGMA table_info({table})",
-- size = "SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size() WHERE name = '{table}'",
-- },
-- mysql = {
-- count = "SELECT COUNT(*) FROM {table}",
-- explain = "EXPLAIN {last_query}",
-- indexes = "SHOW INDEX FROM {table}",
-- show = "SHOW CREATE TABLE {table}",
-- size = "SELECT ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = '{database}' AND table_name = '{table}'",
-- },
-- postgresql = {
-- count = "SELECT COUNT(*) FROM {table}",
-- explain = "EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) {last_query}",
-- indexes = "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '{table}'",
-- show = "\\d {table}",
-- size = "SELECT pg_size_pretty(pg_total_relation_size('{table}'))",
-- },
-- redis = {
-- count = "LLEN {table}",
-- explain = "SLOWLOG GET 10",
-- indexes = "KEYS *",
-- show = "TYPE {table}",
-- size = "MEMORY USAGE {table}",
-- },
-- }
-- -- Dadbod completion
-- vim.g.vim_dadbod_completion_mark = "📊"
-- -- Configure database adapters
-- vim.g.db_adapter_sqlite = 'sqlite3'
-- vim.g.db_adapter_mysql = 'mysql'
-- vim.g.db_adapter_postgresql = 'psql'
-- vim.g.db_adapter_redis = 'redis-cli'
-- -- Disable automatic database connections
-- vim.g.db_ui_auto_execute_table_helpers = 0
-- vim.g.db_ui_show_database_icon = 0
-- end,
-- },
-- -- SQL formatting and syntax highlighting
-- {
-- "b4winckler/vim-objc",
-- ft = { "sql", "mysql", "postgresql" },
-- },
-- -- SQL formatting with sqlparse
-- {
-- "b4winckler/vim-objc",
-- ft = { "sql" },
-- config = function()
-- vim.g.sqlformat_command = "sqlformat"
-- vim.g.sqlformat_options = "-r -k upper"
-- end,
-- },
-- }
-- Return empty table to prevent errors
return {
-- =============================================================================
-- DATABASE PLUGINS
-- =============================================================================
-- Database client for Neovim
{
"tpope/vim-dadbod",
dependencies = {
"kristijanhusak/vim-dadbod-ui",
"kristijanhusak/vim-dadbod-completion",
},
config = function()
-- Disable all automatic database operations
vim.g.db_ui_auto_execute_table_helpers = 0
vim.g.db_ui_show_database_icon = 0
vim.g.db_ui_use_nerd_fonts = 1
vim.g.db_ui_winwidth = 30
vim.g.db_ui_winposition = "right"
vim.g.db_ui_show_help = 0
-- Disable automatic database loading completely
vim.g.db_ui_auto_execute_table_helpers = 0
vim.g.db_ui_show_database_icon = 0
-- Configure table helpers (only used when manually triggered)
vim.g.db_ui_table_helpers = {
sqlite = {
count = "SELECT COUNT(*) FROM {table}",
explain = "EXPLAIN QUERY PLAN {last_query}",
indexes = "PRAGMA index_list({table})",
show = "PRAGMA table_info({table})",
size = "SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size() WHERE name = '{table}'",
},
mysql = {
count = "SELECT COUNT(*) FROM {table}",
explain = "EXPLAIN {last_query}",
indexes = "SHOW INDEX FROM {table}",
show = "SHOW CREATE TABLE {table}",
size = "SELECT ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = '{database}' AND table_name = '{table}'",
},
postgresql = {
count = "SELECT COUNT(*) FROM {table}",
explain = "EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) {last_query}",
indexes = "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '{table}'",
show = "\\d {table}",
size = "SELECT pg_size_pretty(pg_total_relation_size('{table}'))",
},
redis = {
count = "LLEN {table}",
explain = "SLOWLOG GET 10",
indexes = "KEYS *",
show = "TYPE {table}",
size = "MEMORY USAGE {table}",
},
}
-- Dadbod completion
vim.g.vim_dadbod_completion_mark = "📊"
-- Configure database adapters
vim.g.db_adapter_sqlite = 'sqlite3'
vim.g.db_adapter_mysql = 'mysql'
vim.g.db_adapter_postgresql = 'psql'
vim.g.db_adapter_redis = 'redis-cli'
-- Ensure no automatic connections
vim.g.db_ui_auto_execute_table_helpers = 0
vim.g.db_ui_show_database_icon = 0
end,
},
-- SQL formatting and syntax highlighting
{
"b4winckler/vim-objc",
ft = { "sql", "mysql", "postgresql" },
},
-- SQL formatting with sqlparse
{
"b4winckler/vim-objc",
ft = { "sql" },
config = function()
vim.g.sqlformat_command = "sqlformat"
vim.g.sqlformat_options = "-r -k upper"
end,
},
}

View File

@@ -0,0 +1,8 @@
return {
"akinsho/flutter-tools.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"stevearc/dressing.nvim",
},
config = true,
}

View File

@@ -29,6 +29,10 @@ return {
liquid = { "prettier" }, liquid = { "prettier" },
lua = { "stylua" }, lua = { "stylua" },
python = { "isort", "black" }, python = { "isort", "black" },
c = { "clang_format" },
cpp = { "clang_format" },
cxx = { "clang_format" },
hpp = { "clang_format" },
dbml = { "dbml" }, -- DBML formatting dbml = { "dbml" }, -- DBML formatting
sql = { "sqlfluff" }, -- SQL formatting sql = { "sqlfluff" }, -- SQL formatting
}, },

View File

@@ -1,5 +1,4 @@
return { return {
--[[dir = "/Volumes/Carlos_SSD/Documents/projects/ideaDrop",]]
"CarGDev/ideadrop.nvim", "CarGDev/ideadrop.nvim",
name = "ideaDrop", name = "ideaDrop",
dependencies = { dependencies = {
@@ -8,7 +7,7 @@ return {
}, },
config = function() config = function()
require("ideaDrop").setup({ require("ideaDrop").setup({
idea_dir = "/Users/carlos/Nextcloud/ObsidianVault", idea_dir = vim.env.IDEA_DIR,
}) })
-- Set up convenient keymaps for ideaDrop -- Set up convenient keymaps for ideaDrop

View File

@@ -3,6 +3,16 @@ return {
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPre", "BufNewFile" },
main = "ibl", main = "ibl",
opts = { opts = {
indent = { char = "" }, indent = {
char = "",
},
exclude = {
filetypes = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" },
buftypes = { "terminal", "nofile", "quickfix", "prompt" },
},
scope = {
enabled = false
},
}, },
} }

View File

@@ -1,504 +0,0 @@
return {
dir = "/Users/carlos/Documents/SSD_Documents/projects/intellij.nvim",
dependencies = {
"mfussenegger/nvim-jdtls", -- Java Language Server Protocol
"mfussenegger/nvim-dap", -- Debug Adapter Protocol
"rcarriga/nvim-dap-ui", -- DAP UI components
"akinsho/toggleterm.nvim", -- Terminal integration
"nvim-telescope/telescope.nvim", -- For command palette search
},
config = function()
require("intellij").setup({
-- Theme configuration
theme = "inherit", -- or "light", "dark"
-- Enable verbose logging for debugging
verbose_logging = false,
-- Automatically toggle auto-open main file on start
auto_open_main_on_start = true,
-- Custom actions for your workflow
custom_actions = {
{
name = "Open Project in IntelliJ IDEA",
action = function()
vim.fn.system("idea .")
vim.notify("Opening project in IntelliJ IDEA...")
end
},
{
name = "Open in VS Code",
action = function()
vim.fn.system("code .")
vim.notify("Opening project in VS Code...")
end
},
{
name = "Git Status",
action = function()
require("toggleterm").exec("git status", 1, 12, "float")
end
},
{
name = "Git Log",
action = function()
require("toggleterm").exec("git log --oneline -10", 1, 12, "float")
end
}
},
-- Keymaps for quick access
keymaps = {
n = {
["<leader>jp"] = function() require('intellij').show_palette() end,
["<leader>jd"] = function() require('intellij').show_startup_diagnostics() end,
["<leader>jr"] = function() require('intellij').reload() end,
["<leader>jv"] = function() require('intellij').toggle_verbose_logging() end,
},
v = {
["<leader>jt"] = function()
local start_line = vim.fn.line("'<")
local end_line = vim.fn.line("'>")
require("toggleterm").exec("mvn test -Dtest=*#" .. start_line .. "_" .. end_line, 1, 12, "float")
end
}
},
-- Project-specific commands based on project type
project_commands = function(project_type)
local commands = {}
if project_type == "spring-boot" then
table.insert(commands, {
name = "Spring Boot DevTools",
action = function()
require("toggleterm").exec("mvn spring-boot:run -Dspring-boot.run.profiles=dev", 1, 12, "float")
end
})
table.insert(commands, {
name = "Spring Boot Actuator Health",
action = function()
require("toggleterm").exec("curl -s http://localhost:8080/actuator/health | jq", 1, 12, "float")
end
})
end
if project_type == "maven" then
table.insert(commands, {
name = "Maven Dependency Tree",
action = function()
require("toggleterm").exec("mvn dependency:tree", 1, 12, "float")
end
})
table.insert(commands, {
name = "Maven Clean Install",
action = function()
require("toggleterm").exec("mvn clean install", 1, 12, "float")
end
})
end
if project_type == "gradle" then
table.insert(commands, {
name = "Gradle Dependencies",
action = function()
require("toggleterm").exec("./gradlew dependencies", 1, 12, "float")
end
})
table.insert(commands, {
name = "Gradle Clean Build",
action = function()
require("toggleterm").exec("./gradlew clean build", 1, 12, "float")
end
})
end
return commands
end
})
-- Register hooks for additional functionality
require("intellij").register_hook("actions", function(project_type)
local hooks = {}
-- Add recent files action
table.insert(hooks, {
name = "Recent Java Files",
action = function()
local recent_files = require("intellij").get_recent_java_files()
if #recent_files > 0 then
vim.ui.select(recent_files, { prompt = "Recent Java Files:" }, function(choice)
if choice then
local ok, _ = pcall(vim.cmd, "edit " .. choice)
if not ok then
vim.notify("Could not open file: " .. choice, vim.log.levels.WARN, { title = "intellij.nvim" })
end
end
end)
else
vim.notify("No recent Java files found")
end
end
})
return hooks
end)
-- AUTOMATIC JAVA PROJECT DETECTION AND STARTUP
local function find_main_java_files()
local actions = require("intellij.actions")
local configs = actions.get_run_configs()
return configs and configs.mains or {}
end
local function is_main_file_open()
local current_file = vim.api.nvim_buf_get_name(0)
local main_files = find_main_java_files()
for _, main_file in ipairs(main_files) do
if current_file:match(main_file:gsub("%.", "/") .. "%.java$") then
return true
end
end
return false
end
local function open_first_main_file()
local main_files = find_main_java_files()
if #main_files > 0 then
-- Try to find the main file in the project
local project_root = vim.loop.cwd()
local found_file = nil
-- Debug: show what we're looking for
vim.notify("Looking for main files: " .. table.concat(main_files, ", "), vim.log.levels.INFO, { title = "intellij.nvim" })
for _, main_class in ipairs(main_files) do
local file_path
if main_class:match("%.java$") then
file_path = main_class:gsub("^%./", "")
else
file_path = main_class:gsub("%.", "/") .. ".java"
end
local possible_paths = {
project_root .. "/" .. file_path,
project_root .. "/src/main/java/" .. file_path,
project_root .. "/src/java/" .. file_path,
project_root .. "/src/" .. file_path,
project_root .. "/app/src/main/java/" .. file_path,
project_root .. "/main/java/" .. file_path,
}
for _, full_path in ipairs(possible_paths) do
if vim.fn.filereadable(full_path) == 1 then
found_file = full_path
vim.notify("Found main file at: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" })
break
end
end
if found_file then
break
end
end
if found_file then
local ok, _ = pcall(vim.cmd, "edit " .. found_file)
if ok then
vim.notify("Opened main file: " .. found_file, vim.log.levels.INFO, { title = "intellij.nvim" })
else
vim.notify("Could not open main file: " .. found_file, vim.log.levels.WARN, { title = "intellij.nvim" })
end
return true
else
-- Use telescope for better selection if available
local function select_with_telescope(items, prompt, cb)
local ok, telescope = pcall(require, 'telescope.builtin')
if ok then
telescope.find_files({
prompt_title = prompt,
find_command = { 'echo', table.concat(items, '\n') },
attach_mappings = function(_, map)
require('telescope.actions').select_default:replace(function()
local entry = require('telescope.actions.state').get_selected_entry()
cb(entry.value)
require('telescope.actions').close(_)
end)
return true
end,
})
else
vim.ui.select(items, { prompt = prompt }, cb)
end
end
vim.notify("Could not automatically find main files. Showing selection dialog.", vim.log.levels.WARN, { title = "intellij.nvim" })
select_with_telescope(main_files, "Select main class to open:", function(choice)
if choice then
local file_path
if choice:match("%.java$") then
file_path = choice:gsub("^%./", "")
else
file_path = choice:gsub("%.", "/") .. ".java"
end
local possible_paths = {
project_root .. "/" .. file_path,
project_root .. "/src/main/java/" .. file_path,
project_root .. "/src/java/" .. file_path,
project_root .. "/src/" .. file_path,
project_root .. "/app/src/main/java/" .. file_path,
project_root .. "/main/java/" .. file_path,
}
local found = false
for _, full_path in ipairs(possible_paths) do
if vim.fn.filereadable(full_path) == 1 then
local ok, _ = pcall(vim.cmd, "edit " .. full_path)
if ok then
vim.notify("Opened main file: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" })
else
vim.notify("Could not open main file: " .. full_path, vim.log.levels.WARN, { title = "intellij.nvim" })
end
found = true
break
end
end
if not found then
vim.notify("Could not find main file for: " .. choice .. "\nTried paths:\n" .. table.concat(possible_paths, "\n"), vim.log.levels.WARN, { title = "intellij.nvim" })
end
end
end)
return true
end
else
vim.notify("No main files found in project", vim.log.levels.WARN, { title = "intellij.nvim" })
end
return false
end
local function detect_and_start_java_project()
-- Prevent duplicate detection
if vim.b.java_project_detected then
return true
end
local actions = require("intellij.actions")
local project_type = actions.detect_project_type()
if project_type then
-- Store project info in buffer variables
vim.b.java_project_type = project_type
vim.b.java_project_detected = true
-- Get JDK and environment info
local jdk_info = actions.get_jdk_info()
local env_info = actions.get_env_info()
-- Show project detection notification (only once)
local jdk_version = jdk_info and jdk_info.jdk_version or "unknown"
vim.notify(
string.format("Java project detected: %s (JDK: %s)", project_type, jdk_version),
vim.log.levels.INFO,
{ title = "intellij.nvim", timeout = 3000 }
)
-- Auto-start Java LSP if available (only if not already started)
if pcall(require, 'jdtls') and not vim.lsp.get_active_clients({ name = 'jdtls' })[1] then
vim.defer_fn(function()
-- Try to start LSP safely with error handling
local ok, result = pcall(vim.cmd, "LspStart jdtls")
if ok then
vim.notify("Java LSP started", vim.log.levels.INFO, { title = "intellij.nvim" })
-- Add error handler for LSP semantic tokens issues
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client and client.name == "jdtls" then
-- Disable semantic tokens if they cause issues
client.server_capabilities.semanticTokensProvider = nil
end
end,
})
else
vim.notify("Java LSP could not be started automatically", vim.log.levels.WARN, { title = "intellij.nvim" })
end
end, 1000)
end
-- Auto-compile project on detection (optional)
if vim.g.auto_compile_java_projects then
vim.defer_fn(function()
if project_type == "maven" then
require("toggleterm").exec("mvn compile", 1, 12, "float")
elseif project_type == "gradle" then
require("toggleterm").exec("./gradlew compileJava", 1, 12, "float")
end
end, 2000)
end
-- Auto-open main file if not already open
if vim.g.auto_open_main_file and not is_main_file_open() then
vim.defer_fn(function()
open_first_main_file()
end, 1500)
end
return true
end
return false
end
-- Set up autocommands for automatic detection (with debouncing)
local detection_timer = nil
local function debounced_detection()
if detection_timer then
vim.loop.timer_stop(detection_timer)
end
detection_timer = vim.defer_fn(detect_and_start_java_project, 100)
end
vim.api.nvim_create_autocmd("FileType", {
pattern = { "java" },
callback = function()
-- Auto-detect project type when opening Java files
debounced_detection()
end
})
-- Auto-detect when entering directories with Java project files
vim.api.nvim_create_autocmd("DirChanged", {
pattern = "*",
callback = function()
-- Check if we're in a Java project directory
if vim.fn.filereadable("pom.xml") == 1 or
vim.fn.filereadable("build.gradle") == 1 or
vim.fn.filereadable("build.gradle.kts") == 1 then
debounced_detection()
end
end
})
-- Auto-detect when opening files in Java project directories
vim.api.nvim_create_autocmd("BufRead", {
pattern = "*",
callback = function()
local cwd = vim.loop.cwd()
if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or
vim.fn.filereadable(cwd .. "/build.gradle") == 1 or
vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then
debounced_detection()
end
end
})
-- Auto-detect when VimEnter (when Neovim starts)
vim.api.nvim_create_autocmd("VimEnter", {
pattern = "*",
callback = function()
-- Check if we started in a Java project directory
local cwd = vim.loop.cwd()
if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or
vim.fn.filereadable(cwd .. "/build.gradle") == 1 or
vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then
vim.defer_fn(detect_and_start_java_project, 500)
end
end
})
-- Global variable to control auto-compilation
vim.g.auto_compile_java_projects = true
-- Global variable to control auto-opening main files
vim.g.auto_open_main_file = true
-- Add command to toggle auto-compilation
vim.api.nvim_create_user_command("ToggleJavaAutoCompile", function()
vim.g.auto_compile_java_projects = not vim.g.auto_compile_java_projects
vim.notify(
"Java auto-compilation " .. (vim.g.auto_compile_java_projects and "enabled" or "disabled"),
vim.log.levels.INFO,
{ title = "intellij.nvim" }
)
end, {})
-- Add command to clean up cache and temporary files
vim.api.nvim_create_user_command("IntelliJCleanup", function()
require("intellij").cleanup()
end, {})
-- Add command to toggle auto-opening main files
vim.api.nvim_create_user_command("ToggleJavaAutoOpenMain", function()
vim.g.auto_open_main_file = not vim.g.auto_open_main_file
vim.notify(
"Java auto-open main file " .. (vim.g.auto_open_main_file and "enabled" or "disabled"),
vim.log.levels.INFO,
{ title = "intellij.nvim" }
)
end, {})
-- Add command to manually open main file
vim.api.nvim_create_user_command("OpenJavaMainFile", function()
if open_first_main_file() then
vim.notify("Main file opened", vim.log.levels.INFO, { title = "intellij.nvim" })
else
vim.notify("No main file found in current project", vim.log.levels.WARN, { title = "intellij.nvim" })
end
end, {})
-- Add command to debug file search
vim.api.nvim_create_user_command("DebugJavaFileSearch", function()
local actions = require("intellij.actions")
local configs = actions.get_run_configs()
vim.notify("=== Java File Search Debug ===", vim.log.levels.INFO, { title = "intellij.nvim" })
vim.notify("Project root: " .. vim.loop.cwd(), vim.log.levels.INFO, { title = "intellij.nvim" })
if configs and configs.mains then
vim.notify("Found main classes: " .. table.concat(configs.mains, ", "), vim.log.levels.INFO, { title = "intellij.nvim" })
for _, main_class in ipairs(configs.mains) do
local file_path = main_class:gsub("%.", "/") .. ".java"
local project_root = vim.loop.cwd()
local possible_paths = {
project_root .. "/src/main/java/" .. file_path,
project_root .. "/src/java/" .. file_path,
project_root .. "/src/" .. file_path,
project_root .. "/" .. file_path,
project_root .. "/app/src/main/java/" .. file_path,
project_root .. "/main/java/" .. file_path,
}
vim.notify("Searching for: " .. main_class, vim.log.levels.INFO, { title = "intellij.nvim" })
for _, path in ipairs(possible_paths) do
local exists = vim.fn.filereadable(path) == 1
vim.notify(" " .. path .. " -> " .. (exists and "EXISTS" or "NOT FOUND"), vim.log.levels.INFO, { title = "intellij.nvim" })
end
end
else
vim.notify("No main classes found", vim.log.levels.WARN, { title = "intellij.nvim" })
end
end, {})
-- Add command to manually detect Java project
vim.api.nvim_create_user_command("DetectJavaProject", function()
if detect_and_start_java_project() then
vim.notify("Java project detection completed", vim.log.levels.INFO, { title = "intellij.nvim" })
else
vim.notify("No Java project detected in current directory", vim.log.levels.WARN, { title = "intellij.nvim" })
end
end, {})
-- Check for config flag to auto-toggle main file opening
if type(require("intellij").opts) == "table" and require("intellij").opts.auto_open_main_on_start then
vim.g.auto_open_main_file = true
end
end
}

View File

@@ -1,4 +1,5 @@
return { return {
--[[ dir = "/Users/carlos/Documents/SSD_Documents/projects/lazygit.nvim", ]]
"kdheepak/lazygit.nvim", "kdheepak/lazygit.nvim",
cmd = { cmd = {
"LazyGit", "LazyGit",

View File

@@ -1,6 +1,6 @@
return { return {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPost", "BufNewFile" },
dependencies = { dependencies = {
"hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-nvim-lsp",
{ "antosha417/nvim-lsp-file-operations", config = true }, { "antosha417/nvim-lsp-file-operations", config = true },
@@ -23,20 +23,17 @@ return {
"gopls", "gopls",
"graphql", "graphql",
"html", "html",
-- "jdtls", -- uncomment if you're actively doing Java
"lua_ls", "lua_ls",
"prismals", "prismals",
"pyright", "pyright",
"svelte", "svelte",
"tailwindcss", "tailwindcss",
-- Database language servers
"sqls", -- SQL language server
"mongols", -- MongoDB language server
}, },
}) })
local capabilities = cmp_nvim_lsp.default_capabilities() local capabilities = cmp_nvim_lsp.default_capabilities()
-- Enhanced error handling for LSP diagnostics
vim.diagnostic.config({ vim.diagnostic.config({
signs = { signs = {
severity = { severity = {
@@ -49,73 +46,144 @@ return {
Info = " ", 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 = { local servers = {
cssls = {}, cssls = {
settings = {
css = {
validate = true,
lint = { unknownAtRules = "ignore" }
}
}
},
emmet_ls = {}, emmet_ls = {},
eslint = {}, eslint = {
gopls = {}, settings = { workingDirectory = { mode = "auto" } }
graphql = {}, },
gopls = {
settings = {
gopls = {
analyses = { unusedparams = true },
staticcheck = true,
usePlaceholders = true
}
}
},
graphql = {},
html = {}, html = {},
-- jdtls = {}, -- same here
lua_ls = { lua_ls = {
settings = { settings = {
Lua = { Lua = {
diagnostics = { globals = { "vim" } }, diagnostics = { globals = { "vim" } },
workspace = { workspace = {
library = vim.api.nvim_get_runtime_file("", true), library = vim.api.nvim_get_runtime_file("", true),
checkThirdParty = false, checkThirdParty = false
}, },
telemetry = { enable = false },
hint = { enable = false },
}, },
}, },
}, },
prismals = {}, prismals = {},
pyright = {}, pyright = {
settings = {
python = {
analysis = {
typeCheckingMode = "basic",
autoImportCompletions = true
}
}
}
},
svelte = {}, svelte = {},
tailwindcss = {}, tailwindcss = {},
-- Database servers -- sqls = { settings = { sqls = { connections = { /* …your dbs… */ } } } }, -- optional
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,
},
},
},
} }
-- Set up all LSP servers -- Set up all LSP servers with performance optimizations and error handling
for server_name, server_config in pairs(servers) do for name, cfg in pairs(servers) do
lspconfig[server_name].setup({ lspconfig[name].setup({
capabilities = capabilities, 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 end
@@ -128,13 +196,52 @@ return {
capabilities = capabilities, capabilities = capabilities,
}) })
-- Set up TypeScript Tools -- Set up TypeScript Tools with performance optimizations and error handling
require("typescript-tools").setup({ require("typescript-tools").setup({
settings = { settings = {
tsserver_plugins = {}, tsserver_plugins = {},
tsserver_file_preferences = {}, tsserver_file_preferences = {},
tsserver_format_options = {}, 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, end,
} }

View File

@@ -4,6 +4,7 @@ return {
dependencies = { dependencies = {
"hrsh7th/cmp-buffer", -- source for text in buffer "hrsh7th/cmp-buffer", -- source for text in buffer
"hrsh7th/cmp-path", -- source for file system paths "hrsh7th/cmp-path", -- source for file system paths
"hrsh7th/cmp-nvim-lsp", -- LSP completion source
{ {
"L3MON4D3/LuaSnip", "L3MON4D3/LuaSnip",
-- follow latest release. -- follow latest release.
@@ -28,6 +29,9 @@ return {
cmp.setup({ cmp.setup({
completion = { completion = {
completeopt = "menu,menuone,preview,noselect", 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 snippet = { -- configure how nvim-cmp interacts with snippet engine
expand = function(args) expand = function(args)
@@ -46,10 +50,10 @@ return {
}), }),
-- sources for autocompletion -- sources for autocompletion
sources = cmp.config.sources({ sources = cmp.config.sources({
{ name = "nvim_lsp"}, { name = "nvim_lsp", priority = 1000},
{ name = "luasnip" }, -- snippets { name = "luasnip", priority = 750 }, -- snippets
{ name = "buffer" }, -- text within current buffer { name = "buffer", priority = 500, keyword_length = 3 }, -- text within current buffer
{ name = "path" }, -- file system paths { name = "path", priority = 250 }, -- file system paths
}), }),
-- configure lspkind for vs-code like pictograms in completion menu -- configure lspkind for vs-code like pictograms in completion menu
@@ -59,6 +63,27 @@ return {
ellipsis_char = "...", 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, end,
} }

View File

@@ -73,32 +73,32 @@ return {
-- File Management keybindings -- File Management keybindings
vim.keymap.set("n", "a", function() -- Add a new file vim.keymap.set("n", "a", function() -- Add a new file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.create() api.fs.create()
end, opts) end, opts)
vim.keymap.set("n", "r", function() -- Rename file vim.keymap.set("n", "r", function() -- Rename file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.rename() api.fs.rename()
end, opts) end, opts)
vim.keymap.set("n", "d", function() -- Delete file vim.keymap.set("n", "d", function() -- Delete file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.remove() api.fs.remove()
end, opts) end, opts)
vim.keymap.set("n", "x", function() -- Cut (move) file vim.keymap.set("n", "x", function() -- Cut (move) file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.cut() api.fs.cut()
end, opts) end, opts)
vim.keymap.set("n", "p", function() -- Paste file vim.keymap.set("n", "p", function() -- Paste file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.paste() api.fs.paste()
end, opts) end, opts)
vim.keymap.set("n", "y", function() -- Copy file vim.keymap.set("n", "y", function() -- Copy file
vim.cmd("set modifiable") -- Ensure modifiable mode is on vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
api.fs.copy.node() api.fs.copy.node()
end, opts) end, opts)
end, end,

View File

@@ -0,0 +1,27 @@
return {
"nvim-treesitter/nvim-treesitter-context",
dependencies = { "nvim-treesitter/nvim-treesitter" },
event = { "BufReadPre", "BufNewFile" },
opts = {
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
max_lines = 10, -- How many lines the window should span. Values <= 0 mean no limit.
min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
line_numbers = true,
multiline_threshold = 20, -- Maximum number of lines to show for a single context
trim_scope = "outer", -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
mode = "cursor", -- Line used to calculate context. Choices: 'cursor', 'topline'
-- Separator between context and content. Should be a single character string, like '-'.
-- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
separator = nil,
zindex = 20, -- The Z-index of the context window
on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching
},
config = function(_, opts)
require("treesitter-context").setup(opts)
-- Optional: Add keymaps for navigating context
vim.keymap.set("n", "[c", function()
require("treesitter-context").go_to_context(vim.v.count1)
end, { silent = true, desc = "Jump to context" })
end,
}

View File

@@ -0,0 +1,17 @@
return {
"seandewar/killersheep.nvim",
event = "VeryLazy",
dependencies = {
"nvim-lua/plenary.nvim", -- Required dependency for killersheep.nvim
},
config = function()
require("killersheep").setup({
gore = true, -- Enables/disables blood and gore.
keymaps = {
move_left = "h", -- Keymap to move cannon to the left.
move_right = "l", -- Keymap to move cannon to the right.
shoot = "<Space>", -- Keymap to shoot the cannon.
},
})
end,
}

View File

@@ -0,0 +1,41 @@
return {
"jim-fx/sudoku.nvim",
event = "VeryLazy",
config = function()
require("sudoku").setup({
persist_settings = true, -- safe the settings under vim.fn.stdpath("data"), usually ~/.local/share/nvim,
persist_games = true, -- persist a history of all played games
default_mappings = true, -- if set to false you need to set your own, like the following:
mappings = {
{ key = "x", action = "clear_cell" },
{ key = "r1", action = "insert=1" },
{ key = "r2", action = "insert=2" },
{ key = "r3", action = "insert=3" },
{ key = "r9", action = "insert=9" },
{ key = "gn", action = "new_game" },
{ key = "gr", action = "reset_game" },
{ key = "gs", action = "view=settings" },
{ key = "gt", action = "view=tip" },
{ key = "gz", action = "view=zen" },
{ key = "gh", action = "view=help" },
{ key = "u", action = "undo" },
{ key = "<C-r>", action = "redo" },
{ key = "+", action = "increment" },
{ key = "-", action = "decrement" },
},
custom_highlights = {
board = { fg = "#7d7d7d" },
number = { fg = "white", bg = "black" },
active_menu = { fg = "white", bg = "black", gui = "bold" },
hint_cell = { fg = "white", bg = "yellow" },
square = { bg = "#292b35", fg = "white" },
column = { bg = "#14151a", fg = "#d5d5d5" },
row = { bg = "#14151a", fg = "#d5d5d5" },
settings_disabled = { fg = "#8e8e8e", gui = "italic" },
same_number = { fg = "white", gui = "bold" },
set_number = { fg = "white", gui = "italic" },
error = { fg = "white", bg = "#843434" },
},
})
end,
}

View File

@@ -23,9 +23,70 @@ return {
end, 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({ telescope.setup({
defaults = { defaults = {
path_display = { "smart" }, 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 = { mappings = {
i = { i = {
["<C-k>"] = actions.move_selection_previous, -- move to prev result ["<C-k>"] = actions.move_selection_previous, -- move to prev result
@@ -38,11 +99,41 @@ return {
pickers = { pickers = {
find_files = { find_files = {
hidden = true, 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 = { live_grep = {
additional_args = function() additional_args = function()
return { "--hidden" } return { "--hidden" }
end, 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",
}, },
}, },
}) })
@@ -50,30 +141,5 @@ return {
-- Load extensions -- Load extensions
telescope.load_extension("fzf") telescope.load_extension("fzf")
telescope.load_extension("dap") telescope.load_extension("dap")
-- set keymaps
local keymap = vim.keymap -- for conciseness
-- File navigation
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Find files" })
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Live grep" })
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "Grep string" })
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "Recent files" })
-- Buffer and session management
keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Find buffers" })
keymap.set("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help tags" })
keymap.set("n", "<leader>fm", "<cmd>Telescope marks<cr>", { desc = "Find marks" })
keymap.set("n", "<leader>fk", "<cmd>Telescope keymaps<cr>", { desc = "Find keymaps" })
keymap.set("n", "<leader>fC", "<cmd>Telescope commands<cr>", { desc = "Find commands" })
-- Git
keymap.set("n", "<leader>fg", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
keymap.set("n", "<leader>fG", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
keymap.set("n", "<leader>fb", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
keymap.set("n", "<leader>gs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
-- Todos
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })
end, end,
} }

View File

@@ -0,0 +1,6 @@
return {
"fei6409/log-highlight.nvim",
config = function()
require("log-highlight").setup({})
end,
}

View File

@@ -1,6 +1,6 @@
return { return {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPost", "BufNewFile" }, -- Changed from BufReadPre to BufReadPost for better performance
build = ":TSUpdate", build = ":TSUpdate",
dependencies = { dependencies = {
"windwp/nvim-ts-autotag", "windwp/nvim-ts-autotag",
@@ -17,6 +17,9 @@ return {
-- Prevent Treesitter from parsing Copilot files -- Prevent Treesitter from parsing Copilot files
return lang == "copilot" or vim.api.nvim_buf_get_name(buf):match("copilot.lua") return lang == "copilot" or vim.api.nvim_buf_get_name(buf):match("copilot.lua")
end, end,
-- Performance optimizations
use_languagetree = true,
additional_vim_regex_highlighting = false,
}, },
-- enable indentation -- enable indentation
indent = { enable = true }, indent = { enable = true },
@@ -58,6 +61,13 @@ return {
node_decremental = "<bs>", node_decremental = "<bs>",
}, },
}, },
-- Performance optimizations
playground = {
enable = false, -- Disable playground for better performance
},
query_linter = {
enable = false, -- Disable query linter for better performance
},
}) })
end, end,
} }

118
lua/cargdev/plugins/ufo.lua Normal file
View File

@@ -0,0 +1,118 @@
return {
"kevinhwang91/nvim-ufo",
dependencies = {
"kevinhwang91/promise-async",
"nvim-treesitter/nvim-treesitter",
{
"luukvbaal/statuscol.nvim",
config = function()
local builtin = require("statuscol.builtin")
require("statuscol").setup({
relculright = true,
segments = {
{ text = { builtin.foldfunc }, click = "v:lua.ScFa" },
{ text = { "%s" }, click = "v:lua.ScSa" },
{ text = { builtin.lnumfunc, " " }, click = "v:lua.ScLa" },
},
})
end,
},
},
event = { "BufReadPost", "BufNewFile" },
init = function()
vim.o.foldcolumn = "1"
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
vim.o.foldenable = true
-- Use valid Unicode characters for foldopen and foldclose
vim.o.fillchars = [[eob: ,fold: ,foldopen:▾,foldsep: ,foldclose:▸]]
vim.o.foldmethod = "manual"
vim.o.foldexpr = ""
end,
opts = {
open_fold_hl_timeout = 150,
close_fold_kinds_for_ft = {
default = { 'imports', 'comment' },
json = { 'array' },
c = { 'comment', 'region' },
},
preview = {
win_config = {
border = { "", "", "", "", "", "", "", "" },
winhighlight = "Normal:Folded",
winblend = 0,
},
mappings = {
scrollU = "<C-u>",
scrollD = "<C-d>",
jumpTop = "[",
jumpBot = "]",
},
},
provider_selector = function(bufnr, filetype, buftype)
return { "treesitter", "indent" }
end,
fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate)
local newVirtText = {}
local suffix = (" 󰁂 %d "):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
local targetWidth = width - sufWidth
local curWidth = 0
for _, chunk in ipairs(virtText) do
local chunkText = chunk[1]
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
if targetWidth > curWidth + chunkWidth then
table.insert(newVirtText, chunk)
else
chunkText = truncate(chunkText, targetWidth - curWidth)
local hlGroup = chunk[2]
table.insert(newVirtText, { chunkText, hlGroup })
chunkWidth = vim.fn.strdisplaywidth(chunkText)
if curWidth + chunkWidth < targetWidth then
suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
end
break
end
curWidth = curWidth + chunkWidth
end
table.insert(newVirtText, { suffix, "MoreMsg" })
return newVirtText
end,
},
config = function(_, opts)
local ufo = require("ufo")
ufo.setup(opts)
-- Keymaps are in keymaps/ufo.lua
vim.api.nvim_create_autocmd("FileType", {
pattern = { "lua", "python", "javascript", "typescript", "c", "cpp", "rust", "go" },
callback = function()
ufo.setFoldVirtTextHandler(nil, function(virtText, lnum, endLnum, width, truncate)
local newVirtText = {}
local suffix = (" 󰁂 %d "):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
local targetWidth = width - sufWidth
local curWidth = 0
for _, chunk in ipairs(virtText) do
local chunkText = chunk[1]
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
if targetWidth > curWidth + chunkWidth then
table.insert(newVirtText, chunk)
else
chunkText = truncate(chunkText, targetWidth - curWidth)
local hlGroup = chunk[2]
table.insert(newVirtText, { chunkText, hlGroup })
chunkWidth = vim.fn.strdisplaywidth(chunkText)
if curWidth + chunkWidth < targetWidth then
suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
end
break
end
curWidth = curWidth + chunkWidth
end
table.insert(newVirtText, { suffix, "MoreMsg" })
return newVirtText
end)
end,
})
end,
}

View File

@@ -1 +1,11 @@
return { "wakatime/vim-wakatime", lazy = false } return {
"wakatime/vim-wakatime",
lazy = false,
config = function()
-- WakaTime performance optimizations
vim.g.wakatime_HeartbeatFrequency = 2 -- Increase from default 1 minute to 2 minutes
vim.g.wakatime_buffering_heartbeats_enabled = 1 -- Enable buffering
vim.g.wakatime_debug = 0 -- Disable debug mode for performance
vim.g.wakatime_redraw_setting = 'auto' -- Auto redraw setting
end,
}

View File

@@ -3,7 +3,7 @@ return {
event = "VeryLazy", event = "VeryLazy",
init = function() init = function()
vim.o.timeout = true vim.o.timeout = true
vim.o.timeoutlen = 500 vim.o.timeoutlen = 200 -- Reduced from 500 for faster response
end, end,
opts = { opts = {
-- your configuration comes here -- your configuration comes here

View File

@@ -0,0 +1,10 @@
return {
"cuducos/yaml.nvim",
ft = { "yaml" }, -- optional
dependencies = {
"nvim-treesitter/nvim-treesitter",
"folke/snacks.nvim", -- optional
"nvim-telescope/telescope.nvim", -- optional
"ibhagwan/fzf-lua", -- optional
},
}

View File

@@ -1,58 +0,0 @@
.
├── ftplugin
│   └── java.lua
├── init.lua
├── keyboard_mappings.md
├── kkk
├── lazigitconfig.log
├── lazy-lock.json
├── lua
│   └── cargdev
│   ├── core
│   │   ├── function
│   │   │   └── openTerminal.lua
│   │   ├── init.lua
│   │   ├── keymaps.lua
│   │   └── options.lua
│   ├── lazy.lua
│   └── plugins
│   ├── aicargdev.lua
│   ├── alpha.lua
│   ├── auto-session.lua
│   ├── autopairs.lua
│   ├── bufferline.lua
│   ├── buffertabs.lua
│   ├── colorscheme.lua
│   ├── comments.lua
│   ├── copilot.lua
│   ├── dap.lua
│   ├── dressing.lua
│   ├── formatting.lua
│   ├── gitsigns.lua
│   ├── indent-blankline.lua
│   ├── init.lua
│   ├── lazygit.lua
│   ├── linting.lua
│   ├── lsp
│   │   ├── lspconfig.lua
│   │   └── mason.lua
│   ├── lualine.lua
│   ├── noice.lua
│   ├── nvim-cmp.lua
│   ├── nvim-jdtls.lua
│   ├── nvim-tree.lua
│   ├── nvim-treesitter-text-objects.lua
│   ├── substitute.lua
│   ├── surround.lua
│   ├── telescope.lua
│   ├── tmux.lua
│   ├── todo-comments.lua
│   ├── treesitter.lua
│   ├── trouble.lua
│   ├── vim-maximizer.lua
│   ├── wakatime.lua
│   └── which-key.lua
├── README.md
└── tree.log
8 directories, 48 files