mini.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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.surround",
  22. config = function()
  23. -- Add/delete/replace surroundings (brackets, quotes, etc.)
  24. --
  25. -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
  26. -- - sd' - [S]urround [D]elete [']quotes
  27. -- - sr)' - [S]urround [R]eplace [)] [']
  28. require("mini.surround").setup({})
  29. end,
  30. },
  31. {
  32. "echasnovski/mini.statusline",
  33. version = false,
  34. config = function()
  35. require("mini.statusline").setup({})
  36. MiniStatusline.section_codeium = function(args)
  37. args = args or {}
  38. local trunc_width = args.trunc_width or 75
  39. if MiniStatusline.is_truncated(trunc_width) then
  40. return ""
  41. end
  42. local status = vim.fn["codeium#GetStatusString"]()
  43. if status and status ~= "" then
  44. local icon = args.icon or "󰘦 "
  45. return icon .. status
  46. end
  47. return ""
  48. end
  49. MiniStatusline.section_worktree = function(args)
  50. args = args or {}
  51. local trunc_width = args.trunc_width or 75
  52. if MiniStatusline.is_truncated(trunc_width) then
  53. return ""
  54. end
  55. -- Get current directory
  56. local cwd = vim.fn.getcwd()
  57. -- Run git worktree list to check if we're in a worktree
  58. local handle = io.popen("git worktree list 2>/dev/null")
  59. if not handle then
  60. return ""
  61. end
  62. local output = handle:read("*a")
  63. handle:close()
  64. for line in output:gmatch("[^\n]+") do
  65. local path, branch = line:match("^([^%s]+)%s+%[?([^%]]*)")
  66. if path and path == cwd and branch and branch ~= "" then
  67. local icon = args.icon or "🌿 "
  68. return icon .. branch
  69. end
  70. end
  71. return ""
  72. end
  73. MiniStatusline.config.content.active = function()
  74. local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
  75. local git = MiniStatusline.section_git({ trunc_width = 40 })
  76. local diff = MiniStatusline.section_diff({ trunc_width = 75 })
  77. local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75 })
  78. local lsp = MiniStatusline.section_lsp({ trunc_width = 75 })
  79. local filename = MiniStatusline.section_filename({ trunc_width = 140 })
  80. local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
  81. local location = MiniStatusline.section_location({ trunc_width = 75 })
  82. local search = MiniStatusline.section_searchcount({ trunc_width = 75 })
  83. local codeium = MiniStatusline.section_codeium({ trunc_width = 75 })
  84. local worktree = MiniStatusline.section_worktree({ trunc_width = 75 })
  85. return MiniStatusline.combine_groups({
  86. { hl = mode_hl, strings = { mode } },
  87. { hl = "MiniStatuslineDevinfo", strings = { git, diff, diagnostics, lsp } },
  88. "%<", -- Mark general truncate point
  89. { hl = "MiniStatuslineFilename", strings = { filename } },
  90. "%=", -- End left alignment
  91. { hl = "MiniStatuslineFileinfo", strings = { fileinfo, worktree } },
  92. { hl = mode_hl, strings = { codeium, search, location } },
  93. })
  94. end
  95. end,
  96. },
  97. }
  98. return M