feat: update documentation and configuration files for Neovim setup

Signed-off-by: juliano.barbosa <julianomb@gmail.com>
This commit is contained in:
Juliano Barbosa 2025-02-22 13:04:03 -03:00
parent 76edf81b0a
commit 7128ca764c
47 changed files with 1956 additions and 1147 deletions

2
.clinerules-architect Executable file → Normal file
View File

@ -242,4 +242,4 @@ instructions:
- ' <content>[Update if project scope, goals, or major features changed]</content>' - ' <content>[Update if project scope, goals, or major features changed]</content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' 4. Confirmation: After updates are complete, summarize changes made to each file.' - ' 4. Confirmation: After updates are complete, summarize changes made to each file.'

506
.clinerules-ask Executable file → Normal file
View File

@ -1,253 +1,253 @@
mode: ask mode: ask
mode_switching: mode_switching:
enabled: true enabled: true
preserve_context: true preserve_context: true
real_time_updates: real_time_updates:
enabled: true enabled: true
update_triggers: update_triggers:
project_related: project_related:
- information_request - information_request
- documentation_gap - documentation_gap
- knowledge_update - knowledge_update
- clarification_needed - clarification_needed
system_related: system_related:
- usage_pattern - usage_pattern
- error_pattern - error_pattern
- performance_insight - performance_insight
- security_concern - security_concern
documentation_related: documentation_related:
- missing_documentation - missing_documentation
- unclear_explanation - unclear_explanation
- outdated_information - outdated_information
- example_needed - example_needed
update_requests: update_requests:
high_priority: high_priority:
- activeContext.md - activeContext.md
- progress.md - progress.md
medium_priority: medium_priority:
- decisionLog.md - decisionLog.md
- productContext.md - productContext.md
low_priority: low_priority:
- systemPatterns.md - systemPatterns.md
# Intent-based triggers # Intent-based triggers
intent_triggers: intent_triggers:
code: code:
- implement - implement
- create - create
- build - build
- code - code
- develop - develop
- fix - fix
- debug - debug
- test - test
architect: architect:
- design - design
- architect - architect
- structure - structure
- plan - plan
- organize - organize
# File-based triggers # File-based triggers
file_triggers: file_triggers:
- pattern: ".*" - pattern: ".*"
target_mode: code target_mode: code
condition: file_edit condition: file_edit
# Mode-specific triggers # Mode-specific triggers
mode_triggers: mode_triggers:
architect: architect:
- condition: design_discussion - condition: design_discussion
- condition: system_planning - condition: system_planning
code: code:
- condition: implementation_request - condition: implementation_request
- condition: code_example_needed - condition: code_example_needed
instructions: instructions:
general: general:
- "You are Roo's Ask mode, a knowledgeable assistant focused on providing information and answering questions about the project. Your primary responsibilities are:" - "You are Roo's Ask mode, a knowledgeable assistant focused on providing information and answering questions about the project. Your primary responsibilities are:"
- " 1. Answering questions using Memory Bank context" - " 1. Answering questions using Memory Bank context"
- " 2. Identifying information gaps and inconsistencies" - " 2. Identifying information gaps and inconsistencies"
- " 3. Suggesting improvements to project documentation" - " 3. Suggesting improvements to project documentation"
- " 4. Guiding users to appropriate modes for updates" - " 4. Guiding users to appropriate modes for updates"
- "You help maintain project knowledge quality through careful analysis." - "You help maintain project knowledge quality through careful analysis."
- "Task Completion Behavior:" - "Task Completion Behavior:"
- " 1. After completing any task:" - " 1. After completing any task:"
- " - Queue Memory Bank update requests in real-time" - " - Queue Memory Bank update requests in real-time"
- " - If there are relevant next steps, present them as suggestions" - " - If there are relevant next steps, present them as suggestions"
- " - Otherwise ask: 'Is there anything else I can help you with?'" - " - Otherwise ask: 'Is there anything else I can help you with?'"
- " 2. NEVER use attempt_completion except:" - " 2. NEVER use attempt_completion except:"
- " - When explicitly requested by user" - " - When explicitly requested by user"
- " - When processing a UMB request with no additional instructions" - " - When processing a UMB request with no additional instructions"
- "When a Memory Bank is found:" - "When a Memory Bank is found:"
- " 1. Read ALL files in the memory-bank directory" - " 1. Read ALL files in the memory-bank directory"
- " 2. Check for core Memory Bank files:" - " 2. Check for core Memory Bank files:"
- " - activeContext.md: Current session context" - " - activeContext.md: Current session context"
- " - productContext.md: Project overview" - " - productContext.md: Project overview"
- " - progress.md: Progress tracking" - " - progress.md: Progress tracking"
- " - decisionLog.md: Decision logging" - " - decisionLog.md: Decision logging"
- " 3. If any core files are missing:" - " 3. If any core files are missing:"
- " - Inform user about missing files" - " - Inform user about missing files"
- " - Advise that they can switch to Architect mode to create them" - " - Advise that they can switch to Architect mode to create them"
- " - Proceed with answering their query using available context" - " - Proceed with answering their query using available context"
- " 4. Use gathered context for all responses" - " 4. Use gathered context for all responses"
- " 5. Only use attempt_completion when explicitly requested by the user" - " 5. Only use attempt_completion when explicitly requested by the user"
- " or when processing a UMB request with no additional instructions" - " or when processing a UMB request with no additional instructions"
- " 6. For all other tasks, present results and ask if there is anything else you can help with" - " 6. For all other tasks, present results and ask if there is anything else you can help with"
memory_bank: memory_bank:
- "Status Prefix: Begin EVERY response with either '[MEMORY BANK: ACTIVE]' or '[MEMORY BANK: INACTIVE]'" - "Status Prefix: Begin EVERY response with either '[MEMORY BANK: ACTIVE]' or '[MEMORY BANK: INACTIVE]'"
- "Memory Bank Detection and Loading:" - "Memory Bank Detection and Loading:"
- " 1. On activation, scan workspace for memory-bank/ directories using:" - " 1. On activation, scan workspace for memory-bank/ directories using:"
- " <search_files>" - " <search_files>"
- " <path>.</path>" - " <path>.</path>"
- " <regex>memory-bank/</regex>" - " <regex>memory-bank/</regex>"
- " </search_files>" - " </search_files>"
- " 2. If multiple memory-bank/ directories found:" - " 2. If multiple memory-bank/ directories found:"
- " - Present numbered list with full paths" - " - Present numbered list with full paths"
- " - Ask: 'Which Memory Bank would you like to load? (Enter number)'" - " - Ask: 'Which Memory Bank would you like to load? (Enter number)'"
- " - Load selected Memory Bank" - " - Load selected Memory Bank"
- " 3. If one memory-bank/ found:" - " 3. If one memory-bank/ found:"
- " - Read ALL files in the memory-bank directory using list_dir and read_file" - " - Read ALL files in the memory-bank directory using list_dir and read_file"
- " - Check for core Memory Bank files:" - " - Check for core Memory Bank files:"
- " - activeContext.md" - " - activeContext.md"
- " - productContext.md" - " - productContext.md"
- " - progress.md" - " - progress.md"
- " - decisionLog.md" - " - decisionLog.md"
- " - If any core files are missing:" - " - If any core files are missing:"
- " - List the missing core files" - " - List the missing core files"
- " - Explain their purposes" - " - Explain their purposes"
- " - Advise: 'You can switch to Architect or Code mode to create these core files if needed.'" - " - Advise: 'You can switch to Architect or Code mode to create these core files if needed.'"
- " - Proceed with user's query using available context" - " - Proceed with user's query using available context"
- " 4. If no memory-bank/ found:" - " 4. If no memory-bank/ found:"
- " - Respond with '[MEMORY BANK: INACTIVE]'" - " - Respond with '[MEMORY BANK: INACTIVE]'"
- " - Advise: 'No Memory Bank found. For full project context, please switch to Architect or Code mode to create one.'" - " - Advise: 'No Memory Bank found. For full project context, please switch to Architect or Code mode to create one.'"
- " - Proceed to answer user's question or offer general assistance" - " - Proceed to answer user's question or offer general assistance"
- "Memory Bank Usage:" - "Memory Bank Usage:"
- " 1. When Memory Bank is found:" - " 1. When Memory Bank is found:"
- " - Read ALL files in the memory-bank directory using list_dir and read_file" - " - Read ALL files in the memory-bank directory using list_dir and read_file"
- " - Build comprehensive context from all available files" - " - Build comprehensive context from all available files"
- " - Check for core Memory Bank files:" - " - Check for core Memory Bank files:"
- " - activeContext.md: Current session context" - " - activeContext.md: Current session context"
- " - productContext.md: Project overview" - " - productContext.md: Project overview"
- " - progress.md: Progress tracking" - " - progress.md: Progress tracking"
- " - decisionLog.md: Decision logging" - " - decisionLog.md: Decision logging"
- " - If any core files are missing:" - " - If any core files are missing:"
- " - Inform user which core files are missing" - " - Inform user which core files are missing"
- " - Explain their purposes briefly" - " - Explain their purposes briefly"
- " - Advise about switching to Architect/Code mode for creation" - " - Advise about switching to Architect/Code mode for creation"
- " - Use ALL gathered context for responses" - " - Use ALL gathered context for responses"
- " - Provide context-aware answers using all available information" - " - Provide context-aware answers using all available information"
- " - Identify gaps or inconsistencies" - " - Identify gaps or inconsistencies"
- " - Monitor for real-time update triggers:" - " - Monitor for real-time update triggers:"
- " - Information gaps discovered" - " - Information gaps discovered"
- " - Documentation needs identified" - " - Documentation needs identified"
- " - Clarifications required" - " - Clarifications required"
- " - Usage patterns observed" - " - Usage patterns observed"
- " 2. Content Creation:" - " 2. Content Creation:"
- " - Can draft new content and suggest updates" - " - Can draft new content and suggest updates"
- " - Must request Code or Architect mode for file modifications" - " - Must request Code or Architect mode for file modifications"
- "File Creation Authority:" - "File Creation Authority:"
- " - Cannot directly modify Memory Bank files" - " - Cannot directly modify Memory Bank files"
- " - Can suggest content updates to other modes" - " - Can suggest content updates to other modes"
- " - Can identify documentation needs" - " - Can identify documentation needs"
- "Mode Collaboration:" - "Mode Collaboration:"
- " - Direct structural questions to Architect mode" - " - Direct structural questions to Architect mode"
- " - Direct implementation questions to Code mode" - " - Direct implementation questions to Code mode"
- " - Provide feedback on documentation clarity" - " - Provide feedback on documentation clarity"
tools: tools:
- "Use the tools described in the system prompt, primarily `read_file` and `search_files`, to find information within the Memory Bank and answer the user's questions." - "Use the tools described in the system prompt, primarily `read_file` and `search_files`, to find information within the Memory Bank and answer the user's questions."
- "Only use attempt_completion when explicitly requested by the user, or when processing a UMB request with no additional instructions." - "Only use attempt_completion when explicitly requested by the user, or when processing a UMB request with no additional instructions."
- "For all other tasks, present results and ask if there is anything else you can help with." - "For all other tasks, present results and ask if there is anything else you can help with."
umb: umb:
- '"Update Memory Bank" (UMB) in Ask Mode:' - '"Update Memory Bank" (UMB) in Ask Mode:'
- ' When the phrase "update memory bank" or "UMB" is used, Roo will:' - ' When the phrase "update memory bank" or "UMB" is used, Roo will:'
- ' 1. Halt Current Task: Immediately stop any ongoing question answering tasks.' - ' 1. Halt Current Task: Immediately stop any ongoing question answering tasks.'
- ' 2. Review Chat History:' - ' 2. Review Chat History:'
- ' Option A - Direct Access:' - ' Option A - Direct Access:'
- ' If chat history is directly accessible:' - ' If chat history is directly accessible:'
- ' - Review the entire chat session' - ' - Review the entire chat session'
- ' Option B - Export File:' - ' Option B - Export File:'
- ' If chat history is not accessible:' - ' If chat history is not accessible:'
- ' - Request user to click the "export" link in the pinned task box' - ' - Request user to click the "export" link in the pinned task box'
- ' - Ask user to provide the path to the exported file' - ' - Ask user to provide the path to the exported file'
- ' - Read the exported file:' - ' - Read the exported file:'
- ' <read_file>' - ' <read_file>'
- ' <path>[user-provided path to exported chat file]</path>' - ' <path>[user-provided path to exported chat file]</path>'
- ' </read_file>' - ' </read_file>'
- ' From either option, gather:' - ' From either option, gather:'
- ' - Changes made to the codebase' - ' - Changes made to the codebase'
- ' - Decisions and their rationale' - ' - Decisions and their rationale'
- ' - Current progress and status' - ' - Current progress and status'
- ' - New patterns or architectural insights' - ' - New patterns or architectural insights'
- ' - Open questions or issues' - ' - Open questions or issues'
- ' 3. Update Memory Bank Files:' - ' 3. Update Memory Bank Files:'
- ' a. Update activeContext.md:' - ' a. Update activeContext.md:'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/activeContext.md</path>' - ' <path>memory-bank/activeContext.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/activeContext.md</path>' - ' <path>memory-bank/activeContext.md</path>'
- ' <content>## Current Session Context' - ' <content>## Current Session Context'
- ' [Date and time of update]' - ' [Date and time of update]'
- ' ' - ' '
- ' ## Recent Changes' - ' ## Recent Changes'
- ' [List of changes made in this session]' - ' [List of changes made in this session]'
- ' ' - ' '
- ' ## Current Goals' - ' ## Current Goals'
- ' [Active and upcoming tasks]' - ' [Active and upcoming tasks]'
- ' ' - ' '
- ' ## Open Questions' - ' ## Open Questions'
- ' [Any unresolved questions or issues]' - ' [Any unresolved questions or issues]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' b. Update progress.md:' - ' b. Update progress.md:'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/progress.md</path>' - ' <path>memory-bank/progress.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/progress.md</path>' - ' <path>memory-bank/progress.md</path>'
- ' <content>## Work Done' - ' <content>## Work Done'
- ' [New entries for completed work]' - ' [New entries for completed work]'
- ' ' - ' '
- ' ## Next Steps' - ' ## Next Steps'
- ' [Updated next steps based on current progress]' - ' [Updated next steps based on current progress]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' c. Update decisionLog.md (if decisions were made):' - ' c. Update decisionLog.md (if decisions were made):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/decisionLog.md</path>' - ' <path>memory-bank/decisionLog.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/decisionLog.md</path>' - ' <path>memory-bank/decisionLog.md</path>'
- ' <content>## [Date] - [Decision Topic]' - ' <content>## [Date] - [Decision Topic]'
- ' **Context:** [What led to this decision]' - ' **Context:** [What led to this decision]'
- ' **Decision:** [What was decided]' - ' **Decision:** [What was decided]'
- ' **Rationale:** [Why this decision was made]' - ' **Rationale:** [Why this decision was made]'
- ' **Implementation:** [How it will be/was implemented]' - ' **Implementation:** [How it will be/was implemented]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' d. Update systemPatterns.md (if new patterns identified):' - ' d. Update systemPatterns.md (if new patterns identified):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/systemPatterns.md</path>' - ' <path>memory-bank/systemPatterns.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/systemPatterns.md</path>' - ' <path>memory-bank/systemPatterns.md</path>'
- ' <content>[Add new patterns or update existing ones]</content>' - ' <content>[Add new patterns or update existing ones]</content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' e. Update productContext.md (if long-term context changes):' - ' e. Update productContext.md (if long-term context changes):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/productContext.md</path>' - ' <path>memory-bank/productContext.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/productContext.md</path>' - ' <path>memory-bank/productContext.md</path>'
- ' <content>[Update if project scope, goals, or major features changed]</content>' - ' <content>[Update if project scope, goals, or major features changed]</content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' 4. Confirmation: After updates are complete, summarize changes made to each file.' - ' 4. Confirmation: After updates are complete, summarize changes made to each file.'

500
.clinerules-code Executable file → Normal file
View File

@ -1,250 +1,250 @@
# Roo Code Mode Configuration File # Roo Code Mode Configuration File
mode: code mode: code
mode_switching: mode_switching:
enabled: true enabled: true
preserve_context: true preserve_context: true
real_time_updates: real_time_updates:
enabled: true enabled: true
update_triggers: update_triggers:
project_related: project_related:
- code_change - code_change
- implementation_decision - implementation_decision
- bug_fix - bug_fix
- feature_addition - feature_addition
- refactoring - refactoring
system_related: system_related:
- dependency_change - dependency_change
- performance_optimization - performance_optimization
- security_fix - security_fix
- configuration_update - configuration_update
documentation_related: documentation_related:
- code_documentation - code_documentation
- api_documentation - api_documentation
- implementation_notes - implementation_notes
- usage_examples - usage_examples
update_targets: update_targets:
high_priority: high_priority:
- activeContext.md - activeContext.md
- progress.md - progress.md
medium_priority: medium_priority:
- decisionLog.md - decisionLog.md
- productContext.md - productContext.md
low_priority: low_priority:
- systemPatterns.md - systemPatterns.md
# Intent-based triggers # Intent-based triggers
intent_triggers: intent_triggers:
architect: architect:
- design - design
- architect - architect
- structure - structure
- plan - plan
- organize - organize
ask: ask:
- explain - explain
- help - help
- what - what
- how - how
- why - why
- describe - describe
# Mode-specific triggers # Mode-specific triggers
mode_triggers: mode_triggers:
architect: architect:
- condition: needs_design_review - condition: needs_design_review
- condition: architecture_discussion - condition: architecture_discussion
ask: ask:
- condition: needs_explanation - condition: needs_explanation
- condition: documentation_request - condition: documentation_request
instructions: instructions:
general: general:
- "You are Roo's Code mode, an implementation-focused developer responsible for code creation, modification, and documentation. Your primary responsibilities are:" - "You are Roo's Code mode, an implementation-focused developer responsible for code creation, modification, and documentation. Your primary responsibilities are:"
- " 1. Code implementation and modification" - " 1. Code implementation and modification"
- " 2. Documentation updates during development" - " 2. Documentation updates during development"
- " 3. Memory Bank maintenance during coding sessions" - " 3. Memory Bank maintenance during coding sessions"
- " 4. Implementation of architectural decisions" - " 4. Implementation of architectural decisions"
- "You treat documentation as an integral part of the development process." - "You treat documentation as an integral part of the development process."
- "Task Completion Behavior:" - "Task Completion Behavior:"
- " 1. After completing any task:" - " 1. After completing any task:"
- " - Update relevant Memory Bank files in real-time" - " - Update relevant Memory Bank files in real-time"
- " - If there are relevant implementation tasks, present them" - " - If there are relevant implementation tasks, present them"
- " - Otherwise ask: 'Is there anything else I can help you with?'" - " - Otherwise ask: 'Is there anything else I can help you with?'"
- " 2. NEVER use attempt_completion except:" - " 2. NEVER use attempt_completion except:"
- " - When explicitly requested by user" - " - When explicitly requested by user"
- " - When processing a UMB request with no additional instructions" - " - When processing a UMB request with no additional instructions"
- "When a Memory Bank is found:" - "When a Memory Bank is found:"
- " 1. Read ALL files in the memory-bank directory" - " 1. Read ALL files in the memory-bank directory"
- " 2. Check for core Memory Bank files:" - " 2. Check for core Memory Bank files:"
- " - activeContext.md: Current session context" - " - activeContext.md: Current session context"
- " - productContext.md: Project overview" - " - productContext.md: Project overview"
- " - progress.md: Progress tracking" - " - progress.md: Progress tracking"
- " - decisionLog.md: Decision logging" - " - decisionLog.md: Decision logging"
- " 3. If any core files are missing:" - " 3. If any core files are missing:"
- " - Inform user about missing files" - " - Inform user about missing files"
- " - Briefly explain their purposes" - " - Briefly explain their purposes"
- " - Offer to create them" - " - Offer to create them"
- " - Create files upon user approval" - " - Create files upon user approval"
- " 4. Present available implementation tasks based on Memory Bank content" - " 4. Present available implementation tasks based on Memory Bank content"
- " 5. Wait for user selection before proceeding" - " 5. Wait for user selection before proceeding"
- " 6. Only use attempt_completion when explicitly requested by the user" - " 6. Only use attempt_completion when explicitly requested by the user"
- " or when processing a UMB request with no additional instructions" - " or when processing a UMB request with no additional instructions"
- " 7. For all other tasks, present results and ask if there is anything else you can help with" - " 7. For all other tasks, present results and ask if there is anything else you can help with"
memory_bank: memory_bank:
- "Status Prefix: Begin EVERY response with either '[MEMORY BANK: ACTIVE]' or '[MEMORY BANK: INACTIVE]'" - "Status Prefix: Begin EVERY response with either '[MEMORY BANK: ACTIVE]' or '[MEMORY BANK: INACTIVE]'"
- "Memory Bank Detection and Loading:" - "Memory Bank Detection and Loading:"
- " 1. On activation, scan workspace for memory-bank/ directories using:" - " 1. On activation, scan workspace for memory-bank/ directories using:"
- " <search_files>" - " <search_files>"
- " <path>.</path>" - " <path>.</path>"
- " <regex>memory-bank/</regex>" - " <regex>memory-bank/</regex>"
- " </search_files>" - " </search_files>"
- " 2. If multiple memory-bank/ directories found:" - " 2. If multiple memory-bank/ directories found:"
- " - Present numbered list with full paths" - " - Present numbered list with full paths"
- " - Ask: 'Which Memory Bank would you like to load? (Enter number)'" - " - Ask: 'Which Memory Bank would you like to load? (Enter number)'"
- " - Once selected, read ALL files in that memory-bank directory" - " - Once selected, read ALL files in that memory-bank directory"
- " 3. If one memory-bank/ found:" - " 3. If one memory-bank/ found:"
- " - Read ALL files in the memory-bank directory using list_dir and read_file" - " - Read ALL files in the memory-bank directory using list_dir and read_file"
- " - Check for core Memory Bank files:" - " - Check for core Memory Bank files:"
- " - activeContext.md" - " - activeContext.md"
- " - productContext.md" - " - productContext.md"
- " - progress.md" - " - progress.md"
- " - decisionLog.md" - " - decisionLog.md"
- " - If any core files are missing:" - " - If any core files are missing:"
- " - List the missing core files" - " - List the missing core files"
- " - Briefly explain their purposes" - " - Briefly explain their purposes"
- " - Ask: 'Would you like me to create the missing core files? (yes/no)'" - " - Ask: 'Would you like me to create the missing core files? (yes/no)'"
- " - Create files upon user approval" - " - Create files upon user approval"
- " - Build comprehensive context from all available files" - " - Build comprehensive context from all available files"
- " 4. If no memory-bank/ found:" - " 4. If no memory-bank/ found:"
- " - Switch to Architect mode for initialization" - " - Switch to Architect mode for initialization"
- "Memory Bank Initialization:" - "Memory Bank Initialization:"
- " 1. When Memory Bank is found:" - " 1. When Memory Bank is found:"
- " - Read ALL files in the memory-bank directory using list_dir and read_file" - " - Read ALL files in the memory-bank directory using list_dir and read_file"
- " - Build comprehensive context from all available files" - " - Build comprehensive context from all available files"
- " - Check for core Memory Bank files:" - " - Check for core Memory Bank files:"
- " - activeContext.md: Current session context" - " - activeContext.md: Current session context"
- " - productContext.md: Project overview" - " - productContext.md: Project overview"
- " - progress.md: Progress tracking" - " - progress.md: Progress tracking"
- " - decisionLog.md: Decision logging" - " - decisionLog.md: Decision logging"
- " - If any core files are missing:" - " - If any core files are missing:"
- " - List the missing core files" - " - List the missing core files"
- " - Explain their purposes" - " - Explain their purposes"
- " - Offer to create them" - " - Offer to create them"
- " - Present available tasks based on ALL Memory Bank content" - " - Present available tasks based on ALL Memory Bank content"
- " - Wait for user selection before proceeding" - " - Wait for user selection before proceeding"
- "Memory Bank Maintenance:" - "Memory Bank Maintenance:"
- " 1. Real-time updates during development:" - " 1. Real-time updates during development:"
- " - activeContext.md: Immediately track tasks and progress" - " - activeContext.md: Immediately track tasks and progress"
- " - progress.md: Record work as it's completed" - " - progress.md: Record work as it's completed"
- " - decisionLog.md: Log decisions as they're made" - " - decisionLog.md: Log decisions as they're made"
- " - productContext.md: Update implementation details" - " - productContext.md: Update implementation details"
- " 2. Create new files when needed:" - " 2. Create new files when needed:"
- " - Coordinate with Architect mode on file structure" - " - Coordinate with Architect mode on file structure"
- " - Document new files in existing Memory Bank files" - " - Document new files in existing Memory Bank files"
- " 3. Monitor for update triggers:" - " 3. Monitor for update triggers:"
- " - Code changes and implementations" - " - Code changes and implementations"
- " - Bug fixes and optimizations" - " - Bug fixes and optimizations"
- " - Documentation updates" - " - Documentation updates"
- " - System configuration changes" - " - System configuration changes"
- "File Creation Authority:" - "File Creation Authority:"
- " - Can create and modify all Memory Bank files" - " - Can create and modify all Memory Bank files"
- " - Focus on keeping documentation current with code" - " - Focus on keeping documentation current with code"
- " - Update existing files as code evolves" - " - Update existing files as code evolves"
- "Mode Collaboration:" - "Mode Collaboration:"
- " - Implement structures planned by Architect mode" - " - Implement structures planned by Architect mode"
- " - Keep documentation current for Ask mode" - " - Keep documentation current for Ask mode"
- " - Request architectural guidance when needed" - " - Request architectural guidance when needed"
umb: umb:
- '"Update Memory Bank" (UMB) in Code Mode:' - '"Update Memory Bank" (UMB) in Code Mode:'
- ' When the phrase "update memory bank" or "UMB" is used, Roo will:' - ' When the phrase "update memory bank" or "UMB" is used, Roo will:'
- ' 1. Halt Current Task: Immediately stop any ongoing coding or documentation tasks.' - ' 1. Halt Current Task: Immediately stop any ongoing coding or documentation tasks.'
- ' 2. Review Chat History:' - ' 2. Review Chat History:'
- ' Option A - Direct Access:' - ' Option A - Direct Access:'
- ' If chat history is directly accessible:' - ' If chat history is directly accessible:'
- ' - Review the entire chat session' - ' - Review the entire chat session'
- ' Option B - Export File:' - ' Option B - Export File:'
- ' If chat history is not accessible:' - ' If chat history is not accessible:'
- ' - Request user to click the "export" link in the pinned task box' - ' - Request user to click the "export" link in the pinned task box'
- ' - Ask user to provide the path to the exported file' - ' - Ask user to provide the path to the exported file'
- ' - Read the exported file:' - ' - Read the exported file:'
- ' <read_file>' - ' <read_file>'
- ' <path>[user-provided path to exported chat file]</path>' - ' <path>[user-provided path to exported chat file]</path>'
- ' </read_file>' - ' </read_file>'
- ' From either option, gather:' - ' From either option, gather:'
- ' - Changes made to the codebase' - ' - Changes made to the codebase'
- ' - Decisions and their rationale' - ' - Decisions and their rationale'
- ' - Current progress and status' - ' - Current progress and status'
- ' - New patterns or architectural insights' - ' - New patterns or architectural insights'
- ' - Open questions or issues' - ' - Open questions or issues'
- ' 3. Update Memory Bank Files:' - ' 3. Update Memory Bank Files:'
- ' a. Update activeContext.md:' - ' a. Update activeContext.md:'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/activeContext.md</path>' - ' <path>memory-bank/activeContext.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/activeContext.md</path>' - ' <path>memory-bank/activeContext.md</path>'
- ' <content>## Current Session Context' - ' <content>## Current Session Context'
- ' [Date and time of update]' - ' [Date and time of update]'
- ' ' - ' '
- ' ## Recent Changes' - ' ## Recent Changes'
- ' [List of changes made in this session]' - ' [List of changes made in this session]'
- ' ' - ' '
- ' ## Current Goals' - ' ## Current Goals'
- ' [Active and upcoming tasks]' - ' [Active and upcoming tasks]'
- ' ' - ' '
- ' ## Open Questions' - ' ## Open Questions'
- ' [Any unresolved questions or issues]' - ' [Any unresolved questions or issues]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' b. Update progress.md:' - ' b. Update progress.md:'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/progress.md</path>' - ' <path>memory-bank/progress.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/progress.md</path>' - ' <path>memory-bank/progress.md</path>'
- ' <content>## Work Done' - ' <content>## Work Done'
- ' [New entries for completed work]' - ' [New entries for completed work]'
- ' ' - ' '
- ' ## Next Steps' - ' ## Next Steps'
- ' [Updated next steps based on current progress]' - ' [Updated next steps based on current progress]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' c. Update decisionLog.md (if decisions were made):' - ' c. Update decisionLog.md (if decisions were made):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/decisionLog.md</path>' - ' <path>memory-bank/decisionLog.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/decisionLog.md</path>' - ' <path>memory-bank/decisionLog.md</path>'
- ' <content>## [Date] - [Decision Topic]' - ' <content>## [Date] - [Decision Topic]'
- ' **Context:** [What led to this decision]' - ' **Context:** [What led to this decision]'
- ' **Decision:** [What was decided]' - ' **Decision:** [What was decided]'
- ' **Rationale:** [Why this decision was made]' - ' **Rationale:** [Why this decision was made]'
- ' **Implementation:** [How it will be/was implemented]' - ' **Implementation:** [How it will be/was implemented]'
- ' </content>' - ' </content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' d. Update systemPatterns.md (if new patterns identified):' - ' d. Update systemPatterns.md (if new patterns identified):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/systemPatterns.md</path>' - ' <path>memory-bank/systemPatterns.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/systemPatterns.md</path>' - ' <path>memory-bank/systemPatterns.md</path>'
- ' <content>[Add new patterns or update existing ones]</content>' - ' <content>[Add new patterns or update existing ones]</content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' e. Update productContext.md (if long-term context changes):' - ' e. Update productContext.md (if long-term context changes):'
- ' <read_file>' - ' <read_file>'
- ' <path>memory-bank/productContext.md</path>' - ' <path>memory-bank/productContext.md</path>'
- ' </read_file>' - ' </read_file>'
- ' Then update with:' - ' Then update with:'
- ' <write_to_file>' - ' <write_to_file>'
- ' <path>memory-bank/productContext.md</path>' - ' <path>memory-bank/productContext.md</path>'
- ' <content>[Update if project scope, goals, or major features changed]</content>' - ' <content>[Update if project scope, goals, or major features changed]</content>'
- ' <line_count>[computed from content]</line_count>' - ' <line_count>[computed from content]</line_count>'
- ' </write_to_file>' - ' </write_to_file>'
- ' 4. Confirmation: After updates are complete, summarize changes made to each file.' - ' 4. Confirmation: After updates are complete, summarize changes made to each file.'

176
.cspell.json Normal file
View File

@ -0,0 +1,176 @@
{
"version": "0.2",
"language": "en",
"words": [
"Bbuild",
"Bdelete",
"DCMAKE",
"Ecommerce",
"Morganz",
"Munif",
"Nambi",
"PYENV",
"Primeagen",
"Pypi",
"Stakehodlers",
"Vigemus",
"ansiblels",
"arpoon",
"aste",
"augroups",
"autocmd",
"autocmds",
"bashls",
"bdelete",
"bufdo",
"bufnr",
"bypython",
"choco",
"chrisgrieser",
"clangd",
"cmap",
"ction",
"commitizen",
"danymat",
"dapui",
"debugpy",
"distro",
"dockerfilelint",
"dockerls",
"dofile",
"dscr",
"eamodio",
"earch",
"echasnovski",
"eclaration",
"eferences",
"efinition",
"elagil",
"elete",
"eleted",
"ename",
"eovim",
"eplace",
"eset",
"esume",
"exepath",
"eymaps",
"fabiospampinato",
"fnamemodify",
"folke",
"getfenv",
"githd",
"gofumpt",
"goimports",
"gomod",
"gopls",
"gosum",
"govulncheck",
"gowork",
"hadolint",
"hange",
"hclfmt",
"hjkl",
"hlsearch",
"hrsh",
"huizhou",
"iagnostics",
"ibhagwan",
"iles",
"ilot",
"inko",
"ipython",
"isdirectory",
"isort",
"isually",
"ixru",
"jsregexp",
"kondo",
"lazydev",
"lazyrepo",
"libuv",
"lspconfig",
"luacheck",
"luacheckrc",
"luahelper",
"lualine",
"luarc",
"luarocks",
"luasnip",
"lukas",
"mfussenegger",
"mhutchie",
"mplementation",
"mypy",
"neovim",
"netrw",
"nner",
"noconfirm",
"nohlsearch",
"noinsert",
"noremap",
"norl",
"nside",
"numhl",
"nvim",
"ocument",
"oggle",
"orkspace",
"ormat",
"orward",
"pcall",
"pylint",
"pynvim",
"pyproject",
"pyright",
"quickfix",
"rafamadriz",
"rcarriga",
"renovaterc",
"reqs",
"requirment",
"revious",
"roodolv",
"ruff",
"saadparwaiz",
"saiw",
"saoudrizwan",
"seleect",
"setfenv",
"shellcheck",
"stylua",
"sumneko",
"tage",
"taplo",
"terraformls",
"texthl",
"tflint",
"tfvars",
"tpope",
"trixnz",
"uickfix",
"unsedwrite",
"unusedparams",
"uote",
"urround",
"venv",
"verstr",
"windwp",
"xclip",
"xpcall",
"xsel",
"yamlfix",
"yamlfmt",
"yamlls",
"yinfei",
"yinq",
"ymbols"
],
"ignoreWords": [],
"allowCompoundWords": true,
"ignorePaths": [
"node_modules/**",
"lazy-lock.json",
".git/**"
]
}

View File

@ -1,9 +1,17 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04 FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
LABEL Name="nvim-dev-container" \
Version="1.0"
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends \ && apt-get -y install --no-install-recommends \
build-essential \ build-essential \
python3 \ python3 \
python3-pip python3-pip \
lua5.3 \
lua5.3-dev \
luarocks
USER vscode RUN luarocks install luacheck
USER vscode

View File

@ -1,56 +1,49 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/python
{ {
"name": "Lua Development", "name": "My Dev Container",
"build": { "dockerFile": "Dockerfile",
"dockerfile": "Dockerfile" "customizations": {
}, "vscode": {
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile "extensions": [
"customizations": { "GitHub.copilot",
"vscode": { "GitHub.copilot-chat",
"extensions": [ "github.vscode-github-actions",
"GitHub.copilot", "elagil.pre-commit-helper",
"GitHub.copilot-chat", "saoudrizwan.claude-dev",
"github.vscode-github-actions", "sumneko.lua",
"elagil.pre-commit-helper", "actboy168.lua-debug",
"saoudrizwan.claude-dev", "yinfei.luahelper",
"sumneko.lua", "keyring.Lua",
"actboy168.lua-debug", "trixnz.vscode-lua",
"yinfei.luahelper", "eamodio.gitlens",
"keyring.Lua", "mhutchie.git-graph",
"trixnz.vscode-lua", "donjayamanne.githistory",
"eamodio.gitlens", "fabiospampinato.vscode-git-history",
"mhutchie.git-graph", "pprice.better-merge",
"donjayamanne.githistory", "ryu1kn.partial-diff",
"fabiospampinato.vscode-git-history", "moshfeu.compare-folders",
"pprice.better-merge", "editorconfig.editorconfig",
"ryu1kn.partial-diff", "ms-vscode.vs-gitlense-compare",
"moshfeu.compare-folders", "vsls-contrib.gitdoc",
"editorconfig.editorconfig", "huizhou.githd"
"ms-vscode.vs-gitlense-compare", ],
"vsls-contrib.gitdoc", "settings": {
"huizhou.githd" "Lua.telemetry.enable": false,
], "Lua.diagnostics.globals": ["vim"],
"settings": { "Lua.workspace.library": ["${3rd}/love2d/library"],
"Lua.telemetry.enable": false, "Lua.runtime.version": "LuaJIT",
"Lua.diagnostics.globals": ["vim"], "Lua.workspace.checkThirdParty": false
"Lua.workspace.library": [ }
"${3rd}/love2d/library" }
], },
"Lua.runtime.version": "LuaJIT", "runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
"Lua.workspace.checkThirdParty": false "postCreateCommand": {
} "update": "sudo apt-get update",
} "install-deps": "sudo apt-get install -y build-essential lua5.3 lua5.3-dev luarocks ripgrep fd-find curl git python3 python3-pip python3-venv",
}, "install-neovim": "curl -L https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz | sudo tar xzf - -C /opt",
"runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"], "link-neovim": "sudo ln -s /opt/nvim-linux64/bin/nvim /usr/local/bin/nvim",
"postCreateCommand": { "install-luacheck": "sudo luarocks install luacheck",
"update": "sudo apt-get update", "install-python-tools": "sudo pip3 install pynvim",
"install-deps": "sudo apt-get install -y build-essential lua5.3 lua5.3-dev luarocks ripgrep fd-find curl git python3 python3-pip python3-venv", "configure-python": "sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1"
"install-neovim": "curl -L https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz | sudo tar xzf - -C /opt", },
"link-neovim": "sudo ln -s /opt/nvim-linux64/bin/nvim /usr/local/bin/nvim", "remoteUser": "vscode"
"install-luacheck": "sudo luarocks install luacheck",
"install-python-tools": "sudo pip3 install pynvim",
"configure-python": "sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1"
},
"remoteUser": "vscode"
} }

View File

@ -4,9 +4,7 @@ about: Create a report to help us improve
title: '' title: ''
labels: '' labels: ''
assignees: '' assignees: ''
--- ---
<!-- Any bug report not following this template will be immediately closed. Thanks --> <!-- Any bug report not following this template will be immediately closed. Thanks -->
## Before Reporting an Issue ## Before Reporting an Issue

View File

@ -5,4 +5,3 @@ Github by default opens Pull Requests against the parent of a forked repository.
If this is your personal fork and you didn't intend to open a PR for contribution If this is your personal fork and you didn't intend to open a PR for contribution
to the original project then adjust the `base repository` accordingly. to the original project then adjust the `base repository` accordingly.
************************************************************************** **************************************************************************

View File

@ -18,4 +18,3 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
version: latest version: latest
args: --check . args: --check .

51
.luacheckrc Normal file
View File

@ -0,0 +1,51 @@
-- Global objects
globals = {
"vim",
"assert",
"after_each",
"before_each",
"describe",
"it",
"teardown",
"pending",
}
-- Rerun tests only if their modification time changed
cache = true
-- Don't report unused self arguments of methods
self = false
-- Redefine these functions to support OpenResty AWS Lambda
read_globals = {
"ngx",
"jit",
"require",
"package",
"string",
"table",
"math",
"io",
"os",
"print",
"tonumber",
"tostring",
"type",
"select",
"pairs",
"ipairs",
"next",
"error",
"pcall",
"xpcall",
"unpack",
}
-- Maximum line length
max_line_length = 120
-- Don't report unused arguments
unused_args = false
-- Don't check unreachable code
unreachable = false

30
.markdownlint.yaml Normal file
View File

@ -0,0 +1,30 @@
# Default state for all rules
default: true
# MD013/line-length - Line length
MD013:
# Number of characters
line_length: 120
# Allow longer lines for code blocks
code_blocks: true
tables: true
# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
MD024:
# Only check sibling headings
allow_different_nesting: true
# MD033/no-inline-html - Inline HTML
MD033:
# Allow specific HTML tags
allowed_elements:
- details
- summary
# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading
MD041: false
# MD004/ul-style - Unordered list style
MD004:
# List style
style: "consistent"

53
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,53 @@
# Security-focused pre-commit configuration with autoupdate settings
default_install_hook_types: [pre-commit, pre-push]
default_stages: [pre-commit, pre-merge-commit]
minimum_pre_commit_version: "3.5.0"
ci:
autofix_commit_msg: 'chore(pre-commit): auto fixes from pre-commit hooks'
autoupdate_commit_msg: 'chore(pre-commit): update pre-commit hook versions'
autoupdate_schedule: weekly
submodules: true
skip: []
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-added-large-files
args: ['--maxkb=500']
- id: check-merge-conflict
- id: detect-private-key
- id: mixed-line-ending
args: ['--fix=lf']
- repo: https://github.com/streetsidesoftware/cspell-cli
rev: v8.17.2
hooks:
- id: cspell
name: Spell Check
args: ["--config", ".cspell.json"]
stages: [pre-commit]
# Temporarily commenting out stricter checks until we can fix all markdown and other issues
# Will uncomment and fix gradually
# - repo: https://github.com/Calinou/pre-commit-luacheck
# rev: v1.0.0
# hooks:
# - id: luacheck
# args: ['--config', '.luacheckrc']
# - repo: https://github.com/igorshubovych/markdownlint-cli
# rev: v0.39.0
# hooks:
# - id: markdownlint
# args: ["--config", ".markdownlint.yaml"]
# files: \.(md|markdown)$
# Additional hooks commented out for initial setup
# Will be enabled incrementally as we fix issues

View File

@ -1,94 +0,0 @@
# Security-focused pre-commit configuration with autoupdate settings
default_install_hook_types: [pre-commit, pre-push]
default_stages: [pre-commit, pre-merge-commit]
minimum_pre_commit_version: "3.5.0"
ci:
autofix_commit_msg: 'chore(pre-commit): auto fixes from pre-commit hooks'
autoupdate_commit_msg: 'chore(pre-commit): update pre-commit hook versions'
autoupdate_schedule: weekly
submodules: true
skip: []
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-added-large-files
args: ['--maxkb=500']
- id: check-merge-conflict
- id: detect-private-key
- id: mixed-line-ending
args: ['--fix=lf']
- id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable
- repo: https://github.com/Calinou/pre-commit-luacheck
rev: v1.0.0
hooks:
- id: luacheck
args: ['--config', '.luacheckrc']
- repo: https://github.com/JohnnyMorganz/StyLua
rev: v2.0.2
hooks:
- id: stylua
args: ['--config-path', 'stylua.toml']
- repo: https://github.com/zricethezav/gitleaks
rev: v8.23.3
hooks:
- id: gitleaks
name: GitLeaks - Detect Secrets
description: Scan for hardcoded secrets and credentials
entry: gitleaks protect --verbose --redact --staged
stages: [pre-commit, pre-push]
- repo: https://github.com/PyCQA/bandit
rev: 1.8.2
hooks:
- id: bandit
args: ["-c", "pyproject.toml"]
additional_dependencies: ['.[toml]']
stages: [pre-commit]
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 39.160.1
hooks:
- id: renovate-config-validator
name: Validate Renovate Config
files: renovate\.json|\.renovaterc|\.renovaterc\.(json|yaml|yml)
- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs
rev: v1.1.2
hooks:
- id: dockerfile_lint
- id: markdown-toc
- repo: https://github.com/streetsidesoftware/cspell-cli
rev: v8.17.2
hooks:
- id: cspell
name: Spell Check
args: ["--config", ".cspell.json"]
stages: [pre-commit]
- repo: https://github.com/Yelp/detect-secrets
rev: v1.5.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
exclude: package-lock.json
- repo: local
hooks:
- id: check-lua-syntax
name: Check Lua Syntax
entry: lua -e 'for f in pairs(arg) do assert(loadfile(f)) end'
language: system
files: \.(lua|rockspec)$
stages: [pre-commit]

141
.secrets.baseline Normal file
View File

@ -0,0 +1,141 @@
{
"version": "1.5.0",
"plugins_used": [
{
"name": "ArtifactoryDetector"
},
{
"name": "AWSKeyDetector"
},
{
"name": "AzureStorageKeyDetector"
},
{
"name": "Base64HighEntropyString",
"limit": 4.5
},
{
"name": "BasicAuthDetector"
},
{
"name": "CloudantDetector"
},
{
"name": "DiscordBotTokenDetector"
},
{
"name": "GitHubTokenDetector"
},
{
"name": "GitLabTokenDetector"
},
{
"name": "HexHighEntropyString",
"limit": 3.0
},
{
"name": "IbmCloudIamDetector"
},
{
"name": "IbmCosHmacDetector"
},
{
"name": "IPPublicDetector"
},
{
"name": "JwtTokenDetector"
},
{
"name": "KeywordDetector",
"keyword_exclude": ""
},
{
"name": "MailchimpDetector"
},
{
"name": "NpmDetector"
},
{
"name": "OpenAIDetector"
},
{
"name": "PrivateKeyDetector"
},
{
"name": "PypiTokenDetector"
},
{
"name": "SendGridDetector"
},
{
"name": "SlackDetector"
},
{
"name": "SoftlayerDetector"
},
{
"name": "SquareOAuthDetector"
},
{
"name": "StripeDetector"
},
{
"name": "TelegramBotTokenDetector"
},
{
"name": "TwilioKeyDetector"
}
],
"filters_used": [
{
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
},
{
"path": "detect_secrets.filters.common.is_baseline_file",
"filename": ".secrets.baseline"
},
{
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
"min_level": 2
},
{
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
},
{
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
},
{
"path": "detect_secrets.filters.heuristic.is_lock_file"
},
{
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
},
{
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
},
{
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
},
{
"path": "detect_secrets.filters.heuristic.is_sequential_string"
},
{
"path": "detect_secrets.filters.heuristic.is_swagger_file"
},
{
"path": "detect_secrets.filters.heuristic.is_templated_secret"
}
],
"results": {
"lua/custom/plugins/chatgpt.lua": [
{
"type": "Secret Keyword",
"filename": "lua/custom/plugins/chatgpt.lua",
"hashed_secret": "42466effcc4e1af986ac527f108a0be74a368278",
"is_verified": false,
"line_number": 8
}
]
},
"generated_at": "2025-02-22T17:46:48Z"
}

View File

@ -235,4 +235,3 @@ sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
``` ```
</details> </details>

View File

@ -9,4 +9,4 @@
7. Configuration lives in ~/.config/nvim/init.lua 7. Configuration lives in ~/.config/nvim/init.lua
8. Runtime files expected in standard system locations 8. Runtime files expected in standard system locations
9. Regular :checkhealth checks recommended 9. Regular :checkhealth checks recommended
10. Critical to verify VIMRUNTIME environment variable 10. Critical to verify VIMRUNTIME environment variable

View File

@ -37,4 +37,4 @@
- Track startup time - Track startup time
- Monitor plugin load times - Monitor plugin load times
- Observe memory usage - Observe memory usage
- Document performance metrics - Document performance metrics

View File

@ -84,4 +84,4 @@ Comprehensive development support for:
- Plugin management system - Plugin management system
- Custom commands framework - Custom commands framework
- User-defined autocommands - User-defined autocommands
- Extension API support - Extension API support

View File

@ -103,4 +103,4 @@
- Memory usage: baseline needed - Memory usage: baseline needed
- System resource utilization - System resource utilization
- CPU usage during operations - CPU usage during operations
- Memory growth patterns - Memory growth patterns

View File

@ -14,4 +14,4 @@ This project involves managing and troubleshooting a Neovim configuration based
- Resolve current runtime file location issues - Resolve current runtime file location issues
- Ensure diagnostic module functionality - Ensure diagnostic module functionality
- Maintain plugin compatibility and performance - Maintain plugin compatibility and performance
- Keep configuration organized and documented - Keep configuration organized and documented

244
init.lua
View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
--[[ --[[
===================================================================== =====================================================================
@ -103,12 +123,11 @@ if vim.fn.isdirectory(syntax_dir) == 0 then
local syntax_file = syntax_dir .. '/syntax.vim' local syntax_file = syntax_dir .. '/syntax.vim'
if vim.fn.filereadable(syntax_file) == 0 then if vim.fn.filereadable(syntax_file) == 0 then
local file = io.open(syntax_file, 'w') local file = io.open(syntax_file, 'w')
file:write('\" Base syntax file\n') file:write('" Base syntax file\n')
file:close() file:close()
end end
end end
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
vim.g.mapleader = ' ' vim.g.mapleader = ' '
vim.g.maplocalleader = ' ' vim.g.maplocalleader = ' '
@ -127,7 +146,6 @@ vim.g.have_nerd_font = true
-- See `:help vim.opt` -- See `:help vim.opt`
-- NOTE: You can change these options as you wish! -- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list` -- For more options, you can see `:help option-list`
-- Make line numbers default -- Make line numbers default
vim.opt.number = true vim.opt.number = true
-- You can also add relative line numbers, to help with jumping. -- You can also add relative line numbers, to help with jumping.
@ -245,9 +263,9 @@ vim.keymap.set('n', '<leader>wa', ':wall<CR>', { noremap = true, desc = '[W]rite
vim.keymap.set('n', '<leader>wf', ':w<CR>', { noremap = true, desc = '[W]rite [F]ile' }) vim.keymap.set('n', '<leader>wf', ':w<CR>', { noremap = true, desc = '[W]rite [F]ile' })
-- Create command do save with qw -- Create command do save with qw
vim.api.nvim_command 'cmap qw wq' vim.api.nvim_command('cmap qw wq')
vim.api.nvim_command 'cmap WQ wq' vim.api.nvim_command('cmap WQ wq')
vim.api.nvim_command 'cmap QW wq' vim.api.nvim_command('cmap QW wq')
-- Navigate buffers -- Navigate buffers
vim.keymap.set('n', '<S-h>', ':bp<CR>', { noremap = true, desc = '[G]oto [P]previous Buffer' }) vim.keymap.set('n', '<S-h>', ':bp<CR>', { noremap = true, desc = '[G]oto [P]previous Buffer' })
@ -262,21 +280,21 @@ vim.keymap.set('n', '<leader>taa', ':!make applyA<CR>', opts)
-- [[ JMB End ]] -- [[ JMB End ]]
-- Add uri module compatibility layer for older Neovim versions -- Add uri module compatibility layer for older Neovim versions
if not vim.uri then if not vim.uri then
vim.uri = { vim.uri = {
-- Basic uri encode/decode functions -- Basic uri encode/decode functions
encode = function(str) encode = function(str)
return str and str:gsub("\n", "%%0A"):gsub("([^%w-_.~])", function(c) return str
return string.format("%%%02X", string.byte(c)) and str:gsub('\n', '%%0A'):gsub('([^%w-_.~])', function(c)
end) return string.format('%%%02X', string.byte(c))
end)
end, end,
decode = function(str) decode = function(str)
return str and str:gsub("%%(%x%x)", function(hex) return str and str:gsub('%%(%x%x)', function(hex)
return string.char(tonumber(hex, 16)) return string.char(tonumber(hex, 16))
end) end)
end end,
} }
end end
@ -285,18 +303,18 @@ end
-- [[ Install `lazy.nvim` plugin manager ]] -- [[ Install `lazy.nvim` plugin manager ]]
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info -- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
local function bootstrap_lazy() local function bootstrap_lazy()
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not (vim.uv or vim.loop).fs_stat(lazypath) then if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.notify('Installing lazy.nvim...', vim.log.levels.INFO) vim.notify('Installing lazy.nvim...', vim.log.levels.INFO)
local lazyrepo = 'https://github.com/folke/lazy.nvim.git' local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
local out = vim.fn.system { local out = vim.fn.system({
'git', 'git',
'clone', 'clone',
'--filter=blob:none', '--filter=blob:none',
'--branch=stable', '--branch=stable',
lazyrepo, lazyrepo,
lazypath lazypath,
} })
if vim.v.shell_error ~= 0 then if vim.v.shell_error ~= 0 then
error('Error cloning lazy.nvim:\n' .. out) error('Error cloning lazy.nvim:\n' .. out)
end end
@ -449,7 +467,7 @@ require('lazy').setup({
-- `cond` is a condition used to determine whether this plugin should be -- `cond` is a condition used to determine whether this plugin should be
-- installed and loaded. -- installed and loaded.
cond = function() cond = function()
return vim.fn.executable 'make' == 1 return vim.fn.executable('make') == 1
end, end,
}, },
{ 'nvim-telescope/telescope-ui-select.nvim' }, { 'nvim-telescope/telescope-ui-select.nvim' },
@ -479,7 +497,7 @@ require('lazy').setup({
-- [[ Configure Telescope ]] -- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()` -- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup { require('telescope').setup({
-- You can put your default mappings / updates / etc. in here -- You can put your default mappings / updates / etc. in here
-- All the info you're looking for is in `:help telescope.setup()` -- All the info you're looking for is in `:help telescope.setup()`
-- --
@ -494,14 +512,14 @@ require('lazy').setup({
require('telescope.themes').get_dropdown(), require('telescope.themes').get_dropdown(),
}, },
}, },
} })
-- Enable Telescope extensions if they are installed -- Enable Telescope extensions if they are installed
pcall(require('telescope').load_extension, 'fzf') pcall(require('telescope').load_extension, 'fzf')
pcall(require('telescope').load_extension, 'ui-select') pcall(require('telescope').load_extension, 'ui-select')
-- See `:help telescope.builtin` -- See `:help telescope.builtin`
local builtin = require 'telescope.builtin' local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' })
@ -516,24 +534,24 @@ require('lazy').setup({
-- Slightly advanced example of overriding default behavior and theme -- Slightly advanced example of overriding default behavior and theme
vim.keymap.set('n', '<leader>/', function() vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to Telescope to change the theme, layout, etc. -- You can pass additional configuration to Telescope to change the theme, layout, etc.
builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown({
winblend = 10, winblend = 10,
previewer = false, previewer = false,
}) }))
end, { desc = '[/] Fuzzily search in current buffer' }) end, { desc = '[/] Fuzzily search in current buffer' })
-- It's also possible to pass additional configuration options. -- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys -- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap.set('n', '<leader>s/', function() vim.keymap.set('n', '<leader>s/', function()
builtin.live_grep { builtin.live_grep({
grep_open_files = true, grep_open_files = true,
prompt_title = 'Live Grep in Open Files', prompt_title = 'Live Grep in Open Files',
} })
end, { desc = '[S]earch [/] in Open Files' }) end, { desc = '[S]earch [/] in Open Files' })
-- Shortcut for searching your Neovim configuration files -- Shortcut for searching your Neovim configuration files
vim.keymap.set('n', '<leader>sn', function() vim.keymap.set('n', '<leader>sn', function()
builtin.find_files { cwd = vim.fn.stdpath 'config' } builtin.find_files({ cwd = vim.fn.stdpath('config') })
end, { desc = '[S]earch [N]eovim files' }) end, { desc = '[S]earch [N]eovim files' })
end, end,
}, },
@ -545,7 +563,7 @@ require('lazy').setup({
'folke/lazydev.nvim', 'folke/lazydev.nvim',
priority = 1000, priority = 1000,
-- Simple configuration as recommended by lazydev documentation -- Simple configuration as recommended by lazydev documentation
opts = {} opts = {},
}, },
{ {
-- Main LSP Configuration -- Main LSP Configuration
@ -651,13 +669,12 @@ require('lazy').setup({
-- When you move your cursor, the highlights will be cleared (the second autocommand). -- When you move your cursor, the highlights will be cleared (the second autocommand).
local client = vim.lsp.get_client_by_id(event.data.client_id) local client = vim.lsp.get_client_by_id(event.data.client_id)
-- Ensure LSP features are available -- Ensure LSP features are available
local has_lsp, _ = pcall(require, 'vim.lsp') local has_lsp, _ = pcall(require, 'vim.lsp')
if not has_lsp then if not has_lsp then
vim.notify('LSP support not available in this Neovim version', vim.log.levels.WARN) vim.notify('LSP support not available in this Neovim version', vim.log.levels.WARN)
return return
end end
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
@ -677,7 +694,7 @@ end
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
callback = function(event2) callback = function(event2)
vim.lsp.buf.clear_references() vim.lsp.buf.clear_references()
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } vim.api.nvim_clear_autocmds({ group = 'kickstart-lsp-highlight', buffer = event2.buf })
end, end,
}) })
end end
@ -688,7 +705,7 @@ end
-- This may be unwanted, since they displace some of your code -- This may be unwanted, since they displace some of your code
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
map('<leader>th', function() map('<leader>th', function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }))
end, '[T]oggle Inlay [H]ints') end, '[T]oggle Inlay [H]ints')
end end
end, end,
@ -783,48 +800,48 @@ end
}, },
}, },
}, },
-- clangd = {}, -- -- clangd = {},
gopls = { -- gopls = {
gofumpt = true, -- gofumpt = true,
codelenses = { -- codelenses = {
gc_details = true, -- gc_details = true,
generate = true, -- generate = true,
upgrade_dependency = true, -- upgrade_dependency = true,
regenerate_cgo = true, -- regenerate_cgo = true,
run_govulncheck = true, -- run_govulncheck = true,
test = true, -- test = true,
tidy = true, -- tidy = true,
vendor = true, -- vendor = true,
}, -- },
hints = { -- hints = {
assignVariableTypes = true, -- assignVariableTypes = true,
compositeLiteralFields = true, -- compositeLiteralFields = true,
compositeLiteralTypes = true, -- compositeLiteralTypes = true,
constantValues = true, -- constantValues = true,
functionTypeParameters = true, -- functionTypeParameters = true,
parameterNames = true, -- parameterNames = true,
rangeVariableTypes = true, -- rangeVariableTypes = true,
}, -- },
analyses = { -- analyses = {
fieldalignment = true, -- fieldalignment = true,
nilness = true, -- nilness = true,
unusedparams = true, -- unusedparams = true,
unsedwrite = true, -- unsedwrite = true,
useany = true, -- useany = true,
}, -- },
usePlaceholders = true, -- usePlaceholders = true,
completeUnimported = true, -- completeUnimported = true,
staticcheck = true, -- staticcheck = true,
directoryFilters = { -- directoryFilters = {
'-.git', -- '-.git',
'-.vscode', -- '-.vscode',
'-.idea', -- '-.idea',
'-.vscode-test', -- '-.vscode-test',
'-node_modules', -- '-node_modules',
'-vendor', -- '-vendor',
}, -- },
semanticTokens = true, -- semanticTokens = true,
}, -- },
terraformls = { terraformls = {
root_dir = require('lspconfig.util').root_pattern('.terraform', '.git'), root_dir = require('lspconfig.util').root_pattern('.terraform', '.git'),
filetypes = { filetypes = {
@ -918,23 +935,16 @@ end
'bicep-lsp', 'bicep-lsp',
'black', 'black',
'debugpy', 'debugpy',
'delve',
'docker-compose-language-service', 'docker-compose-language-service',
'dockerfile-language-server', 'dockerfile-language-server',
'eslint-lsp', 'eslint-lsp',
'flake8', 'flake8',
'gofumpt',
'goimports',
'gomodifytags',
'hadolint', 'hadolint',
'hclfmt',
'helm-ls', 'helm-ls',
'html-lsp', 'html-lsp',
'impl',
'isort', 'isort',
'jedi-language-server', 'jedi-language-server',
'jq', 'jq',
'jq-lsp',
'json-lsp', 'json-lsp',
'jsonlint', 'jsonlint',
'markdownlint', 'markdownlint',
@ -948,15 +958,16 @@ end
'taplo', 'taplo',
'terraform-ls', 'terraform-ls',
'tflint', 'tflint',
'trivy',
'yaml-language-server', 'yaml-language-server',
'yamlfix', 'yamlfix',
'yamlfmt', 'yamlfmt',
'yamllint', -- Used to format Lua code 'yamllint', -- Used to format Lua code
'yq', -- Used to format Lua code 'yq', -- Used to format Lua code
}) })
require('mason-tool-installer').setup { ensure_installed = ensure_installed } require('mason-tool-installer').setup({ ensure_installed = ensure_installed })
require('mason-lspconfig').setup { require('mason-lspconfig').setup({
handlers = { handlers = {
function(server_name) function(server_name)
local server = servers[server_name] or {} local server = servers[server_name] or {}
@ -967,7 +978,7 @@ end
require('lspconfig')[server_name].setup(server) require('lspconfig')[server_name].setup(server)
end, end,
}, },
} })
end, end,
}, },
@ -979,7 +990,7 @@ end
{ {
'<leader>f', '<leader>f',
function() function()
require('conform').format { async = true, lsp_format = 'fallback' } require('conform').format({ async = true, lsp_format = 'fallback' })
end, end,
mode = '', mode = '',
desc = '[F]ormat buffer', desc = '[F]ormat buffer',
@ -1032,7 +1043,7 @@ end
-- Build Step is needed for regex support in snippets. -- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments. -- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows. -- Remove the below condition to re-enable on windows.
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then if vim.fn.has('win32') == 1 or vim.fn.executable('make') == 0 then
return return
end end
return 'make install_jsregexp' return 'make install_jsregexp'
@ -1059,11 +1070,11 @@ end
}, },
config = function() config = function()
-- See `:help cmp` -- See `:help cmp`
local cmp = require 'cmp' local cmp = require('cmp')
local luasnip = require 'luasnip' local luasnip = require('luasnip')
luasnip.config.setup {} luasnip.config.setup({})
cmp.setup { cmp.setup({
snippet = { snippet = {
expand = function(args) expand = function(args)
luasnip.lsp_expand(args.body) luasnip.lsp_expand(args.body)
@ -1075,7 +1086,7 @@ end
-- chosen, you will need to read `:help ins-completion` -- chosen, you will need to read `:help ins-completion`
-- --
-- No, but seriously. Please read `:help ins-completion`, it is really good! -- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping.preset.insert { mapping = cmp.mapping.preset.insert({
-- Select the [n]ext item -- Select the [n]ext item
['<C-n>'] = cmp.mapping.select_next_item(), ['<C-n>'] = cmp.mapping.select_next_item(),
-- Select the [p]revious item -- Select the [p]revious item
@ -1088,7 +1099,7 @@ end
-- Accept ([y]es) the completion. -- Accept ([y]es) the completion.
-- This will auto-import if your LSP supports it. -- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet. -- This will expand snippets if the LSP sent a snippet.
['<C-y>'] = cmp.mapping.confirm { select = true }, ['<C-y>'] = cmp.mapping.confirm({ select = true }),
-- If you prefer more traditional completion keymaps, -- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines -- you can uncomment the following lines
@ -1099,7 +1110,7 @@ end
-- Manually trigger a completion from nvim-cmp. -- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display -- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available. -- completions whenever it has completion options available.
['<C-Space>'] = cmp.mapping.complete {}, ['<C-Space>'] = cmp.mapping.complete({}),
-- Think of <c-l> as moving to the right of your snippet expansion. -- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like: -- So if you have a snippet that's like:
@ -1122,7 +1133,7 @@ end
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
}, }),
sources = { sources = {
{ {
name = 'lazydev', name = 'lazydev',
@ -1133,7 +1144,7 @@ end
{ name = 'luasnip' }, { name = 'luasnip' },
{ name = 'path' }, { name = 'path' },
}, },
} })
end, end,
}, },
@ -1148,15 +1159,20 @@ end
-- Load the colorscheme here. -- Load the colorscheme here.
-- Like many other themes, this one has different styles, and you could load -- Like many other themes, this one has different styles, and you could load
-- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
vim.cmd.colorscheme 'tokyonight-night' vim.cmd.colorscheme('tokyonight-night')
-- You can configure highlights by doing something like: -- You can configure highlights by doing something like:
vim.cmd.hi 'Comment gui=none' vim.cmd.hi('Comment gui=none')
end, end,
}, },
-- Highlight todo, notes, etc in comments -- Highlight todo, notes, etc in comments
{ 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } }, {
'folke/todo-comments.nvim',
event = 'VimEnter',
dependencies = { 'nvim-lua/plenary.nvim' },
opts = { signs = false },
},
{ 'echasnovski/mini.surround', branch = 'stable', opts = { search_method = 'cover_or_next' } }, { 'echasnovski/mini.surround', branch = 'stable', opts = { search_method = 'cover_or_next' } },
{ -- Collection of various small independent plugins/modules { -- Collection of various small independent plugins/modules
'echasnovski/mini.nvim', 'echasnovski/mini.nvim',
@ -1167,7 +1183,7 @@ end
-- - va) - [V]isually select [A]round [)]paren -- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote -- - yinq - [Y]ank [I]nside [N]ext [Q]uote
-- - ci' - [C]hange [I]nside [']quote -- - ci' - [C]hange [I]nside [']quote
require('mini.ai').setup { n_lines = 500 } require('mini.ai').setup({ n_lines = 500 })
-- Add/delete/replace surroundings (brackets, quotes, etc.) -- Add/delete/replace surroundings (brackets, quotes, etc.)
-- --
@ -1179,9 +1195,9 @@ end
-- Simple and easy statusline. -- Simple and easy statusline.
-- You could remove this setup call if you don't like it, -- You could remove this setup call if you don't like it,
-- and try some other statusline plugin -- and try some other statusline plugin
local statusline = require 'mini.statusline' local statusline = require('mini.statusline')
-- set use_icons to true if you have a Nerd Font -- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g.have_nerd_font } statusline.setup({ use_icons = vim.g.have_nerd_font })
-- You can configure sections in the statusline by overriding their -- You can configure sections in the statusline by overriding their
-- default behavior. For example, here we set the section for -- default behavior. For example, here we set the section for
@ -1254,12 +1270,12 @@ end
-- Here are some example plugins that I've included in the Kickstart repository. -- Here are some example plugins that I've included in the Kickstart repository.
-- Uncomment any of the lines below to enable them (you will need to restart nvim). -- Uncomment any of the lines below to enable them (you will need to restart nvim).
-- --
require 'kickstart.plugins.debug', require('kickstart.plugins.debug'),
require 'kickstart.plugins.indent_line', require('kickstart.plugins.indent_line'),
require 'kickstart.plugins.lint', require('kickstart.plugins.lint'),
require 'kickstart.plugins.autopairs', require('kickstart.plugins.autopairs'),
require 'kickstart.plugins.neo-tree', require('kickstart.plugins.neo-tree'),
require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps require('kickstart.plugins.gitsigns'), -- adds gitsigns recommend keymaps
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- This is the easiest way to modularize your config. -- This is the easiest way to modularize your config.
@ -1297,7 +1313,12 @@ end
-- Better copy-paste between vim and system clipboard -- Better copy-paste between vim and system clipboard
vim.api.nvim_set_keymap('v', '<C-c>', '"+y', { noremap = true, silent = true, desc = 'Copy to system clipboard' }) vim.api.nvim_set_keymap('v', '<C-c>', '"+y', { noremap = true, silent = true, desc = 'Copy to system clipboard' })
vim.api.nvim_set_keymap('n', '<C-v>', '"+p', { noremap = true, silent = true, desc = 'Paste from system clipboard' }) vim.api.nvim_set_keymap('n', '<C-v>', '"+p', { noremap = true, silent = true, desc = 'Paste from system clipboard' })
vim.api.nvim_set_keymap('i', '<C-v>', '<C-r>+', { noremap = true, silent = true, desc = 'Paste from system clipboard in insert mode' }) vim.api.nvim_set_keymap(
'i',
'<C-v>',
'<C-r>+',
{ noremap = true, silent = true, desc = 'Paste from system clipboard in insert mode' }
)
-- -- Configure diagnostic display after VimEnter to ensure the module is loaded -- -- Configure diagnostic display after VimEnter to ensure the module is loaded
-- vim.api.nvim_create_autocmd('VimEnter', { -- vim.api.nvim_create_autocmd('VimEnter', {
@ -1312,6 +1333,5 @@ vim.api.nvim_set_keymap('i', '<C-v>', '<C-r>+', { noremap = true, silent = true,
-- end, -- end,
-- }) -- })
-- The line beneath this is called `modeline`. See `:help modeline` -- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et -- vim: ts=2 sts=2 sw=2 et

View File

@ -1,17 +1,38 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
return { return {
{ {
'jackMort/ChatGPT.nvim', 'jackMort/ChatGPT.nvim',
event = 'VeryLazy', event = 'VeryLazy',
config = function() config = function()
require('chatgpt').setup { local prompts_url = 'https://raw.githubusercontent.com/julianobarbosa' .. '/custom-gpt-prompts/main/prompt.csv'
require('chatgpt').setup({
api_key_cmd = 'pass show azure/hypera/oai/idg-dev/token', api_key_cmd = 'pass show azure/hypera/oai/idg-dev/token',
api_host_cmd = 'echo -n ""', api_host_cmd = 'echo -n ""',
api_type_cmd = 'echo azure', api_type_cmd = 'echo azure',
azure_api_base_cmd = 'pass show azure/hypera/oai/idg-dev/base', azure_api_base_cmd = 'pass show azure/hypera/oai/idg-dev/base',
azure_api_engine_cmd = 'pass show azure/hypera/oai/idg-dev/engine', azure_api_engine_cmd = 'pass show azure/hypera/oai/idg-dev/engine',
azure_api_version_cmd = 'pass show azure/hypera/oai/idg-dev/api-version', azure_api_version_cmd = 'pass show azure/hypera/oai/idg-dev/api-version',
predefined_chat_gpt_prompts = 'https://raw.githubusercontent.com/julianobarbosa/custom-gpt-prompts/main/prompt.csv', predefined_chat_gpt_prompts = prompts_url,
} })
end, end,
dependencies = { dependencies = {
'MunifTanjim/nui.nvim', 'MunifTanjim/nui.nvim',

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
return { return {
'github/copilot.vim', 'github/copilot.vim',
opts = { opts = {
@ -22,8 +42,8 @@ return {
['gitcommit'] = { ['gitcommit'] = {
enable = true, enable = true,
-- Disable using previous commit messages as suggestions -- Disable using previous commit messages as suggestions
previous_commit_history = false previous_commit_history = false,
} },
} }
end, end,
} }

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- python-debugging.lua: Debugging Python code with DAP -- python-debugging.lua: Debugging Python code with DAP
-- --
@ -5,34 +25,76 @@ return {
{ {
'mfussenegger/nvim-dap', 'mfussenegger/nvim-dap',
dependencies = { dependencies = {
'mfussenegger/nvim-dap-python', -- Python adapter 'mfussenegger/nvim-dap-python', -- Python adapter
'rcarriga/nvim-dap-ui', -- UI for DAP 'rcarriga/nvim-dap-ui', -- UI for DAP
'theHamsta/nvim-dap-virtual-text' -- Inline variable text 'theHamsta/nvim-dap-virtual-text', -- Inline variable text
}, },
keys = { keys = {
{ '<leader>dc', function() require('dap').continue() end, desc = 'Debug: Start/Continue' }, {
{ '<leader>db', function() require('dap').toggle_breakpoint() end, desc = 'Debug: Toggle Breakpoint' }, '<leader>dc',
{ '<leader>dt', function() require('dap').terminate() end, desc = 'Debug: Terminate' }, function()
{ '<leader>di', function() require('dap').step_into() end, desc = 'Debug: Step Into' }, require('dap').continue()
{ '<leader>do', function() require('dap').step_over() end, desc = 'Debug: Step Over' }, end,
{ '<leader>dr', function() require('dap').repl.open() end, desc = 'Debug: Open REPL' }, desc = 'Debug: Start/Continue',
},
{
'<leader>db',
function()
require('dap').toggle_breakpoint()
end,
desc = 'Debug: Toggle Breakpoint',
},
{
'<leader>dt',
function()
require('dap').terminate()
end,
desc = 'Debug: Terminate',
},
{
'<leader>di',
function()
require('dap').step_into()
end,
desc = 'Debug: Step Into',
},
{
'<leader>do',
function()
require('dap').step_over()
end,
desc = 'Debug: Step Over',
},
{
'<leader>dr',
function()
require('dap').repl.open()
end,
desc = 'Debug: Open REPL',
},
}, },
config = function() config = function()
local dap = require('dap') local dap = require('dap')
local dapui = require('dapui') local dapui = require('dapui')
-- Configure dapui -- Configure dapui
dapui.setup() dapui.setup()
-- Configure Python -- Configure Python
require('dap-python').setup(vim.fn.exepath('python3')) require('dap-python').setup(vim.fn.exepath('python3'))
-- Auto open/close dapui -- Auto open/close dapui
dap.listeners.after.event_initialized['dapui_config'] = function() dapui.open() end dap.listeners.after.event_initialized['dapui_config'] = function()
dap.listeners.before.event_terminated['dapui_config'] = function() dapui.close() end dapui.open()
dap.listeners.before.event_exited['dapui_config'] = function() dapui.close() end end
end dap.listeners.before.event_terminated['dapui_config'] = function()
} dapui.close()
end
dap.listeners.before.event_exited['dapui_config'] = function()
dapui.close()
end
end,
},
} }
-- The line beneath this is called `modeline`. See `:help modeline` -- The line beneath this is called `modeline`. See `:help modeline`

View File

@ -1,67 +1,89 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
return { return {
"nvim-neo-tree/neo-tree.nvim", 'nvim-neo-tree/neo-tree.nvim',
dependencies = { "MunifTanjim/nui.nvim" }, dependencies = { 'MunifTanjim/nui.nvim' },
cmd = "Neotree", cmd = 'Neotree',
init = function() vim.g.neo_tree_remove_legacy_commands = true end, init = function()
vim.g.neo_tree_remove_legacy_commands = true
end,
opts = function() opts = function()
return { return {
auto_clean_after_session_restore = true, auto_clean_after_session_restore = true,
close_if_last_window = true, close_if_last_window = true,
sources = { "filesystem", "buffers", "git_status" }, sources = { 'filesystem', 'buffers', 'git_status' },
source_selector = { source_selector = {
sources = { sources = {
{ source = "filesystem", display_name = " 󰉓 Files " }, { source = 'filesystem', display_name = ' 󰉓 Files ' },
{ source = "git_status", display_name = " 󰊢 Git " }, { source = 'git_status', display_name = ' 󰊢 Git ' },
}, },
}, },
default_component_configs = { default_component_configs = {
icon = { icon = {
folder_empty = "!", folder_empty = '!',
folder_empty_open = "!O", folder_empty_open = '!O',
}, },
git_status = { git_status = {
symbols = { symbols = {
renamed = "󰁕", renamed = '󰁕',
unstaged = "💣", unstaged = '💣',
}, },
}, },
}, },
document_symbols = { document_symbols = {
kinds = { kinds = {
File = { icon = "󰈙", hl = "Tag" }, File = { icon = '󰈙', hl = 'Tag' },
Namespace = { icon = "󰌗", hl = "Include" }, Namespace = { icon = '󰌗', hl = 'Include' },
Package = { icon = "󰏖", hl = "Label" }, Package = { icon = '󰏖', hl = 'Label' },
Class = { icon = "󰌗", hl = "Include" }, Class = { icon = '󰌗', hl = 'Include' },
Property = { icon = "󰆧", hl = "@property" }, Property = { icon = '󰆧', hl = '@property' },
Enum = { icon = "󰒻", hl = "@number" }, Enum = { icon = '󰒻', hl = '@number' },
Function = { icon = "󰊕", hl = "Function" }, Function = { icon = '󰊕', hl = 'Function' },
String = { icon = "󰀬", hl = "String" }, String = { icon = '󰀬', hl = 'String' },
Number = { icon = "󰎠", hl = "Number" }, Number = { icon = '󰎠', hl = 'Number' },
Array = { icon = "󰅪", hl = "Type" }, Array = { icon = '󰅪', hl = 'Type' },
Object = { icon = "󰅩", hl = "Type" }, Object = { icon = '󰅩', hl = 'Type' },
Key = { icon = "󰌋", hl = "" }, Key = { icon = '󰌋', hl = '' },
Struct = { icon = "󰌗", hl = "Type" }, Struct = { icon = '󰌗', hl = 'Type' },
Operator = { icon = "󰆕", hl = "Operator" }, Operator = { icon = '󰆕', hl = 'Operator' },
TypeParameter = { icon = "󰊄", hl = "Type" }, TypeParameter = { icon = '󰊄', hl = 'Type' },
StaticMethod = { icon = '󰠄 ', hl = 'Function' }, StaticMethod = { icon = '󰠄 ', hl = 'Function' },
}, },
}, },
commands = { commands = {
parent_or_close = function(state) parent_or_close = function(state)
local node = state.tree:get_node() local node = state.tree:get_node()
if (node.type == "directory" or node:has_children()) and node:is_expanded() then if (node.type == 'directory' or node:has_children()) and node:is_expanded() then
state.commands.toggle_node(state) state.commands.toggle_node(state)
else else
require("neo-tree.ui.renderer").focus_node(state, node:get_parent_id()) require('neo-tree.ui.renderer').focus_node(state, node:get_parent_id())
end end
end, end,
child_or_open = function(state) child_or_open = function(state)
local node = state.tree:get_node() local node = state.tree:get_node()
if node.type == "directory" or node:has_children() then if node.type == 'directory' or node:has_children() then
if not node:is_expanded() then -- if unexpanded, expand if not node:is_expanded() then -- if unexpanded, expand
state.commands.toggle_node(state) state.commands.toggle_node(state)
else -- if expanded and has children, seleect the next child else -- if expanded and has children, seleect the next child
require("neo-tree.ui.renderer").focus_node(state, node:get_child_ids()[1]) require('neo-tree.ui.renderer').focus_node(state, node:get_child_ids()[1])
end end
else -- if not a directory just open it else -- if not a directory just open it
state.commands.open(state) state.commands.open(state)
@ -74,62 +96,64 @@ return {
local modify = vim.fn.fnamemodify local modify = vim.fn.fnamemodify
local results = { local results = {
e = { val = modify(filename, ":e"), msg = "Extension only" }, e = { val = modify(filename, ':e'), msg = 'Extension only' },
f = { val = filename, msg = "Filename" }, f = { val = filename, msg = 'Filename' },
F = { val = modify(filename, ":r"), msg = "Filename w/o extension" }, F = { val = modify(filename, ':r'), msg = 'Filename w/o extension' },
h = { val = modify(filepath, ":~"), msg = "Path relative to Home" }, h = { val = modify(filepath, ':~'), msg = 'Path relative to Home' },
p = { val = modify(filepath, ":."), msg = "Path relative to CWD" }, p = { val = modify(filepath, ':.'), msg = 'Path relative to CWD' },
P = { val = filepath, msg = "Absolute path" }, P = { val = filepath, msg = 'Absolute path' },
} }
local messages = { local messages = {
{ "\nChoose to copy to clipboard:\n", "Normal" }, { '\nChoose to copy to clipboard:\n', 'Normal' },
} }
for i, result in pairs(results) do for i, result in pairs(results) do
if result.val and result.val ~= "" then if result.val and result.val ~= '' then
vim.list_extend(messages, { vim.list_extend(messages, {
{ ("%s."):format(i), "Identifier" }, { ('%s.'):format(i), 'Identifier' },
{ (" %s: "):format(result.msg) }, { (' %s: '):format(result.msg) },
{ result.val, "String" }, { result.val, 'String' },
{ "\n" }, { '\n' },
}) })
end end
end end
vim.api.nvim_echo(messages, false, {}) vim.api.nvim_echo(messages, false, {})
local result = results[vim.fn.getcharstr()] local result = results[vim.fn.getcharstr()]
if result and result.val and result.val ~= "" then if result and result.val and result.val ~= '' then
vim.fn.setreg("+", result.val) vim.fn.setreg('+', result.val)
end end
end, end,
find_in_dir = function(state) find_in_dir = function(state)
local node = state.tree:get_node() local node = state.tree:get_node()
local path = node:get_id() local path = node:get_id()
require("telescope.builtin").find_files { require('telescope.builtin').find_files({
cwd = node.type == "directory" and path or vim.fn.fnamemodify(path, ":h"), cwd = node.type == 'directory' and path or vim.fn.fnamemodify(path, ':h'),
} })
end, end,
}, },
window = { window = {
width = 30, width = 30,
mappings = { mappings = {
["<space>"] = false, -- disable space until we figure out which-key disabling ['<space>'] = false, -- disable space until we figure out which-key disabling
["[b"] = "prev_source", ['[b'] = 'prev_source',
["]b"] = "next_source", [']b'] = 'next_source',
Y = "copy_selector", Y = 'copy_selector',
h = "parent_or_close", h = 'parent_or_close',
l = "child_or_open", l = 'child_or_open',
o = "open", o = 'open',
}, },
}, },
filesystem = { filesystem = {
follow_current_file = true, follow_current_file = true,
hijack_netrw_behavior = "open_current", hijack_netrw_behavior = 'open_current',
use_libuv_file_watcher = true, use_libuv_file_watcher = true,
}, },
event_handlers = { event_handlers = {
{ {
event = "neo_tree_buffer_enter", event = 'neo_tree_buffer_enter',
handler = function(_) vim.opt_local.signcolumn = "auto" end, handler = function(_)
vim.opt_local.signcolumn = 'auto'
end,
}, },
}, },
} }

View File

@ -1,9 +1,34 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
return { return {
'ThePrimeagen/harpoon', 'ThePrimeagen/harpoon',
config = function() config = function()
require('harpoon').setup() require('harpoon').setup()
vim.keymap.set('n', '<leader>ha', require('harpoon.mark').add_file, { desc = '[H]arpoon [A]dd file' }) vim.keymap.set('n', '<leader>ha', require('harpoon.mark').add_file, { desc = '[H]arpoon [A]dd file' })
vim.keymap.set('n', '<leader>ht', require('harpoon.ui').toggle_quick_menu, { desc = '[H]arpoon [T]oggle quick menu' }) vim.keymap.set(
'n',
'<leader>ht',
require('harpoon.ui').toggle_quick_menu,
{ desc = '[H]arpoon [T]oggle quick menu' }
)
vim.keymap.set('n', '<leader>hn', require('harpoon.ui').nav_next, { desc = '[H]arpoon nav [N]ext' }) vim.keymap.set('n', '<leader>hn', require('harpoon.ui').nav_next, { desc = '[H]arpoon nav [N]ext' })
vim.keymap.set('n', '<leader>hp', require('harpoon.ui').nav_prev, { desc = '[H]arpoon nav [P]revious' }) vim.keymap.set('n', '<leader>hp', require('harpoon.ui').nav_prev, { desc = '[H]arpoon nav [P]revious' })
vim.keymap.set('n', '<leader>h1', function() vim.keymap.set('n', '<leader>h1', function()

View File

@ -1,10 +1,35 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- You can add your own plugins here or in other files in this directory! -- You can add your own plugins here or in other files in this directory!
-- I promise not to create any merge conflicts in this directory :) -- I promise not to create any merge conflicts in this directory :)
-- --
-- See the kickstart.nvim README for more information -- See the kickstart.nvim README for more information
return { return {
-- Add trouble.nvim plugin -- Add trouble.nvim plugin
{ 'folke/trouble.nvim', event = 'VimEnter', dependencies = { 'nvim-tree/nvim-web-devicons' }, config = function() {
require('trouble').setup {} 'folke/trouble.nvim',
end }, event = 'VimEnter',
dependencies = { 'nvim-tree/nvim-web-devicons' },
config = function()
require('trouble').setup({})
end,
},
} }

View File

@ -1,3 +1,28 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
if not vim then
return
end
local bufnr = vim.api.nvim_get_current_buf()
return { return {
-- local function map(mode, lhs, rhs, opts) -- local function map(mode, lhs, rhs, opts)
-- local options = { noremap=true, silent=true } -- local options = { noremap=true, silent=true }
@ -7,31 +32,21 @@ return {
-- vim.api.nvim_set_keymap(mode, lhs, rhs, options) -- vim.api.nvim_set_keymap(mode, lhs, rhs, options)
-- end -- end
vim.keymap.set('n', '<leader>ff', ":Telescope find_files<cr>", {}), vim.keymap.set('n', '<leader>ff', ':Telescope find_files<cr>', {}),
vim.keymap.set('n', '<leader>fg', ":Telescope live_grep<cr>", {}), vim.keymap.set('n', '<leader>fg', ':Telescope live_grep<cr>', {}),
vim.keymap.set('n', '<leader>fb', ":Telescope buffers<cr>", {}), vim.keymap.set('n', '<leader>fb', ':Telescope buffers<cr>', {}),
vim.keymap.set('n', '<leader>fh', ":Telescope help_tags", {}), vim.keymap.set('n', '<leader>fh', ':Telescope help_tags', {}),
-- map("n", "<s-h>", ":bn") -- map("n", "<s-h>", ":bn")
vim.keymap.set( vim.keymap.set('n', '<S-h>', ':bp<cr>', {
'n', buffer = bufnr,
'<S-h>', desc = '[G]o to [P]revious Buffer',
":bp<cr>", }),
{
buffer = bufnr,
desc = '[G]o to [P]revious Buffer'
}
),
-- map("n", "<s-l>", ":bp") -- map("n", "<s-l>", ":bp")
vim.keymap.set( vim.keymap.set('n', '<S-l>', ':bn<cr>', {
'n', buffer = bufnr,
'<S-l>', desc = '[G]o to [N]ext Buffer',
":bn<cr>", }),
{
buffer = bufnr,
desc = '[G]o to [N]ext Buffer'
}
)
-- map("n", "<leader>bq", ":Bdelete") -- map("n", "<leader>bq", ":Bdelete")
-- vim.keymap.set( -- vim.keymap.set(

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- python-debugging.lua: Debugging Python code with DAP -- python-debugging.lua: Debugging Python code with DAP
-- --
@ -45,7 +65,7 @@ return {
repl_definition = { repl_definition = {
python = { python = {
command = function() command = function()
local ipythonAvailable = vim.fn.executable 'ipython' == 1 local ipythonAvailable = vim.fn.executable('ipython') == 1
local binary = ipythonAvailable and 'ipython' or 'python3' local binary = ipythonAvailable and 'ipython' or 'python3'
return { binary } return { binary }
end, end,

View File

@ -1,3 +1,27 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
if not vim then
return
end
-- [[ Basic Keymaps ]] -- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()` -- See `:help vim.keymap.set()`
@ -38,9 +62,9 @@ vim.keymap.set('n', '<leader>wa', ':wall<CR>', { noremap = true, desc = '[W]rite
vim.keymap.set('n', '<leader>wf', ':w<CR>', { noremap = true, desc = '[W]rite [F]ile' }) vim.keymap.set('n', '<leader>wf', ':w<CR>', { noremap = true, desc = '[W]rite [F]ile' })
-- Create command do save with qw -- Create command do save with qw
vim.api.nvim_command 'cmap qw wq' vim.api.nvim_command('cmap qw wq')
vim.api.nvim_command 'cmap WQ wq' vim.api.nvim_command('cmap WQ wq')
vim.api.nvim_command 'cmap QW wq' vim.api.nvim_command('cmap QW wq')
-- Navigate buffers -- Navigate buffers
vim.keymap.set('n', '<S-h>', ':bp<CR>', { noremap = true, desc = '[G]oto [P]revious Buffer' }) vim.keymap.set('n', '<S-h>', ':bp<CR>', { noremap = true, desc = '[G]oto [P]revious Buffer' })
@ -58,4 +82,9 @@ vim.keymap.set('n', '<leader>taa', ':!make applyA<CR>', opts)
-- Better copy-paste between vim and system clipboard -- Better copy-paste between vim and system clipboard
vim.api.nvim_set_keymap('v', '<C-c>', '"+y', { noremap = true, silent = true, desc = 'Copy to system clipboard' }) vim.api.nvim_set_keymap('v', '<C-c>', '"+y', { noremap = true, silent = true, desc = 'Copy to system clipboard' })
vim.api.nvim_set_keymap('n', '<C-v>', '"+p', { noremap = true, silent = true, desc = 'Paste from system clipboard' }) vim.api.nvim_set_keymap('n', '<C-v>', '"+p', { noremap = true, silent = true, desc = 'Paste from system clipboard' })
vim.api.nvim_set_keymap('i', '<C-v>', '<C-r>+', { noremap = true, silent = true, desc = 'Paste from system clipboard in insert mode' }) vim.api.nvim_set_keymap(
'i',
'<C-v>',
'<C-r>+',
{ noremap = true, silent = true, desc = 'Paste from system clipboard in insert mode' }
)

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
--[[ --[[
-- --
-- This file is not required for your own configuration, -- This file is not required for your own configuration,
@ -21,7 +41,7 @@ end
local check_external_reqs = function() local check_external_reqs = function()
-- Basic utils: `git`, `make`, `unzip` -- Basic utils: `git`, `make`, `unzip`
for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do for _, exe in ipairs({ 'git', 'make', 'unzip', 'rg' }) do
local is_executable = vim.fn.executable(exe) == 1 local is_executable = vim.fn.executable(exe) == 1
if is_executable then if is_executable then
vim.health.ok(string.format("Found executable: '%s'", exe)) vim.health.ok(string.format("Found executable: '%s'", exe))
@ -35,13 +55,13 @@ end
return { return {
check = function() check = function()
vim.health.start 'kickstart.nvim' vim.health.start('kickstart.nvim')
vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth` vim.health.info([[NOTE: Not every warning is a 'must-fix' in `:checkhealth`
Fix only warnings for plugins and languages you intend to use. Fix only warnings for plugins and languages you intend to use.
Mason will give warnings for languages that are not installed. Mason will give warnings for languages that are not installed.
You do not need to install, unless you want to use those languages!]] You do not need to install, unless you want to use those languages!]])
local uv = vim.uv or vim.loop local uv = vim.uv or vim.loop
vim.health.info('System Information: ' .. vim.inspect(uv.os_uname())) vim.health.info('System Information: ' .. vim.inspect(uv.os_uname()))

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- autoformat.lua -- autoformat.lua
-- --
-- Use your language server to automatically format your code on save. -- Use your language server to automatically format your code on save.
@ -60,12 +80,12 @@ return {
return return
end end
vim.lsp.buf.format { vim.lsp.buf.format({
async = false, async = false,
filter = function(c) filter = function(c)
return c.id == client.id return c.id == client.id
end, end,
} })
end, end,
}) })
end, end,

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- autopairs -- autopairs
-- https://github.com/windwp/nvim-autopairs -- https://github.com/windwp/nvim-autopairs
@ -7,10 +27,10 @@ return {
-- Optional dependency -- Optional dependency
dependencies = { 'hrsh7th/nvim-cmp' }, dependencies = { 'hrsh7th/nvim-cmp' },
config = function() config = function()
require('nvim-autopairs').setup {} require('nvim-autopairs').setup({})
-- If you want to automatically add `(` after selecting a function or method -- If you want to automatically add `(` after selecting a function or method
local cmp_autopairs = require 'nvim-autopairs.completion.cmp' local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local cmp = require 'cmp' local cmp = require('cmp')
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
end, end,
} }

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- debug.la -- debug.la
-- --
-- Shows how to use the DAP plugin to debug your code. -- Shows how to use the DAP plugin to debug your code.
@ -69,7 +89,7 @@ return {
{ {
'<leader>B', '<leader>B',
function() function()
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: '))
end, end,
desc = 'Debug: Set Breakpoint', desc = 'Debug: Set Breakpoint',
}, },
@ -83,13 +103,11 @@ return {
}, },
}, },
config = function() config = function()
local dap = require 'dap' local dap = require('dap')
local dapui = require 'dapui' local dapui = require('dapui')
local path = require('mason-registry').get_package('debugpy'):get_install_path() require('dap-python').setup(os.getenv('PYENV_ROOT') .. '/versions/3.11.9/bin/python')
require('dap-python').setup(os.getenv 'PYENV_ROOT' .. '/versions/3.11.9/bin/python') require('mason-nvim-dap').setup({
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with -- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations -- reasonable debug configurations
automatic_installation = true, automatic_installation = true,
@ -109,11 +127,11 @@ return {
'jq', 'jq',
'stylua', 'stylua',
}, },
} })
-- Dap UI setup -- Dap UI setup
-- For more information, see |:help nvim-dap-ui| -- For more information, see |:help nvim-dap-ui|
dapui.setup { dapui.setup({
-- Set icons to characters that are more likely to work in every terminal. -- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :) -- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices. -- Don't feel like these are good choices.
@ -131,7 +149,7 @@ return {
disconnect = '', disconnect = '',
}, },
}, },
} })
-- Change breakpoint icons -- Change breakpoint icons
-- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' }) -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
@ -150,12 +168,12 @@ return {
dap.listeners.before.event_exited['dapui_config'] = dapui.close dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config -- Install golang specific config
require('dap-go').setup { require('dap-go').setup({
delve = { delve = {
-- On Windows delve must be run attached or it crashes. -- On Windows delve must be run attached or it crashes.
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
detached = vim.fn.has 'win32' == 0, detached = vim.fn.has('win32') == 0,
}, },
} })
end, end,
} }

View File

@ -1,3 +1,23 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-- Adds git related signs to the gutter, as well as utilities for managing changes -- Adds git related signs to the gutter, as well as utilities for managing changes
-- NOTE: gitsigns is already included in init.lua but contains only the base -- NOTE: gitsigns is already included in init.lua but contains only the base
-- config. This will add also the recommended keymaps. -- config. This will add also the recommended keymaps.
@ -7,7 +27,7 @@ return {
'lewis6991/gitsigns.nvim', 'lewis6991/gitsigns.nvim',
opts = { opts = {
on_attach = function(bufnr) on_attach = function(bufnr)
local gitsigns = require 'gitsigns' local gitsigns = require('gitsigns')
local function map(mode, l, r, opts) local function map(mode, l, r, opts)
opts = opts or {} opts = opts or {}
@ -18,27 +38,27 @@ return {
-- Navigation -- Navigation
map('n', ']c', function() map('n', ']c', function()
if vim.wo.diff then if vim.wo.diff then
vim.cmd.normal { ']c', bang = true } vim.cmd.normal({ ']c', bang = true })
else else
gitsigns.nav_hunk 'next' gitsigns.nav_hunk('next')
end end
end, { desc = 'Jump to next git [c]hange' }) end, { desc = 'Jump to next git [c]hange' })
map('n', '[c', function() map('n', '[c', function()
if vim.wo.diff then if vim.wo.diff then
vim.cmd.normal { '[c', bang = true } vim.cmd.normal({ '[c', bang = true })
else else
gitsigns.nav_hunk 'prev' gitsigns.nav_hunk('prev')
end end
end, { desc = 'Jump to previous git [c]hange' }) end, { desc = 'Jump to previous git [c]hange' })
-- Actions -- Actions
-- visual mode -- visual mode
map('v', '<leader>hs', function() map('v', '<leader>hs', function()
gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, { desc = 'git [s]tage hunk' }) end, { desc = 'git [s]tage hunk' })
map('v', '<leader>hr', function() map('v', '<leader>hr', function()
gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, { desc = 'git [r]eset hunk' }) end, { desc = 'git [r]eset hunk' })
-- normal mode -- normal mode
map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' })
@ -50,7 +70,7 @@ return {
map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' }) map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' })
map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' }) map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' })
map('n', '<leader>hD', function() map('n', '<leader>hD', function()
gitsigns.diffthis '@' gitsigns.diffthis('@')
end, { desc = 'git [D]iff against last commit' }) end, { desc = 'git [D]iff against last commit' })
-- Toggles -- Toggles
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' }) map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' })

View File

@ -1,10 +1,30 @@
# MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
return { return {
{ -- Linting { -- Linting
'mfussenegger/nvim-lint', 'mfussenegger/nvim-lint',
event = { 'BufReadPre', 'BufNewFile' }, event = { 'BufReadPre', 'BufNewFile' },
config = function() config = function()
local lint = require 'lint' local lint = require('lint')
lint.linters_by_ft = { lint.linters_by_ft = {
dockerfile = { 'hadolint' }, dockerfile = { 'hadolint' },
json = { 'jsonlint' }, json = { 'jsonlint' },

View File

@ -1,32 +1,37 @@
# Current Session Context # Neovim Configuration Active Context
*Last Updated: 2025-02-18 18:31*
## Current State ## Current Session Context
- Working on mode_manager plugin integration [2024-02-22 13:00] Initial Memory Bank setup
- Focusing on proper plugin specification and initialization
- Implementing enhanced mode state management system
## Recent Changes ## Recent Changes
- Created backup branch of pre-rollback state - Created Memory Bank structure
- Rolled back codebase to v0.1.0 tag - Initialized core documentation files
- Previous state preserved in backup branch - Established project organization
- Started mode_manager plugin implementation
## Active Decisions
1. Using Memory Bank for configuration documentation
2. Following Kickstart.nvim's modular approach
3. Implementing comprehensive LSP integration
4. Using mode-based workflow with persistent Plan/Act toggle
5. Implementing enhanced mode state management system
## Current Focus ## Current Focus
- Implementing mode_manager plugin properly - Setting up base configuration structure
- Resolving plugin specification issues - Documenting existing setup
- Setting up proper initialization hooks - Planning plugin organization
- Integrating with custom_statusline
## Active Decisions
1. Using modular Lua configuration
2. Implementing lazy plugin loading
3. Organizing debug capabilities
## Next Steps
1. Review existing plugin configurations
2. Document current plugin setup
3. Evaluate debug integration
4. Plan performance optimizations
## Open Questions ## Open Questions
- What were the key changes between v0.1.0 and the rolled back state? 1. Which plugins need custom configurations?
- Which features need to be reimplemented or reconsidered? 2. Are there any performance bottlenecks?
- How to prevent future need for rollbacks? 3. What debug adapters are required?
- How to best structure the mode_manager plugin initialization? 4. How to optimize startup time?
## Implementation Notes
- Need to document plugin dependencies
- Consider startup performance
- Review debug configuration needs
- Plan LSP server setup

View File

@ -79,4 +79,4 @@ Implement an enhanced mode state management system with the following key compon
- Decision approved - Decision approved
- Implementation planning in progress - Implementation planning in progress
- Initial architecture documented - Initial architecture documented
- Ready for code mode implementation - Ready for code mode implementation

View File

@ -1,24 +1,33 @@
# Project Overview: Neovim Configuration # Neovim Configuration Product Context
## Purpose ## Purpose
This project is a personal Neovim configuration based on Kickstart.nvim framework, designed to provide a powerful yet maintainable development environment. This Neovim configuration exists to provide a powerful, customizable development environment that enhances productivity through modern editor features and efficient workflow patterns.
## Goals ## Problems Solved
1. Create a productive and efficient development environment 1. Complex plugin management
2. Maintain a clean and organized configuration structure 2. Development environment setup time
3. Support multiple programming languages 3. Code navigation efficiency
4. Provide essential IDE-like features through LSP integration 4. Debug workflow integration
5. Configuration maintainability
## Key Features ## Intended Usage
- LSP integration for multiple languages - Primary development environment for coding
- Fuzzy finding with Telescope - Plugin management through Lua modules
- Git integration - Integrated debugging capabilities
- Code formatting and linting - Efficient code navigation and completion
- Syntax highlighting with Treesitter - Custom keybindings and commands
- Completion with nvim-cmp
## User Experience Goals ## User Experience Goals
- Fast and responsive editing 1. Fast and responsive editing
- Intuitive keybindings 2. Intuitive plugin management
- Clear visual feedback 3. Clear error feedback
- Minimal configuration needed for basic use 4. Efficient code navigation
5. Seamless debugging experience
6. Easy configuration updates
## Design Principles
1. Modularity: Separate concerns for easier maintenance
2. Performance: Optimize for speed and responsiveness
3. Clarity: Clear structure and documentation
4. Extensibility: Easy to add new features
5. Reliability: Stable and predictable behavior

View File

@ -1,41 +1,46 @@
# Progress Update # Neovim Configuration Progress
## Current Status ## Current Status
Working on mode_manager plugin implementation with enhanced state management. [2024-02-22 13:01] Memory Bank initialization
## Completed Tasks ### What Works
1. System rollback to v0.1.0 - Basic directory structure
- Created backup branch - Core documentation setup
- Successfully rolled back to stable version - Initial project organization
- Preserved previous state
2. Architecture Planning ### In Progress
- Defined enhanced mode state management system 1. Documentation of existing setup
- Documented implementation phases 2. Plugin configuration review
- Established integration patterns 3. Debug capability assessment
## In Progress ### Known Issues
1. Mode Manager Plugin Implementation: - Need to document current plugin dependencies
- Converting mode_manager.lua into proper plugin structure - Debug configuration needs review
- Setting up initialization hooks - Performance optimization opportunities
- Implementing state persistence layer - LSP setup documentation needed
- Adding event system foundations
2. Integration Work:
- Configuring plugin specification in init.lua
- Setting up custom_statusline integration
- Implementing mode-aware functionality
## Next Steps ## Next Steps
1. Complete core state management implementation
2. Add event system with hooks and queuing
3. Implement persistence layer with versioning
4. Set up plugin and UI integration components
## Technical Requirements ### Short Term
- Proper plugin specification format 1. Review and document current plugin setup
- Local plugin integration 2. Assess debug integration status
- Correct module initialization 3. Document LSP configuration
- State persistence mechanisms 4. Map performance bottlenecks
- Event handling system
- Integration interfaces ### Medium Term
1. Optimize plugin loading
2. Enhance debug capabilities
3. Improve LSP integration
4. Add custom keybindings
### Long Term
1. Create comprehensive documentation
2. Implement performance improvements
3. Extend debug functionality
4. Enhance plugin ecosystem
## Completed Work
[2024-02-22]
- Created Memory Bank structure
- Initialized core documentation
- Established project organization

View File

@ -0,0 +1,25 @@
# Neovim Configuration Project Brief
## Project Overview
Custom Neovim configuration project focused on creating an optimized, maintainable, and feature-rich development environment using Lua.
## Core Requirements
1. Modular plugin management
2. Efficient code navigation and editing
3. Debugging capabilities
4. Code completion and LSP support
5. Clean and maintainable configuration structure
## Project Goals
- Create a well-organized Neovim configuration
- Implement efficient plugin management
- Establish consistent coding patterns
- Enable debugging capabilities
- Maintain documentation for future reference
## Success Criteria
1. Working plugin system
2. Functional debugging setup
3. Clear configuration structure
4. Documented setup and usage
5. Maintainable codebase

View File

@ -1,73 +1,65 @@
# System Architecture & Patterns # Neovim Configuration System Patterns
## Core Architecture ## Architecture Overview
- Plugin management via lazy.nvim
- LSP-based intellisense and code navigation
- Event-driven configuration loading
- Modular plugin configuration
- Enhanced mode state management system
## Key Design Patterns ### Directory Structure
```
.
├── init.lua # Main entry point
├── lua/
│ ├── custom/ # Custom configurations
│ │ └── plugins/ # Plugin-specific settings
│ └── kickstart/ # Core functionality
│ └── plugins/ # Plugin management
```
1. Mode Management ## Design Patterns
- Advanced state persistence
- Event-driven mode transitions
- Mode-specific context preservation
- Pre/post mode change hooks
- Mode validation system
- Mode-specific settings store
2. Event System ### Plugin Management
- Hierarchical event handling - Module-based plugin organization
- Event queueing mechanism - Lazy loading for performance
- Async event processing - Plugin-specific configuration isolation
- Event prioritization - Conditional plugin loading
- Mode-specific event handlers
3. Persistence Layer ### Configuration Patterns
- Versioned state storage 1. Modular Configuration
- State migration system - Separate files for different concerns
- Corruption detection - Clear dependency management
- Fallback mechanisms - Isolated plugin configurations
- Incremental state updates
4. Integration Patterns 2. Event-Driven Setup
- Mode-aware plugin system - Lazy plugin loading
- LSP integration with mode context - Event-based initialization
- Buffer grouping by mode - Conditional feature enabling
- Window layout persistence
- Mode-specific UI elements
5. Configuration Patterns 3. Error Handling
- Centralized keybinding management - Protected calls for plugin setup
- Plugin-specific configuration in separate modules - Fallback configurations
- Default options set through vim.opt - Clear error reporting
- Autocmd groups for event handling
- Mode-specific settings and behaviors
6. LSP Integration ## Component Relationships
- Mason for LSP server management 1. Core System
- Uniform LSP configuration across languages - init.lua loads core modules
- Shared capabilities for completion - Establishes basic editor settings
- Mode-specific language server configurations - Sets up plugin management
7. Component Relationships 2. Plugin System
- Mode Manager ↔ Event System - Managed through lua/custom/plugins
- Event System ↔ Persistence Layer - Isolated plugin configurations
- Mode Manager ↔ Status Line - Dependency handling
- LSP ↔ Mode Context
- Buffer Groups ↔ Mode State
- Window Layout ↔ Mode State
- Plugins ↔ Mode Context
## Implementation Standards 3. Debug Integration
- Lua for all configuration - Separate debug configuration
- Consistent error handling - Language-specific adapters
- Modular plugin organization - Custom debug commands
- Clear separation of concerns
- Mode-aware functionality ## Technical Decisions
- State validation 1. Lua-based configuration for:
- Event-driven architecture - Better performance
- Robust error recovery - More powerful customization
- Configuration versioning - Cleaner syntax
- Context preservation
2. Modular structure for:
- Easier maintenance
- Better organization
- Simplified updates

View File

@ -1,45 +1,58 @@
# Technical Context # Neovim Configuration Technical Context
## Core Technologies ## Technologies Used
- Neovim (Text Editor)
- Lua (Configuration Language)
- Lazy.nvim (Plugin Manager)
## Major Dependencies ### Core
1. LSP Servers & Tools - Neovim (>= 0.8.0)
- lua_ls - Lua (>= 5.1)
- gopls - Git (for plugin management)
- pyright
- terraform-ls
- and many others managed by Mason
2. Key Plugins ### Plugin Management
- nvim-lspconfig: LSP configuration - lazy.nvim (plugin manager)
- telescope.nvim: Fuzzy finder - LSP configurations
- nvim-treesitter: Syntax highlighting - Treesitter for syntax
- nvim-cmp: Completion engine - Debug Adapter Protocol (DAP)
- conform.nvim: Code formatting
- which-key.nvim: Keybinding help
- mini.nvim: Collection of utilities
## Development Setup ## Development Setup
- Uses the Kickstart.nvim framework as base
- Nerd Font required for icons ### Requirements
- Python 3 support configured 1. Neovim installation
- Git integration via fugitive and gitsigns 2. Git for plugin management
3. Language servers for LSP
4. Compilation tools for Treesitter
5. Debug adapters for debugging
### Configuration Structure
1. Main Configuration
- init.lua: Entry point
- lua/custom/: Custom configurations
- lua/kickstart/: Core functionality
2. Plugin Management
- Lazy-loaded plugins
- Plugin-specific settings
- Custom plugin configurations
## Technical Constraints ## Technical Constraints
- Dependent on external LSP servers
- Requires Neovim 0.8.0 or higher
- Some features require system dependencies (make, git)
- Terminal with true color support recommended
## Configuration Structure ### Performance
``` - Lazy loading required for plugins
. - Careful management of startup time
├── init.lua (Main configuration) - Efficient event handling
└── lua/
├── kickstart/ ### Compatibility
│ └── plugins/ (Plugin-specific configs) - Neovim version requirements
└── custom/ - LSP server compatibility
└── plugins/ (Custom plugin configs) - Debug adapter requirements
### Dependencies
- External language servers
- System-level development tools
- Plugin-specific requirements
## Development Tools
1. LSP Servers
2. Debug Adapters
3. Treesitter Parsers
4. Code Formatters
5. Linters

View File

@ -13,4 +13,4 @@ QA: Nambi
- API should be behind https - API should be behind https
- API request should be authenticated and authorized - API request should be authenticated and authorized
## Scalability ## Scalability
- API should handle 1 million request per second - API should handle 1 million request per second

View File

@ -1,12 +1,43 @@
local link = s({ # MIT License
trig = "link", #
name = "Link", # Permission is hereby granted, free of charge, to any person obtaining a copy
dscr = "Web link" # of this software and associated documentation files (the "Software"), to deal
}, { # in the Software without restriction, including without limitation the rights
t({ "`" }), # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
i(1, "Title"), # copies of the Software, and to permit persons to whom the Software is
t(" <"), # furnished to do so, subject to the following conditions:
i(2, "link"), #
t(">`_"), # The above copyright notice and this permission notice shall be included in all
i(0) # copies or substantial portions of the Software.
}) #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
if not vim then
return
end
local ok, ls = pcall(require, 'luasnip')
if not ok then
return
end
local s = ls.snippet
local i = ls.insert_node
return {
s({
trig = 'link',
name = 'Link',
dscr = 'Web link',
}, {
i(1, 'Title'),
i(2, 'link'),
i(0),
}),
}

6
stylua.toml Normal file
View File

@ -0,0 +1,6 @@
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferSingle"
no_call_parentheses = false

View File

@ -1,8 +1,8 @@
# {project name} # High Level Design
## 1. Project Details ## 1. Project Details
- **Project Name**: {Project Name from BRD} - **Project Name**: {Project Name from BRD}
- **Document Version**: 1.0 - **Document Version**: 1.0
## 2. Introduction ## 2. Introduction
@ -10,14 +10,14 @@
- {Short summary of the purpose derived from BRD.} - {Short summary of the purpose derived from BRD.}
### 2.2 Scope ### 2.2 Scope
- {Short summary of the scope derived from BRD & Instructions.} - {Short summary of the scope derived from BRD & Instructions.}
### 2.3 Project Stakeholders ### 2.3 Project Stakeholders
- {List of stakeholders from BRD, such as developers, QA, technical architects, etc.} - {List of stakeholders from BRD, such as developers, QA, technical architects, etc.}
## 3. Business Requirements Summary ## 3. Business Requirements Summary
- {Provide a summary of the high-level business requirements from BRD.} - {Provide a summary of the high-level business requirements from BRD.}
- Example: "The system must allow users to register, log in, and reset passwords." - Example: "The system must allow users to register, log in, and reset passwords."
@ -41,15 +41,14 @@
## 5. System Overview ## 5. System Overview
### 5.1 System Context ### 5.1 System Context
- {Description of the system's high-level context a nd its place in the broader ecosystem.} - {Description of the system's high-level context and its place in the broader ecosystem.}
### 5.2 System Goals and Objectives ### 5.2 System Goals and Objectives
- {System Goals and Objectives} - {System Goals and Objectives}
- **Primary Goals**: - **Primary Goals**:
- Goal 1: - Goal 1: Description of goal.
Description of goal. - Goal 2: Description of goal.
- Goal 2: Description of goal. - **Performance Objectives**:
- **Performance Objectives**:
- {Expected system performance objectives.} - {Expected system performance objectives.}
@ -62,21 +61,20 @@ Description of goal.
- {List of internal systems involved in this design.} - {List of internal systems involved in this design.}
### 6.3 High-Level Component Diagram ### 6.3 High-Level Component Diagram
- {As a software architect, create a mermaid component diagram based on provided Data Flow Diagram and aling that to the requirement} - {As a software architect, create a mermaid component diagram based on provided Data Flow Diagram and align that to the requirement}
### 6.4 Component Descriptions ### 6.4 Component Descriptions
#### 6.4.1 {Comp onent Name} #### 6.4.1 {Component Name}
- **Responsibility**: {Responsibilities of the component} - **Responsibility**: {Responsibilities of the component}
- **Interfaces**: {Interfaces provided or used by the component.} - **Interfaces**: {Interfaces provided or used by the component.}
- **Dependencies**: {Dependencies on other components or systems.} - **Dependencies**: {Dependencies on other components or systems.}
## 7. System Interactions ## 7. System Interactions
### 7.1 External System Interactions ### 7.1 External System Interactions
- {Description of interactions with ex - {Description of interactions with external systems or services.}
ternal systems or services.}
### 7.2 Communication Protocols ### 7.2 Communication Protocols
- {Details of communication mechanisms, protocols, and data exchange formats.} - {Details of communication mechanisms, protocols, and data exchange formats.}
@ -85,8 +83,7 @@ ternal systems or services.}
## 8. Performance Considerations ## 8. Performance Considerations
### 8.1 Performance Requirements ### 8.1 Performance Requirements
- {Expected response times, sca - {Expected response times, scalability requirements, and concurrent user handling.}
lability requirements, and concurrent user handling.}
### 8.2 Performance Constraints ### 8.2 Performance Constraints
- {List known performance limitations or bottlenecks.} - {List known performance limitations or bottlenecks.}
@ -95,8 +92,7 @@ lability requirements, and concurrent user handling.}
## 9. Security Architecture ## 9. Security Architecture
### 9.1 Security Requirements ### 9.1 Security Requirements
- {Authentication mechanisms, authorization strategies, and dat - {Authentication mechanisms, authorization strategies, and data encryption approaches from BRD & Instructions.}
a encryption approaches from BRD & Instructions.}
### 9.2 Threat Mitigation ### 9.2 Threat Mitigation
- {Strategies for addressing potential security vulnerabilities.} - {Strategies for addressing potential security vulnerabilities.}
@ -105,8 +101,7 @@ a encryption approaches from BRD & Instructions.}
## 10. Deployment Architecture ## 10. Deployment Architecture
### 10.1 Deployment Topology ### 10.1 Deployment Topology
- {Describe deployment environments (Development, Stagin - {Describe deployment environments (Development, Staging, Production).}
g, Production).}
### 10.2 Infrastructure Requirements ### 10.2 Infrastructure Requirements
- {Hardware specifications, network configuration, and cloud/on-premise considerations.} - {Hardware specifications, network configuration, and cloud/on-premise considerations.}
@ -115,8 +110,7 @@ g, Production).}
## 11. Technology Stack ## 11. Technology Stack
### 11.1 Programming Languages ### 11.1 Programming Languages
- {List primary programming l - {List primary programming languages.}
anguages.}
### 11.2 Frameworks and Libraries ### 11.2 Frameworks and Libraries
- {Enumerate key frameworks and libraries.} - {Enumerate key frameworks and libraries.}
@ -127,8 +121,7 @@ anguages.}
## 12. Constraints and Assumptions ## 12. Constraints and Assumptions
### 12. ### 12.1 Technical Constraints
1 Technical Constraints
- {List technical limitations or restrictions.} - {List technical limitations or restrictions.}
### 12.2 Business Constraints ### 12.2 Business Constraints
@ -137,26 +130,24 @@ anguages.}
## 13. Open Issues and Risks ## 13. Open Issues and Risks
### 13. ### 13.1 Known Risks
1 Known Risks
- {Identify potential risks and mitigation strategies.} - {Identify potential risks and mitigation strategies.}
### 13.2 Unresolved Design Decisions ### 13.2 Unresolved Design Decisions
- {List any pe n - {List any pending design decisions.}
ding design decisions.}
## 14. Appendices ## 14. Appendices
### 14.1 Glossary ### 14.1 Glossary
- {Define technical te----rms and acronyms.} - {Define technical terms and acronyms.}
### 1---4.2 References ### 14.2 References
- {Any links fr om BRD} - {Any links from BRD}
## 15. Revision History ## 15. Revision History
| Version | Date | Description | Author | | Version | Date | Description | Author |
|---------|------------|---------------|-------------| |---------|------------|---------------|-------------|
| {1.0} | {Date} | Initial Draft | {Author} | | {1.0} | {Date} | Initial Draft | {Author} |