diff --git a/lua/custom/default.lua b/lua/custom/default.lua index 0bce315..72c2834 100644 --- a/lua/custom/default.lua +++ b/lua/custom/default.lua @@ -27,7 +27,7 @@ vim.g.pcode_colorscheme = "tokyonight" -- nightfox -- 0 =off 1= on vim.g.pcode_transparent_mode = 1 -vim.g.pcode_clear_lualine = 1 +vim.g.pcode_clear_lualine = 0 -- 0 disable progress -- 1 lualine lsp progress -- 2 fidget progress diff --git a/lua/custom/plugins/lualine.lua b/lua/custom/plugins/lualine.lua new file mode 100644 index 0000000..8a2dcf3 --- /dev/null +++ b/lua/custom/plugins/lualine.lua @@ -0,0 +1,214 @@ +return { + { + "nvim-lualine/lualine.nvim", + event = "BufWinEnter", + config = function() + local hide_in_width = function() + return vim.fn.winwidth(0) > 80 + end + local icons = require("user.icons") + + -- start for lsp + local list_registered_providers_names = function(filetype) + local s = require("null-ls.sources") + local available_sources = s.get_available(filetype) + local registered = {} + for _, source in ipairs(available_sources) do + for method in pairs(source.methods) do + registered[method] = registered[method] or {} + table.insert(registered[method], source.name) + end + end + return registered + end + + local null_ls = require("null-ls") + -- for formatter + local list_registered = function(filetype) + local method = null_ls.methods.FORMATTING + local registered_providers = list_registered_providers_names(filetype) + return registered_providers[method] or {} + end + + --- for linter + local alternative_methods = { + null_ls.methods.DIAGNOSTICS, + null_ls.methods.DIAGNOSTICS_ON_OPEN, + null_ls.methods.DIAGNOSTICS_ON_SAVE, + } + + local linter_list_registered = function(filetype) + local registered_providers = list_registered_providers_names(filetype) + local providers_for_methods = vim.tbl_flatten(vim.tbl_map(function(m) + return registered_providers[m] or {} + end, alternative_methods)) + + return providers_for_methods + end + -- end for lsp + + local lsp_info = { + function() + local msg = "LS Inactive" + local buf_ft = vim.bo.filetype + local clients = vim.lsp.get_active_clients() + -- start register + local buf_clients = vim.lsp.buf_get_clients() + local buf_client_names = {} + if next(buf_clients) == nil then + -- TODO: clean up this if statement + if type(msg) == "boolean" or #msg == 0 then + return "LS Inactive" + end + return msg + end + -- add client + for _, client in pairs(buf_clients) do + if client.name ~= "null-ls" and client.name ~= "copilot" then + table.insert(buf_client_names, client.name) + end + end + -- add formatter + local supported_formatters = list_registered(buf_ft) + vim.list_extend(buf_client_names, supported_formatters) + -- add linter + local supported_linters = linter_list_registered(buf_ft) + vim.list_extend(buf_client_names, supported_linters) + -- decomple + local unique_client_names = vim.fn.uniq(buf_client_names) + local msg = table.concat(unique_client_names, ", ") + return msg + end, + --icon = " ", + icon = icons.ui.Gear .. "", + padding = 1, + } + + local diagnostics = { + "diagnostics", + sources = { "nvim_diagnostic" }, + sections = { "error", "warn" }, + -- symbols = { error = " ", warn = " " }, + symbols = { + error = icons.diagnostics.BoldError .. " ", + warn = icons.diagnostics.BoldWarning .. " ", + }, + colored = true, + update_in_insert = false, + always_visible = false, + } + + local diff = { + "diff", + colored = true, + -- symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols + symbols = { + added = icons.git.LineAdded .. " ", + modified = icons.git.LineModified .. " ", + removed = icons.git.LineRemoved .. " ", + }, -- changes diff symbols + cond = hide_in_width, + } + + local spaces = function() + -- return " " .. vim.api.nvim_buf_get_option(0, "shiftwidth") + return icons.ui.Tab .. " " .. vim.api.nvim_buf_get_option(0, "shiftwidth") + end + + + -- stylua: ignore + local colors = { + blue = '#9ece6a', + cyan = '#bb9af7', + black = '#1a1b26', + black_transparant = '#1a1b2600', + white = '#c6c6c6', + red = "#ff757f", + skyblue = '#7aa2f7', + grey = '#3b4261', + yellow = "#ffc777", + fg_gutter = "#3b4261", + green1 = "#4fd6be", + } + + local bubbles_theme = { + normal = { + a = { fg = colors.black, bg = colors.skyblue }, + b = { fg = colors.white, bg = colors.grey }, + c = { fg = colors.white, bg = colors.black_transparant }, + }, + + insert = { + a = { fg = colors.black, bg = colors.blue }, + b = { fg = colors.blue, bg = colors.grey }, + }, + visual = { + a = { fg = colors.black, bg = colors.cyan }, + b = { fg = colors.cyan, bg = colors.grey }, + }, + replace = { + a = { bg = colors.red, fg = colors.black }, + b = { bg = colors.fg_gutter, fg = colors.red }, + }, + command = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.fg_gutter, fg = colors.yellow }, + }, + terminal = { + a = { bg = colors.green1, fg = colors.black }, + b = { bg = colors.fg_gutter, fg = colors.green1 }, + }, + inactive = { + a = { fg = colors.white, bg = colors.black_transparant }, + b = { fg = colors.white, bg = colors.black_transparant }, + c = { fg = colors.black, bg = colors.black_transparant }, + }, + } + + require("lualine").setup({ + options = { + theme = bubbles_theme, + component_separators = "|", + section_separators = { left = "", right = "" }, + disabled_filetypes = { + "TelescopePrompt", + "packer", + "alpha", + "dashboard", + "NvimTree", + "Outline", + "DressingInput", + "toggleterm", + "lazy", + "mason", + "neo-tree", + }, + always_divide_middle = true, + }, + sections = { + lualine_a = { + { "mode", separator = { left = "" }, right_padding = 3 }, + }, + -- lualine_b = { "filename", "branch" }, + lualine_b = { "branch" }, + lualine_c = { lsp_info, diagnostics }, + lualine_x = { diff, spaces, "filetype" }, + lualine_y = { "progress" }, + lualine_z = { + { "location", separator = { right = "" }, left_padding = 3 }, + }, + }, + inactive_sections = { + lualine_a = { "filename" }, + lualine_b = {}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = { "location" }, + }, + tabline = {}, + extensions = {}, + }) + end, + }, +}