aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins/ui.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/plugins/ui.lua')
-rw-r--r--.config/nvim/lua/plugins/ui.lua477
1 files changed, 477 insertions, 0 deletions
diff --git a/.config/nvim/lua/plugins/ui.lua b/.config/nvim/lua/plugins/ui.lua
new file mode 100644
index 0000000..e79ee3a
--- /dev/null
+++ b/.config/nvim/lua/plugins/ui.lua
@@ -0,0 +1,477 @@
+local leap_active = false
+vim.api.nvim_create_autocmd("User", {
+ pattern = "LeapEnter",
+ callback = function()
+ leap_active = true
+ end,
+})
+
+vim.api.nvim_create_autocmd("User", {
+ pattern = "LeapLeave",
+ callback = function()
+ leap_active = false
+ end,
+})
+
+local nvim_tree_root = nil
+
+return {
+ {
+ "willothy/nvim-cokeline",
+
+ config = function()
+ local hl = require("cokeline.hlgroups")
+ local is_picking_focus = require('cokeline.mappings').is_picking_focus
+ local is_picking_close = require('cokeline.mappings').is_picking_close
+
+ local function has_diagnostics(buffer)
+ return buffer.diagnostics.errors > 0 or buffer.diagnostics.warnings > 0 or buffer.diagnostics.infos > 0 or buffer.diagnostics.hints > 0
+ end
+
+ require("cokeline").setup {
+ show_if_buffers_are_at_least = 0,
+ components = {
+ {
+ text = function(buffer)
+ return buffer.is_first and (require "cokeline.sidebar".get_width("left") == 0 and "" or "│") or "▎"
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = function (buffer)
+ return (is_picking_focus() or is_picking_close()) and " " .. buffer.pick_letter or ""
+ end,
+ fg = function ()
+ return hl.get_hl_attr("PrismiteYellow", "fg")
+ end
+ },
+ {
+ text = function(buffer)
+ return " " .. buffer.devicon.icon
+ end,
+ fg = function(buffer)
+ return buffer.devicon.color
+ end,
+ },
+ {
+ text = function(buffer)
+ return buffer.unique_prefix
+ end,
+ fg = function()
+ return hl.get_hl_attr("Comment", "fg")
+ end,
+ italic = true,
+ },
+ {
+ text = function(buffer)
+ return buffer.filename
+ end,
+ },
+ {
+ ---@param buffer Buffer
+ text = function(buffer)
+ return buffer.is_modified and " " or ""
+ end,
+ },
+ {
+ text = function(buffer)
+ return has_diagnostics(buffer) and " [" or ""
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = function(buffer)
+ local errors = buffer.diagnostics.errors
+ return errors > 0 and errors or ""
+ end,
+ fg = function ()
+ return hl.get_hl_attr("DiagnosticError", "fg")
+
+ end
+ },
+ {
+ text = function (buffer)
+ local bd = buffer.diagnostics
+ return (bd.errors > 0 and (bd.warnings > 0 or bd.infos > 0 or bd.hints > 0)) and "|" or ""
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = function(buffer)
+ local warnings = buffer.diagnostics.warnings
+ return warnings > 0 and warnings or ""
+ end,
+ fg = function ()
+ return hl.get_hl_attr("DiagnosticWarn", "fg")
+ end
+ },
+ {
+ text = function (buffer)
+ local bd = buffer.diagnostics
+ return (bd.warnings > 0 and (bd.infos > 0 or bd.hints > 0)) and "|" or ""
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = function(buffer)
+ local infos = buffer.diagnostics.infos
+ return infos > 0 and infos or ""
+ end,
+ fg = function ()
+ return hl.get_hl_attr("DiagnosticInfo", "fg")
+ end
+ },
+ {
+ text = function (buffer)
+ local bd = buffer.diagnostics
+ return (bd.infos > 0 and bd.hints > 0) and "|" or ""
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = function(buffer)
+ local hints = buffer.diagnostics.hints
+ return hints > 0 and hints or ""
+ end,
+ fg = function ()
+ return hl.get_hl_attr("DiagnosticHint", "fg")
+ end
+ },
+ {
+ text = function(buffer)
+ return has_diagnostics(buffer) and "]" or ""
+ end,
+ fg = function()
+ return hl.get_hl_attr("WinSeparator", "fg")
+ end,
+ },
+ {
+ text = " "
+ }
+ },
+ buffers = {
+ delete_on_right_click = false
+ },
+ mappings = {
+ disable_mouse = true
+ },
+ sidebar = {
+ components = {
+ {
+ text = function()
+ local width = require("cokeline.sidebar").get_width("left")
+ if #nvim_tree_root > width then
+ return nvim_tree_root:sub(1, width - 2) .. "…"
+ else
+ return nvim_tree_root
+ end
+ end,
+ bg = function()
+ return hl.get_hl_attr("TabLineSel", "bg")
+ end,
+ },
+ {
+ text = function()
+ return string.rep(
+ " ",
+ math.max(0, require("cokeline.sidebar").get_width("left") - #nvim_tree_root)
+ )
+ end,
+ bg = function()
+ return hl.get_hl_attr("TabLineSel", "bg")
+ end
+ },
+ }
+ }
+ }
+ end,
+ dependencies = { "nvim-tree/nvim-web-devicons", "nvim-lua/plenary.nvim" },
+ },
+ {
+ "folke/trouble.nvim",
+ opts = {},
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ },
+ {
+ "nvimdev/indentmini.nvim",
+ config = true,
+ opts = {
+ char = "▏"
+ }
+ },
+ {
+ "folke/noice.nvim",
+ event = "VeryLazy",
+ opts = {
+ cmdline = {
+ format = {
+ cmdline = { icon = ":" },
+ },
+ },
+ lsp = {
+ override = {
+ ["vim.lsp.util.convert_input_to_markdown_lines"] = true,
+ ["vim.lsp.util.stylize_markdown"] = true,
+ ["cmp.entry.get_documentation"] = true,
+ },
+ },
+ presets = {
+ command_palette = true,
+ long_message_to_split = true,
+ inc_rename = false,
+ lsp_doc_border = true,
+ },
+ messages = {
+ view_search = false,
+ },
+ routes = {
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "Already at newest change",
+ },
+ view = "mini",
+ },
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "Already at oldest change",
+ },
+ view = "mini",
+ },
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "E486: Pattern not found:"
+ },
+ view = "mini"
+ },
+ -- normal search
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "E486: Pattern not found:"
+ },
+ view = "mini"
+ },
+ -- failed search
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "E486: Pattern not found:"
+ },
+ view = "mini"
+ },
+ -- undo
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "%d+ .+ line.?; before #%d+",
+ },
+ view = "mini",
+ },
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "%d+ .+ line.?; before #%d+",
+ },
+ view = "mini",
+ },
+ -- redo
+ {
+ filter = {
+ event = "msg_show",
+ kind = "",
+ find = "%d+ change; after #%d+",
+ },
+ view = "mini"
+ },
+ },
+ },
+ dependencies = {
+ "MunifTanjim/nui.nvim",
+ "rcarriga/nvim-notify",
+ },
+ },
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = {
+ options = {
+ section_separators = { left = "", right = "" },
+ component_separators = { left = "", right = "" },
+ fmt = function(str)
+ return vim.trim(str)
+ end,
+ globalstatus = true,
+ disabled_filetypes = { "NvimTree" },
+ },
+ sections = {
+ lualine_a = {
+ "mode",
+ {
+ function()
+ return "[L]"
+ end,
+ cond = function ()
+ return leap_active
+ end
+ },
+ {
+ function()
+ local reg = vim.fn.reg_recording()
+ if reg == "" then return "" end -- not recording
+ return "[@" .. reg .. "]"
+ end
+ }
+ },
+ lualine_b = { "filename" },
+ lualine_c = { "diagnostics", "diff" },
+ lualine_x = {
+ {
+ function ()
+ local noice_loaded, noice = pcall(require, "noice")
+ if noice_loaded then
+ return noice.api.status.command.get()
+ else
+ return ""
+ end
+ end,
+ cond = function()
+ local noice_loaded, noice = pcall(require, "noice")
+ if noice_loaded then
+ return noice.api.status.command.has()
+ else
+ return false
+ end
+ end
+ }
+ },
+ lualine_y = { "filetype" },
+ lualine_z = { "searchcount", "progress", "location" },
+ },
+ },
+ dependencies = {
+ "nvim-tree/nvim-web-devicons",
+ },
+ },
+ { "stevearc/dressing.nvim", config = true },
+ {
+ "nvim-tree/nvim-tree.lua",
+ opts = {
+ sort_by = "case_sensitive",
+ view = {
+ width = 30,
+ },
+ renderer = {
+ root_folder_label = function() return ".." end,
+ indent_markers = {
+ enable = true,
+ },
+ icons = {
+ show = {
+ folder_arrow = false,
+ },
+ glyphs = {
+ git = {
+ unstaged = "-",
+ staged = "+",
+ unmerged = "",
+ renamed = "󰏪",
+ untracked = "",
+ deleted = "󰆴",
+ ignored = "",
+ },
+ },
+ },
+ },
+ filters = {
+ git_ignored = false,
+ custom = {
+ "^.git$",
+ },
+ },
+ },
+ config = function(_, opts)
+ local api = require("nvim-tree.api")
+ local Event = api.events.Event
+
+ api.events.subscribe(Event.Ready, function()
+ nvim_tree_root = api.tree.get_nodes().absolute_path
+ end)
+
+ api.events.subscribe(Event.TreeRendered, function()
+ nvim_tree_root = api.tree.get_nodes().absolute_path
+ end)
+
+ require("nvim-tree").setup(vim.tbl_extend("force", opts, {
+ -- on_attach = function ()
+ -- local function opts(desc)
+ -- return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
+ -- end
+ --
+ -- local function edit_or_open()
+ -- local node = api.tree.get_node_under_cursor()
+ --
+ -- if node.nodes ~= nil then
+ -- -- expand or collapse folder
+ -- api.node.open.edit()
+ -- else
+ -- -- open file
+ -- api.node.open.edit()
+ -- -- Close the tree if file was opened
+ -- api.tree.close()
+ -- end
+ -- end
+ --
+ -- -- open as vsplit on current node
+ -- local function vsplit_preview()
+ -- local node = api.tree.get_node_under_cursor()
+ --
+ -- if node.nodes ~= nil then
+ -- -- expand or collapse folder
+ -- api.node.open.edit()
+ -- else
+ -- -- open file as vsplit
+ -- api.node.open.vertical()
+ -- end
+ --
+ -- -- Finally refocus on tree if it was lost
+ -- api.tree.focus()
+ -- end
+ --
+ -- vim.keymap.set("n", "l", edit_or_open, opts("Edit Or Open"))
+ -- vim.keymap.set("n", "h", api.tree.close, opts("Close"))
+ -- end
+ --
+ }))
+ end,
+ dependencies = {
+ "nvim-tree/nvim-web-devicons",
+ },
+ },
+ {
+ "goolord/alpha-nvim",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ config = function()
+ require("alpha").setup(require "dash")
+ end,
+ },
+}