diff --git a/init.lua b/init.lua index d2c0fd5..067df7e 100644 --- a/init.lua +++ b/init.lua @@ -12,219 +12,6 @@ require 'keymap' require 'autocmd' require 'lazy_init' --- nnoremap ev :tabedit $MYVIMRC - --- The line beneath this is called `modeline`. See `:help modeline` --- vim: ts=2 sts=2 sw=2 et - --- " Mappings --- {{{ --- " Editing files - {{{ --- "Make it easy to edit the vimrc file --- " }}} --- --- "Changing unused ctrl bindings --- "Turn on git blame --- nnoremap Git blame --- "List all tags in the current buffer (replaced pageup, use CTRL-u instead) --- nnoremap CocFzfList outline --- "List all tags in directory --- "nnoremap Tags --- "List all the recently opened files (replaced scroll one line up, use "k") --- nnoremap History --- "Search within the current buffer (replaced pagedown, use CTRL-d instead) --- "nnoremap / --- "Search within the whole project --- nnoremap Rg --- "Move line down (uses vim-unimpaired) (replaced move down, use "j") --- nnoremap --- "Move line up (uses vim-unimpaired) (replaced move up, use "k") --- nnoremap --- "Does not work because of legacy reasons --- " nnoremap --- "Search marks (replaced "j" clone) --- nnoremap Marks --- "Search version controlled files (replaced move up, use "k") --- nnoremap GFiles --- "Search all files in directory --- nnoremap Files --- "Toggle file draw --- nnoremap CHADopen --- "Search all snippets (uses ultisnips) --- nnoremap Snippets --- "Search git history (replaced scroll one line up, use "k") --- nnoremap Commits --- "Search git history within current buffer/selection --- nnoremap BCommits --- --- "Turn on git blame --- inoremap Git blame --- "List all tags in the current buffer --- inoremap BTags --- "List all tags in directory --- inoremap Tags --- "List all the recently opened files (replaced inserting characters from below) --- inoremap History --- "Search within the current buffer --- inoremap / --- "Search within the whole project --- inoremap Rg --- "Move line down (uses vim-unimpaired) (replaced clone) --- inoremap ddpi --- "Move line up (uses vim-unimpaired) (replaced start digraph, use command instead) --- inoremap ddkPi --- "Does not work because of legacy reasons --- " inoremap Marks --- "Add line below (replaced execute single command in normal) --- inoremap o --- "Add line above --- inoremap O --- "Search version controlled files (replaced autocomplete reverse) --- inoremap GFiles --- "Search all files in directory --- inoremap Files --- "Toggle file draw (replaces CTRL-v clone) --- inoremap CHADopen --- "Search all snippets (uses ultisnips) --- inoremap Snippets --- "Search git history (replaced inserting characters from above) --- inoremap Commits --- "Search git history within current buffer/selection --- inoremap BCommits --- --- "Add simple highlight removal --- nnoremap :nohlsearch --- --- "Convert tabs to spaces --- nnoremap :retab --- --- "Git mappings --- nnoremap ga :Git add % --- nnoremap gb :Git blame --- nnoremap gC :Git commit --- nnoremap gp :Git push --- nnoremap gP :Git pull --- --- "Map movement keys to Escape --- inoremap jj --- inoremap jk --- inoremap kk --- inoremap hh --- --- "Delete a line in insert mode --- " inoremap ddi --- --- "Use semicolon instead of colon for commands --- nnoremap ; : --- nnoremap : ; --- --- "Append the line with a semicolon --- inoremap ; mzA;`za --- nnoremap ; mzA;`za --- --- "Easily navigate items in the quickfix menu --- nnoremap ] :cnext --- nnoremap [ :cprevious --- --- "Indent arrays --- nnoremap { mzF[`a``%i`z --- nnoremap } mzF[`a``%i`zvi[:s/,\s*/,\r/gvi[=`z:nohlsearch --- --- "A command to properly indent json code --- command! FormatJSON %!python -m json.tool --- --- " Allow saving of files as doas --- command! W execute 'silent! w !doas /usr/bin/tee % >/dev/null' edit! --- command! X execute 'silent! x !doas /usr/bin/tee % >/dev/null' edit! --- --- " }}} --- --- " Plugins --- {{{ --- --- " COC --- {{{ --- " Use tab for trigger completion with characters ahead and navigate --- " NOTE: There's always complete item selected by default, you may want to enable --- " no select by `"suggest.noselect": true` in your configuration file --- " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by --- " other plugin before putting this into your config --- inoremap --- \ coc#pum#visible() ? coc#pum#next(1) : --- \ CheckBackspace() ? "\" : --- \ coc#refresh() --- inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" --- --- " Make to accept selected completion item or notify coc.nvim to format --- " u breaks current undo, please make your own choice --- inoremap coc#pum#visible() ? coc#pum#confirm() --- \: "\u\\=coc#on_enter()\" --- --- function! CheckBackspace() abort --- let col = col('.') - 1 --- return !col || getline('.')[col - 1] =~# '\s' --- endfunction --- --- if has('nvim') --- inoremap coc#refresh() --- else --- inoremap coc#refresh() --- endif --- --- " Use `[g` and `]g` to navigate diagnostics --- " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list --- nmap [g (coc-diagnostic-prev) --- nmap ]g (coc-diagnostic-next) --- --- " GoTo code navigation --- nmap gd (coc-definition) --- nmap gy (coc-type-definition) --- nmap gi (coc-implementation) --- nmap gr (coc-references) --- --- " Use K to show documentation in preview window --- nnoremap K :call ShowDocumentation() --- --- function! ShowDocumentation() --- if CocAction('hasProvider', 'hover') --- call CocActionAsync('doHover') --- else --- call feedkeys('K', 'in') --- endif --- endfunction --- --- " Highlight the symbol and its references when holding the cursor --- autocmd CursorHold * silent call CocActionAsync('highlight') --- --- " Symbol renaming --- nmap rn (coc-rename) --- --- " Formatting selected code --- xmap f (coc-format-selected) --- nmap f (coc-format-selected) --- --- augroup mygroup --- autocmd! --- " Setup formatexpr specified filetype(s) --- autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') --- " Update signature help on jump placeholder --- autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') --- augroup end --- --- " Applying code actions to the selected code block --- " Example: `aap` for current paragraph --- xmap a (coc-codeaction-selected) --- nmap a (coc-codeaction-selected) --- --- " Remap keys for applying code actions at the cursor position --- nmap ac (coc-codeaction-cursor) --- " Remap keys for apply code actions affect whole buffer --- nmap as (coc-codeaction-source) --- " Apply the most preferred quickfix action to fix diagnostic on the current line --- nmap qf (coc-fix-current) --- --- " Remap keys for applying refactor code actions --- nmap re (coc-codeaction-refactor) --- xmap r (coc-codeaction-refactor-selected) --- nmap r (coc-codeaction-refactor-selected) --- -- " Run the Code Lens action on the current line -- nmap cl (coc-codelens-action) -- @@ -426,41 +213,6 @@ require 'lazy_init' -- -- " Auto-Commands --- {{{ -- --- "Automatically source the config files on save. --- augroup autosourcing --- autocmd! --- autocmd BufWritePost $MYVIMRC source % "Source the vimrc file --- augroup END --- --- "Fold vimrc and zshrc files on open --- augroup autofolding --- autocmd! --- autocmd BufReadPost $MYVIMRC :setlocal foldlevelstart=0 --- autocmd FileType vim setlocal foldmethod=marker --- autocmd BufReadPost zsh :setlocal foldlevelstart=0 --- autocmd FileType zsh setlocal foldmethod=marker --- augroup END --- --- "Set commentary formats --- function s:setcommentary() --- if &commentstring =~ '/\*\s*%s\s*\*/' --- let b:commentary_format="// %s" --- endif --- endfunction --- --- augroup autocomment --- autocmd! --- autocmd FileType * call setcommentary() --- augroup END --- --- "Automatically save files --- augroup autosaving --- autocmd! --- autocmd FocusLost * silent! wa "Save all files when moving away from the window --- autocmd InsertLeave * silent! wa "Save all files when leaving insert mode --- autocmd TextChanged * silent! wa "Save all files when text is changed --- augroup END --- -- augroup modes -- autocmd! -- autocmd FocusLost * call feedkeys("\") "Go to normal mode when moving away diff --git a/lua/autocmd.lua b/lua/autocmd.lua index bc4716d..20fec48 100644 --- a/lua/autocmd.lua +++ b/lua/autocmd.lua @@ -12,4 +12,24 @@ vim.api.nvim_create_autocmd('TextYankPost', { end, }) +local autosave_group = vim.api.nvim_create_augroup('autosaving', { clear = true }) + +vim.api.nvim_create_autocmd('FocusLost', { + group = autosave_group, + pattern = '*', + command = 'silent! wa', -- Save all files when moving away from the window +}) + +vim.api.nvim_create_autocmd('InsertLeave', { + group = autosave_group, + pattern = '*', + command = 'silent! wa', -- Save all files when leaving insert mode +}) + +vim.api.nvim_create_autocmd('TextChanged', { + group = autosave_group, + pattern = '*', + command = 'silent! wa', -- Save all files when text is changed +}) + require('helpers').edit_cf('a', '/lua/autocmd.lua') diff --git a/lua/keymap.lua b/lua/keymap.lua index c0b3d53..3900f5d 100644 --- a/lua/keymap.lua +++ b/lua/keymap.lua @@ -2,8 +2,8 @@ -- See `:help vim.keymap.set()` -- Swap : and ; around -vim.keymap.set('n', ':', ';') -vim.keymap.set('n', ';', ':') +vim.keymap.set({ 'n', 'v' }, ':', ';') +vim.keymap.set({ 'n', 'v' }, ';', ':') -- Clear highlights on search when pressing in normal mode -- See `:help hlsearch` @@ -20,12 +20,6 @@ vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagn -- or just use to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) --- TIP: Disable arrow keys in normal mode --- vim.keymap.set('n', '', 'echo "Use h to move!!"') --- vim.keymap.set('n', '', 'echo "Use l to move!!"') --- vim.keymap.set('n', '', 'echo "Use k to move!!"') --- vim.keymap.set('n', '', 'echo "Use j to move!!"') - -- Keybinds to make split navigation easier. -- Use CTRL+ to switch between windows -- @@ -40,4 +34,82 @@ vim.keymap.set('n', '', 'L', { desc = 'Move window to the right' }) vim.keymap.set('n', '', 'J', { desc = 'Move window to the lower' }) vim.keymap.set('n', '', 'K', { desc = 'Move window to the upper' }) +-- Overriding CTRL mappings because some of them are stupid +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Git blame', { desc = 'Git blame' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Telescope lsp_document_symbols', { desc = 'Show symbols in current document' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Telescope lsp_workspace_symbols', { desc = 'Show symbols in workspace' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Telescope oldfiles', { desc = 'Show recently opened files' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', function() + require('telescope.builtin').find_files { + show_untracked = true, + hidden = true, + } +end, { desc = 'Find version controlled files' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', function() + require('telescope.builtin').find_files { + no_ignore = true, + hidden = true, + } +end, { desc = 'Find all files' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', function() + require('telescope.builtin').live_grep { + hidden = true, + } +end, { desc = 'Search within the whole project' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Telescope quickfix', { desc = 'Show quickfix list' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'Telescope quickfixhistory', { desc = 'Show quickfix history' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'CodeCompanionActions', { desc = 'Open AI Actions' }) +vim.keymap.set({ 'n', 'v', 'c', 'i' }, '', 'CodeCompanionChat', { desc = 'Open AI Chat' }) + +-- Editing helpers +vim.keymap.set('i', '', 'o', { desc = 'Add line below' }) +vim.keymap.set('i', '', 'O', { desc = 'Add line above' }) +vim.keymap.set('i', 'jj', '', { desc = 'Exit insert mode' }) +vim.keymap.set('i', 'jk', '', { desc = 'Exit insert mode' }) +vim.keymap.set('i', 'kk', '', { desc = 'Exit insert mode' }) +vim.keymap.set('i', '', 'ddi', { desc = 'Delete line' }) +vim.keymap.set('i', ';', 'mzA;`za', { desc = 'Append a semicolon' }) +vim.keymap.set('n', ';', 'mzA;`za', { desc = 'Append a semicolon' }) +vim.keymap.set('n', '{', 'mzF[`a``%i`z', { desc = 'Indent an array' }) +vim.keymap.set('n', '}', 'mzF[`a``%i`zvi[:s/,\\s*/,\\r/gvi[=`z:nohlsearch', { desc = 'Indent an array some other way?' }) + +-- Git mappings +vim.keymap.set('n', 'gaf', 'Git add %', { desc = 'Git add current file' }) +vim.keymap.set('n', 'gaa', 'Git add --all', { desc = 'Git add all unstaged changes' }) +vim.keymap.set('n', 'gap', 'Git add --patch --all', { desc = 'Git add all unstaged changes interactively' }) +vim.keymap.set('n', 'gb', 'Git blame', { desc = 'Git blame' }) +vim.keymap.set('n', 'gc', 'Git commit', { desc = 'Git commit' }) +vim.keymap.set('n', 'gp', 'Git push', { desc = 'Git push' }) +vim.keymap.set('n', 'gup', 'Git pull --rebase', { desc = 'Git pull --rebase' }) +vim.keymap.set('n', 'gs', 'Git status', { desc = 'Git status' }) +vim.keymap.set('n', 'gd', 'Git diff', { desc = 'Git diff' }) +vim.keymap.set('n', 'gl', 'Git log', { desc = 'Git log' }) +vim.keymap.set('n', 'gun', 'Git reset -- %', { desc = 'Git unstage file' }) +vim.keymap.set('n', 'gco', 'Git checkout', { desc = 'Git checkout' }) +vim.keymap.set('n', 'gc', 'Git commit', { desc = 'Git commit' }) +vim.keymap.set('n', 'G', 'Git', { desc = 'Git' }) +vim.keymap.set('n', 'gsta', 'Git stash push', { desc = 'Git stash' }) +vim.keymap.set('n', 'gstA', 'Git stash apply', { desc = 'Git stash apply' }) +vim.keymap.set('n', 'gstp', 'Git stash pop', { desc = 'Git stash pop' }) + +-- AI mappings +vim.keymap.set('v', 'ae', 'CodeCompanion', { desc = 'Edit selection with AI' }) +vim.keymap.set('n', 'ac', 'CodeCompanionCmd', { desc = 'Run Neovim commands with AI' }) + +-- Search mappings +vim.keymap.set('n', 'sGb', 'Telescope git_branches', { desc = 'Search git branches' }) +vim.keymap.set('n', 'sGc', 'Telescope git_commits', { desc = 'Search git history' }) +vim.keymap.set('n', 'sGh', 'Telescope git_bcommits', { desc = 'Search git history within current buffer/selection' }) +vim.keymap.set('n', 'sGs', 'Telescope git_status', { desc = 'Search git status' }) +vim.keymap.set('n', 'sGS', 'Telescope git_stash', { desc = 'Search git stash' }) + +-- Misc +vim.keymap.set('n', ']', 'cnext', { desc = 'Next item in quickfix list' }) +vim.keymap.set('n', '[', 'cprevious', { desc = 'Previous item in quickfix list' }) +vim.keymap.set('n', 'gd', 'Telescope lsp_definitions', { desc = 'Go to definition' }) + +-- Leaving this commented out, I will try the format command instead +-- "A command to properly indent json code +-- command! FormatJSON %!python -m json.tool + require('helpers').edit_cf('k', '/lua/keymap.lua') diff --git a/lua/plugins/actually.lua b/lua/plugins/actually.lua new file mode 100644 index 0000000..b147636 --- /dev/null +++ b/lua/plugins/actually.lua @@ -0,0 +1,3 @@ +return { + 'mong8se/actually.nvim', +} diff --git a/lua/plugins/avante.lua b/lua/plugins/avante.lua index c3f83c9..5d931c1 100644 --- a/lua/plugins/avante.lua +++ b/lua/plugins/avante.lua @@ -1,72 +1,75 @@ -require('helpers').edit_cf('pa', '/lua/plugins/avante.lua') - -return { - 'yetone/avante.nvim', - event = 'VeryLazy', - version = false, -- Never set this value to "*"! Never! - opts = { - -- add any opts here - -- for example - provider = 'aihubmix', - cursor_applying_provider = 'aihubmix_llama_versatile', - aihubmix = { - -- model = 'claude-3-7-sonnet-20250219', - model = 'DeepSeek-V3', - }, - openai = { - endpoint = 'https://api.openai.com/v1', - model = 'gpt-4o', -- your desired model (or use gpt-4o, etc.) - timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models - temperature = 0, - max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models) - --reasoning_effort = "medium", -- low|medium|high, only used for reasoning models - }, - vendors = { - aihubmix_llama_versatile = { - __inherited_from = 'aihubmix', - model = 'llama-3.3-70b-versatile', - }, - }, - }, - -- if you want to build from source then do `make BUILD_FROM_SOURCE=true` - build = 'make', - -- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows - dependencies = { - 'nvim-treesitter/nvim-treesitter', - 'stevearc/dressing.nvim', - 'nvim-lua/plenary.nvim', - 'MunifTanjim/nui.nvim', - --- The below dependencies are optional, - 'echasnovski/mini.pick', -- for file_selector provider mini.pick - 'nvim-telescope/telescope.nvim', -- for file_selector provider telescope - 'hrsh7th/nvim-cmp', -- autocompletion for avante commands and mentions - 'ibhagwan/fzf-lua', -- for file_selector provider fzf - 'nvim-tree/nvim-web-devicons', -- or echasnovski/mini.icons - 'zbirenbaum/copilot.lua', -- for providers='copilot' - { - -- support for image pasting - 'HakonHarnes/img-clip.nvim', - event = 'VeryLazy', - opts = { - -- recommended settings - default = { - embed_image_as_base64 = false, - prompt_for_file_name = false, - drag_and_drop = { - insert_mode = true, - }, - -- required for Windows users - use_absolute_path = true, - }, - }, - }, - { - -- Make sure to set this up properly if you have lazy=true - 'MeanderingProgrammer/render-markdown.nvim', - opts = { - file_types = { 'markdown', 'Avante' }, - }, - ft = { 'markdown', 'Avante' }, - }, - }, -} +return {} +-- require('helpers').edit_cf('pa', '/lua/plugins/avante.lua') +-- +-- return { +-- 'yetone/avante.nvim', +-- event = 'VeryLazy', +-- version = false, -- Never set this value to "*"! Never! +-- opts = { +-- -- add any opts here +-- -- for example +-- provider = 'aihubmix', +-- -- cursor_applying_provider = 'aihubmix_llama_versatile', +-- aihubmix = { +-- -- model = 'claude-3-7-sonnet-20250219', +-- model = 'DeepSeek-V3', +-- }, +-- openai = { +-- endpoint = 'https://api.openai.com/v1', +-- model = 'gpt-4o', -- your desired model (or use gpt-4o, etc.) +-- timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models +-- temperature = 0, +-- max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models) +-- --reasoning_effort = "medium", -- low|medium|high, only used for reasoning models +-- }, +-- vendors = { +-- aihubmix_llama_versatile = { +-- __inherited_from = 'openai', +-- api_key_name = 'AIHUBMIX_API_KEY', +-- endpoint = 'https://aihubmix.com/v1', +-- model = 'llama-3.3-70b-versatile', +-- }, +-- }, +-- }, +-- -- if you want to build from source then do `make BUILD_FROM_SOURCE=true` +-- build = 'make', +-- -- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows +-- dependencies = { +-- 'nvim-treesitter/nvim-treesitter', +-- 'stevearc/dressing.nvim', +-- 'nvim-lua/plenary.nvim', +-- 'MunifTanjim/nui.nvim', +-- --- The below dependencies are optional, +-- 'echasnovski/mini.pick', -- for file_selector provider mini.pick +-- 'nvim-telescope/telescope.nvim', -- for file_selector provider telescope +-- 'hrsh7th/nvim-cmp', -- autocompletion for avante commands and mentions +-- 'ibhagwan/fzf-lua', -- for file_selector provider fzf +-- 'nvim-tree/nvim-web-devicons', -- or echasnovski/mini.icons +-- 'zbirenbaum/copilot.lua', -- for providers='copilot' +-- { +-- -- support for image pasting +-- 'HakonHarnes/img-clip.nvim', +-- event = 'VeryLazy', +-- opts = { +-- -- recommended settings +-- default = { +-- embed_image_as_base64 = false, +-- prompt_for_file_name = false, +-- drag_and_drop = { +-- insert_mode = true, +-- }, +-- -- required for Windows users +-- use_absolute_path = true, +-- }, +-- }, +-- }, +-- { +-- -- Make sure to set this up properly if you have lazy=true +-- 'MeanderingProgrammer/render-markdown.nvim', +-- opts = { +-- file_types = { 'markdown', 'Avante' }, +-- }, +-- ft = { 'markdown', 'Avante' }, +-- }, +-- }, +-- } diff --git a/lua/plugins/blink.lua b/lua/plugins/blink.lua index a5e147d..8b3b0c4 100644 --- a/lua/plugins/blink.lua +++ b/lua/plugins/blink.lua @@ -5,7 +5,7 @@ return { version = '1.*', dependencies = { -- Compatibility for Avante with Blink (it typically only works with cmp) - 'Kaiser-Yang/blink-cmp-avante', + -- 'Kaiser-Yang/blink-cmp-avante', -- Snippet Engine { 'L3MON4D3/LuaSnip', @@ -59,7 +59,7 @@ return { -- : Toggle signature help -- -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'default', + preset = 'enter', -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps @@ -68,20 +68,23 @@ return { appearance = { -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' -- Adjusts spacing to ensure icons are aligned - nerd_font_variant = 'mono', + nerd_font_variant = 'normal', }, completion = { -- By default, you may press `` to show the documentation. -- Optionally, set `auto_show = true` to show the documentation after a delay. - documentation = { auto_show = false, auto_show_delay_ms = 500 }, + documentation = { auto_show = true, auto_show_delay_ms = 500 }, }, sources = { - default = { 'avante', 'lsp', 'path', 'snippets', 'lazydev' }, + default = { 'codecompanion', 'lsp', 'path', 'snippets', 'lazydev' }, providers = { lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 }, - avante = { module = 'blink-cmp-avante', name = 'Avante', opts = {} }, + -- avante = { module = 'blink-cmp-avante', name = 'Avante', opts = {} }, + }, + per_filetype = { + codecompanion = { 'codecompanion' }, }, }, diff --git a/lua/plugins/codecompanion.lua b/lua/plugins/codecompanion.lua new file mode 100644 index 0000000..a0d17ae --- /dev/null +++ b/lua/plugins/codecompanion.lua @@ -0,0 +1,8 @@ +return { + 'olimorris/codecompanion.nvim', + opts = {}, + dependencies = { + 'nvim-lua/plenary.nvim', + 'nvim-treesitter/nvim-treesitter', + }, +} diff --git a/lua/plugins/copilot.lua b/lua/plugins/copilot.lua new file mode 100644 index 0000000..8e490ed --- /dev/null +++ b/lua/plugins/copilot.lua @@ -0,0 +1,3 @@ +return { + 'github/copilot.vim', +} diff --git a/lua/plugins/dashboard.lua b/lua/plugins/dashboard.lua new file mode 100644 index 0000000..857904f --- /dev/null +++ b/lua/plugins/dashboard.lua @@ -0,0 +1,10 @@ +return { + 'nvimdev/dashboard-nvim', + event = 'VimEnter', + config = function() + require('dashboard').setup { + -- config + } + end, + dependencies = { {'nvim-tree/nvim-web-devicons'}} +} diff --git a/lua/plugins/debug.lua b/lua/plugins/debug.lua index f13dd2d..f289f9b 100644 --- a/lua/plugins/debug.lua +++ b/lua/plugins/debug.lua @@ -25,42 +25,42 @@ return { keys = { -- Basic debugging keymaps, feel free to change to your liking! { - '', + 'dc', function() require('dap').continue() end, desc = 'Debug: Start/Continue', }, { - '', + 'di', function() require('dap').step_into() end, desc = 'Debug: Step Into', }, { - '', + 'do', function() require('dap').step_over() end, desc = 'Debug: Step Over', }, { - '', + 'du', function() require('dap').step_out() end, desc = 'Debug: Step Out', }, { - 'b', + 'db', function() require('dap').toggle_breakpoint() end, desc = 'Debug: Toggle Breakpoint', }, { - 'B', + 'dB', function() require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') end, @@ -68,7 +68,7 @@ return { }, -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. { - '', + 'ds', function() require('dapui').toggle() end, diff --git a/lua/plugins/dotenv.lua b/lua/plugins/dotenv.lua new file mode 100644 index 0000000..bca4301 --- /dev/null +++ b/lua/plugins/dotenv.lua @@ -0,0 +1,3 @@ +return { + 'ellisonleao/dotenv.nvim', +} diff --git a/lua/plugins/mini.lua b/lua/plugins/mini.lua index 7dddfe5..4438b30 100644 --- a/lua/plugins/mini.lua +++ b/lua/plugins/mini.lua @@ -1,38 +1,69 @@ -- Collection of various small independent plugins/modules return { - "echasnovski/mini.nvim", - config = function() - -- Better Around/Inside textobjects - -- - -- Examples: - -- - va) - [V]isually select [A]round [)]paren - -- - yinq - [Y]ank [I]nside [N]ext [Q]uote - -- - ci' - [C]hange [I]nside [']quote - require("mini.ai").setup({ n_lines = 500 }) + 'echasnovski/mini.nvim', + config = function() + -- Better Around/Inside textobjects + -- + -- Examples: + -- - va) - [V]isually select [A]round [)]paren + -- - yinq - [Y]ank [I]nside [N]ext [Q]uote + -- - ci' - [C]hange [I]nside [']quote + require('mini.ai').setup { n_lines = 500 } - -- Add/delete/replace surroundings (brackets, quotes, etc.) - -- - -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren - -- - sd' - [S]urround [D]elete [']quotes - -- - sr)' - [S]urround [R]eplace [)] ['] - require("mini.surround").setup() + -- Add/delete/replace surroundings (brackets, quotes, etc.) + -- + -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren + -- - sd' - [S]urround [D]elete [']quotes + -- - sr)' - [S]urround [R]eplace [)] ['] + require('mini.surround').setup { + mappings = { + add = 'ys', + delete = 'ds', + replace = 'cs', + }, + } - -- Simple and easy statusline. - -- You could remove this setup call if you don't like it, - -- and try some other statusline plugin - local statusline = require("mini.statusline") - -- set use_icons to true if you have a Nerd Font - statusline.setup({ use_icons = vim.g.have_nerd_font }) + require('mini.pairs').setup() - -- You can configure sections in the statusline by overriding their - -- default behavior. For example, here we set the section for - -- cursor location to LINE:COLUMN - ---@diagnostic disable-next-line: duplicate-set-field - statusline.section_location = function() - return "%2l:%-2v" - end + -- require('mini.jump').setup() - -- ... and there is more! - -- Check out: https://github.com/echasnovski/mini.nvim - end, + require('mini.jump2d').setup() + + require('mini.splitjoin').setup() + + local animate = require 'mini.animate' + animate.setup { + cursor = { + enable = false, + }, + resize = { + enable = true, + timing = animate.gen_timing.linear { duration = 50, unit = 'total' }, + }, + scroll = { + enable = true, + timing = animate.gen_timing.linear { duration = 50, unit = 'total' }, + }, + } + + require('mini.map').setup() + + -- Simple and easy statusline. + -- You could remove this setup call if you don't like it, + -- and try some other statusline plugin + local statusline = require 'mini.statusline' + -- set use_icons to true if you have a Nerd Font + statusline.setup { use_icons = vim.g.have_nerd_font } + + -- You can configure sections in the statusline by overriding their + -- default behavior. For example, here we set the section for + -- cursor location to LINE:COLUMN + ---@diagnostic disable-next-line: duplicate-set-field + statusline.section_location = function() + return '%2l:%-2v' + end + + -- ... and there is more! + -- Check out: https://github.com/echasnovski/mini.nvim + end, } diff --git a/lua/plugins/oil.lua b/lua/plugins/oil.lua new file mode 100644 index 0000000..db7f476 --- /dev/null +++ b/lua/plugins/oil.lua @@ -0,0 +1,18 @@ +-- Filesystem manager + +vim.keymap.set('n', '-', 'Oil', { desc = 'Open parent directory' }) +return { + 'stevearc/oil.nvim', + ---@module 'oil' + ---@type oil.SetupOpts + opts = { + view_options = { + show_hidden = true, + }, + }, + -- Optional dependencies + dependencies = { { 'echasnovski/mini.icons', opts = {} } }, + -- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons + -- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations. + lazy = false, +} diff --git a/lua/plugins/refactor.lua b/lua/plugins/refactor.lua new file mode 100644 index 0000000..7daba6c --- /dev/null +++ b/lua/plugins/refactor.lua @@ -0,0 +1,9 @@ +return { + "ThePrimeagen/refactoring.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + }, + lazy = false, + opts = {}, +}