| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 | local conditions = require "lvim.core.lualine.conditions"local colors = require "lvim.core.lualine.colors"local function diff_source()  local gitsigns = vim.b.gitsigns_status_dict  if gitsigns then    return {      added = gitsigns.added,      modified = gitsigns.changed,      removed = gitsigns.removed,    }  endendlocal statusline_hl = vim.api.nvim_get_hl_by_name("StatusLine", true)local cursorline_hl = vim.api.nvim_get_hl_by_name("CursorLine", true)local normal_hl = vim.api.nvim_get_hl_by_name("Normal", true)vim.api.nvim_set_hl(0, "SLCopilot", { fg = "#6CC644", bg = "NONE" })vim.api.nvim_set_hl(0, "SLGitIcon", { fg = "#E8AB53", bg = cursorline_hl.background })vim.api.nvim_set_hl(0, "SLBranchName", { fg = normal_hl.foreground, bg = cursorline_hl.background })vim.api.nvim_set_hl(0, "SLProgress", { fg = "#ECBE7B", bg = statusline_hl.background })local location_color = nillocal branch = lvim.icons.git.Branchlocal separator = lvim.icons.ui.LineMiddleif lvim.colorscheme == "tokyonight" then  location_color = "SLBranchName"  branch = "%#SLGitIcon#" .. lvim.icons.git.Branch .. "%*" .. "%#SLBranchName#"  local status_ok, tnc = pcall(require, "tokyonight.colors")  if status_ok then    local tncolors = tnc.setup { transform = true }    vim.api.nvim_set_hl(0, "SLSeparator", { fg = cursorline_hl.background, bg = tncolors.black })    separator = "%#SLSeparator#" .. lvim.icons.ui.LineMiddle .. "%*"  endendreturn {  mode = {    function()      return " " .. lvim.icons.ui.Target .. " "    end,    padding = { left = 0, right = 0 },    color = {},    cond = nil,  },  branch = {    "b:gitsigns_head",    icon = branch,    color = { gui = "bold" },  },  filename = {    "filename",    color = {},    cond = nil,  },  diff = {    "diff",    source = diff_source,    symbols = {      added = lvim.icons.git.LineAdded .. " ",      modified = lvim.icons.git.LineModified .. " ",      removed = lvim.icons.git.LineRemoved .. " ",    },    padding = { left = 2, right = 1 },    diff_color = {      added = { fg = colors.green },      modified = { fg = colors.yellow },      removed = { fg = colors.red },    },    cond = nil,  },  python_env = {    function()      local utils = require "lvim.core.lualine.utils"      if vim.bo.filetype == "python" then        local venv = os.getenv "CONDA_DEFAULT_ENV" or os.getenv "VIRTUAL_ENV"        if venv then          local icons = require "nvim-web-devicons"          local py_icon, _ = icons.get_icon ".py"          return string.format(" " .. py_icon .. " (%s)", utils.env_cleanup(venv))        end      end      return ""    end,    color = { fg = colors.green },    cond = conditions.hide_in_width,  },  diagnostics = {    "diagnostics",    sources = { "nvim_diagnostic" },    symbols = {      error = lvim.icons.diagnostics.BoldError .. " ",      warn = lvim.icons.diagnostics.BoldWarning .. " ",      info = lvim.icons.diagnostics.BoldInformation .. " ",      hint = lvim.icons.diagnostics.BoldHint .. " ",    },    -- cond = conditions.hide_in_width,  },  treesitter = {    function()      return lvim.icons.ui.Tree    end,    color = function()      local buf = vim.api.nvim_get_current_buf()      local ts = vim.treesitter.highlighter.active[buf]      return { fg = ts and not vim.tbl_isempty(ts) and colors.green or colors.red }    end,    cond = conditions.hide_in_width,  },  lsp = {    function(msg)      msg = msg or "LS Inactive"      local buf_clients = vim.lsp.buf_get_clients()      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      local buf_ft = vim.bo.filetype      local buf_client_names = {}      local copilot_active = false      -- 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        if client.name == "copilot" then          copilot_active = true        end      end      -- add formatter      local formatters = require "lvim.lsp.null-ls.formatters"      local supported_formatters = formatters.list_registered(buf_ft)      vim.list_extend(buf_client_names, supported_formatters)      -- add linter      local linters = require "lvim.lsp.null-ls.linters"      local supported_linters = linters.list_registered(buf_ft)      vim.list_extend(buf_client_names, supported_linters)      local unique_client_names = vim.fn.uniq(buf_client_names)      local language_servers = "[" .. table.concat(unique_client_names, ", ") .. "]"      if copilot_active then        language_servers = language_servers .. "%#SLCopilot#" .. " " .. lvim.icons.git.Octoface .. "%*"      end      return language_servers    end,    separator = separator,    color = { gui = "bold" },    cond = conditions.hide_in_width,  },  location = { "location", color = location_color },  progress = {    "progress",    fmt = function()      return "%P/%L"    end,    color = {},  },  spaces = {    function()      local shiftwidth = vim.api.nvim_buf_get_option(0, "shiftwidth")      return lvim.icons.ui.Tab .. " " .. shiftwidth    end,    separator = separator,    padding = 1,  },  encoding = {    "o:encoding",    fmt = string.upper,    color = {},    cond = conditions.hide_in_width,  },  filetype = { "filetype", cond = nil, padding = { left = 1, right = 1 } },  scrollbar = {    function()      local current_line = vim.fn.line "."      local total_lines = vim.fn.line "$"      local chars = { "__", "▁▁", "▂▂", "▃▃", "▄▄", "▅▅", "▆▆", "▇▇", "██" }      local line_ratio = current_line / total_lines      local index = math.ceil(line_ratio * #chars)      return chars[index]    end,    padding = { left = 0, right = 0 },    color = "SLProgress",    cond = nil,  },}
 |