mini.lua 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. local M = {
  2. {
  3. "echasnovski/mini.icons",
  4. init = function()
  5. package.preload["nvim-web-devicons"] = function()
  6. require("mini.icons").mock_nvim_web_devicons()
  7. return package.loaded["nvim-web-devicons"]
  8. end
  9. end,
  10. },
  11. {
  12. "echasnovski/mini.ai",
  13. config = function()
  14. -- - va) - [V]isually select [A]round [)]paren
  15. -- - yinq - [Y]ank [I]nside [N]ext [Q]uote
  16. -- - ci' - [C]hange [I]nside [']quote
  17. require("mini.ai").setup({ n_lines = 500 })
  18. end,
  19. },
  20. {
  21. "echasnovski/mini.statusline",
  22. version = false,
  23. config = function()
  24. require("mini.statusline").setup({})
  25. MiniStatusline.section_codeium = function(args)
  26. args = args or {}
  27. local trunc_width = args.trunc_width or 75
  28. if MiniStatusline.is_truncated(trunc_width) then
  29. return ""
  30. end
  31. local status = vim.fn["codeium#GetStatusString"]()
  32. if status and status ~= "" then
  33. local icon = args.icon or "󰘦 "
  34. return icon .. status
  35. end
  36. return ""
  37. end
  38. MiniStatusline.section_worktree = function(args)
  39. args = args or {}
  40. local trunc_width = args.trunc_width or 75
  41. if MiniStatusline.is_truncated(trunc_width) then
  42. return ""
  43. end
  44. -- Get current directory
  45. local cwd = vim.fn.getcwd()
  46. -- Run git worktree list to check if we're in a worktree
  47. local handle = io.popen("git worktree list 2>/dev/null")
  48. if not handle then
  49. return ""
  50. end
  51. local output = handle:read("*a")
  52. handle:close()
  53. for line in output:gmatch("[^\n]+") do
  54. local path, branch = line:match("^([^%s]+)%s+%[?([^%]]*)")
  55. if path and path == cwd and branch and branch ~= "" then
  56. local icon = args.icon or "🌿 "
  57. return icon .. branch
  58. end
  59. end
  60. return ""
  61. end
  62. MiniStatusline.config.content.active = function()
  63. local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
  64. local git = MiniStatusline.section_git({ trunc_width = 40 })
  65. local diff = MiniStatusline.section_diff({ trunc_width = 75 })
  66. local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75 })
  67. local lsp = MiniStatusline.section_lsp({ trunc_width = 75 })
  68. local filename = MiniStatusline.section_filename({ trunc_width = 140 })
  69. local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
  70. local location = MiniStatusline.section_location({ trunc_width = 75 })
  71. local search = MiniStatusline.section_searchcount({ trunc_width = 75 })
  72. local codeium = MiniStatusline.section_codeium({ trunc_width = 75 })
  73. local worktree = MiniStatusline.section_worktree({ trunc_width = 75 })
  74. return MiniStatusline.combine_groups({
  75. { hl = mode_hl, strings = { mode } },
  76. { hl = "MiniStatuslineDevinfo", strings = { git, diff, diagnostics, lsp } },
  77. "%<", -- Mark general truncate point
  78. { hl = "MiniStatuslineFilename", strings = { filename } },
  79. "%=", -- End left alignment
  80. { hl = "MiniStatuslineFileinfo", strings = { fileinfo, worktree } },
  81. { hl = mode_hl, strings = { codeium, search, location } },
  82. })
  83. end
  84. end,
  85. },
  86. }
  87. return M