-- 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 :) -- -- See the kickstart.nvim README for more information return { { 'joaodubas/gitlinker.nvim', config = function() local actions = require 'gitlinker.actions' local hosts = require 'gitlinker.hosts' require('gitlinker').setup { opts = { remote = 'origin', add_current_line_on_normal_mode = true, action_callback = actions.copy_to_clipboard, print_url = true, }, callbacks = { ['github.com'] = hosts.get_github_type_url, ['bitbucket.org'] = hosts.get_bitbucket_type_url, ['gitea.dubas.dev'] = hosts.get_gitea_type_url, }, mappings = 'gy', } end, }, { 'NeogitOrg/neogit', dependencies = { 'nvim-lua/plenary.nvim', 'sindrets/diffview.nvim', 'nvim-telescope/telescope.nvim', }, opts = { git_services = { ['gitea.dubas.dev'] = 'https://gitea.dubas.dev/${owner}/${repository}/compare/${branch_name}', }, }, keys = { { 'gs', 'Neogit', desc = 'Git status' }, }, }, 'nvim-treesitter/nvim-treesitter-context', { 'kevinhwang91/nvim-ufo', dependencies = { 'kevinhwang91/promise-async' }, event = 'BufRead', keys = function() local ufo = require 'ufo' return { { 'zR', ufo.openAllFolds, { desc = 'Open all folds' } }, { 'zM', ufo.closeAllFolds, { desc = 'Close all folds' } }, { 'zr', ufo.openFoldsExceptKinds, { desc = 'Open fold' } }, { 'zm', ufo.closeFoldsWith, { desc = 'Close fold' } }, } end, opts = function() local handler = function(virtText, lnum, endLnum, width, truncate) local newVirtText = {} local suffix = (' 󰁂 %d '):format(endLnum - lnum) local sufWidth = vim.fn.strdisplaywidth(suffix) local targetWidth = width - sufWidth local curWidth = 0 for _, chunk in ipairs(virtText) do local chunkText = chunk[1] local chunkWidth = vim.fn.strdisplaywidth(chunkText) if targetWidth > curWidth + chunkWidth then table.insert(newVirtText, chunk) else chunkText = truncate(chunkText, targetWidth - curWidth) local hlGroup = chunk[2] table.insert(newVirtText, { chunkText, hlGroup }) chunkWidth = vim.fn.strdisplaywidth(chunkText) -- str width returned from truncate() may less than 2nd argument, need padding if curWidth + chunkWidth < targetWidth then suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth) end break end curWidth = curWidth + chunkWidth end table.insert(newVirtText, { suffix, 'MoreMsg' }) return newVirtText end return { fold_virt_text_handler = handler, provider_selector = function(_, _, _) return { 'treesitter', 'indent' } end, } end, }, { 'stevearc/oil.nvim', dependencies = { 'nvim-tree/nvim-web-devicons' }, keys = { { '-', 'Oil', desc = 'Open parent directory' }, }, opts = {}, }, { 'vhyrro/luarocks.nvim', priority = 1000, config = true, }, { 'rest-nvim/rest.nvim', dependencies = { 'luarocks.nvim' }, ft = { 'http', 'rest', }, config = function() require('rest-nvim').setup { client = 'curl', custom_dynamic_variables = {}, encode_url = true, env_file = '.env', skip_ssl_verification = false, highlight = { enable = true, timeout = 15, }, result = { behavior = { decode_url = true, formatters = { json = 'jq', html = false, }, show_info = { curl_command = true, headers = true, http_info = true, url = true, }, statistics = { enable = true, stats = { { 'total_time', title = 'Time taken:' }, { 'size_download_t', title = 'Download size:' }, }, }, }, split = { horizontal = false, in_place = false, }, }, } end, keys = function() local status_ok, which_key = pcall(require, 'which-key') if status_ok then which_key.register { ['t'] = { name = 'Res[t]', _ = 'which_key_ignore' }, } end return { { 'tr', 'Rest run', desc = 'Run the request under cursor' }, { 'tp', 'RestNvimPreview', desc = 'Preview the curl command for the request under cursor', }, { 'tl', 'Rest run last', desc = 'Re-run the last request' }, } end, }, { 'akinsho/toggleterm.nvim', opts = { size = vim.o.lines * 0.75, open_mapping = [[]], hide_numbers = true, shade_filetypes = {}, shade_terminals = true, shading_factor = 2, direction = 'horizontal', shell = vim.o.shell, }, keys = function() local status_ok, which_key = pcall(require, 'which-key') if status_ok then which_key.register { ['m'] = { name = 'Toggle ter[m]inal', _ = 'which_key_ignore' }, } end vim.api.nvim_create_autocmd('TermOpen', { group = vim.api.nvim_create_augroup('kickstart-custom-term-open-mapping', { clear = true }), callback = function(args) local bufnr = args.buf local opts = { buffer = bufnr } vim.keymap.set('t', '', [[]], opts) vim.keymap.set('t', 'jk', [[]], opts) vim.keymap.set('t', '', [[wincmd h]], opts) vim.keymap.set('t', '', [[wincmd j]], opts) vim.keymap.set('t', '', [[wincmd k]], opts) vim.keymap.set('t', '', [[wincmd l]], opts) vim.keymap.set('t', '', [[]], opts) end, }) return { { 'mh', 'ToggleTerm direction=horizontal size=' .. tostring(vim.o.lines * 0.75) .. '', desc = 'Open ter[m]inal [h]orizontally', noremap = true, }, { 'mv', 'ToggleTerm direction=vertical size=' .. tostring(vim.o.columns * 0.5) .. '', desc = 'Open ter[m]inal [v]ertically', noremap = true, }, { 'mc', 'ToggleTermSendCurrentLine', desc = 'Send [c]urrent line under the cursor', noremap = true, }, } end, }, }