|
| 1 | +local prefix = "<Leader>A" |
| 2 | + |
| 3 | +return { |
| 4 | + "olimorris/codecompanion.nvim", |
| 5 | + event = "User AstroFile", |
| 6 | + cmd = { |
| 7 | + "CodeCompanion", |
| 8 | + "CodeCompanionActions", |
| 9 | + "CodeCompanionChat", |
| 10 | + "CodeCompanionCmd", |
| 11 | + }, |
| 12 | + dependencies = { |
| 13 | + "nvim-lua/plenary.nvim", |
| 14 | + "nvim-treesitter/nvim-treesitter", |
| 15 | + }, |
| 16 | + opts = {}, |
| 17 | + specs = { |
| 18 | + { |
| 19 | + "rebelot/heirline.nvim", |
| 20 | + optional = true, |
| 21 | + |
| 22 | + opts = function(_, opts) |
| 23 | + opts.statusline = opts.statusline or {} |
| 24 | + local spinner_symbols = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } |
| 25 | + local astroui = require "astroui.status.hl" |
| 26 | + table.insert(opts.statusline, { |
| 27 | + static = { |
| 28 | + n_requests = 0, |
| 29 | + spinner_index = 0, |
| 30 | + spinner_symbols = spinner_symbols, |
| 31 | + done_symbol = "✓", |
| 32 | + }, |
| 33 | + init = function(self) |
| 34 | + if self._cc_autocmds then return end |
| 35 | + self._cc_autocmds = true |
| 36 | + vim.api.nvim_create_autocmd("User", { |
| 37 | + pattern = "CodeCompanionRequestStarted", |
| 38 | + callback = function() |
| 39 | + self.n_requests = self.n_requests + 1 |
| 40 | + vim.cmd "redrawstatus" |
| 41 | + end, |
| 42 | + }) |
| 43 | + vim.api.nvim_create_autocmd("User", { |
| 44 | + pattern = "CodeCompanionRequestFinished", |
| 45 | + callback = function() |
| 46 | + self.n_requests = math.max(0, self.n_requests - 1) |
| 47 | + vim.cmd "redrawstatus" |
| 48 | + end, |
| 49 | + }) |
| 50 | + end, |
| 51 | + provider = function(self) |
| 52 | + if not package.loaded["codecompanion"] then return nil end |
| 53 | + local symbol |
| 54 | + if self.n_requests > 0 then |
| 55 | + self.spinner_index = (self.spinner_index % #self.spinner_symbols) + 1 |
| 56 | + symbol = self.spinner_symbols[self.spinner_index] |
| 57 | + else |
| 58 | + symbol = self.done_symbol |
| 59 | + self.spinner_index = 0 |
| 60 | + end |
| 61 | + return ("%d %s"):format(self.n_requests, symbol) |
| 62 | + end, |
| 63 | + hl = function() return astroui.filetype_color() end, |
| 64 | + }) |
| 65 | + end, |
| 66 | + }, |
| 67 | + { "AstroNvim/astroui", opts = { icons = { CodeCompanion = "" } } }, |
| 68 | + { |
| 69 | + "AstroNvim/astrocore", |
| 70 | + opts = function(_, opts) |
| 71 | + if not opts.mappings then opts.mappings = {} end |
| 72 | + opts.mappings.n = opts.mappings.n or {} |
| 73 | + opts.mappings.v = opts.mappings.v or {} |
| 74 | + opts.mappings.n[prefix] = { desc = require("astroui").get_icon("CodeCompanion", 1, true) .. "CodeCompanion" } |
| 75 | + opts.mappings.v[prefix] = { desc = require("astroui").get_icon("CodeCompanion", 1, true) .. "CodeCompanion" } |
| 76 | + opts.mappings.n[prefix .. "c"] = { "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle chat" } |
| 77 | + opts.mappings.v[prefix .. "c"] = { "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle chat" } |
| 78 | + opts.mappings.n[prefix .. "p"] = { "<cmd>CodeCompanionActions<cr>", desc = "Open action palette" } |
| 79 | + opts.mappings.v[prefix .. "p"] = { "<cmd>CodeCompanionActions<cr>", desc = "Open action palette" } |
| 80 | + opts.mappings.n[prefix .. "q"] = { "<cmd>CodeCompanion<cr>", desc = "Open inline assistant" } |
| 81 | + opts.mappings.v[prefix .. "q"] = { "<cmd>CodeCompanion<cr>", desc = "Open inline assistant" } |
| 82 | + opts.mappings.v[prefix .. "a"] = { "<cmd>CodeCompanionChat Add<cr>", desc = "Add selection to chat" } |
| 83 | + end, |
| 84 | + }, |
| 85 | + { |
| 86 | + "MeanderingProgrammer/render-markdown.nvim", |
| 87 | + optional = true, |
| 88 | + opts = function(_, opts) |
| 89 | + if not opts.file_types then opts.file_types = { "markdown" } end |
| 90 | + opts.file_types = require("astrocore").list_insert_unique(opts.file_types, { "codecompanion" }) |
| 91 | + end, |
| 92 | + }, |
| 93 | + { |
| 94 | + "OXY2DEV/markview.nvim", |
| 95 | + optional = true, |
| 96 | + opts = function(_, opts) |
| 97 | + if not opts.preview then opts.preview = {} end |
| 98 | + if not opts.preview.filetypes then opts.preview.filetypes = { "markdown", "quarto", "rmd" } end |
| 99 | + opts.preview.filetypes = require("astrocore").list_insert_unique(opts.preview.filetypes, { "codecompanion" }) |
| 100 | + end, |
| 101 | + }, |
| 102 | + }, |
| 103 | +} |
0 commit comments