LunarVim/lua/core/galaxyline.lua
2021-07-30 14:44:25 -04:00

339 lines
8.3 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- if not package.loaded['galaxyline'] then
-- return
-- end
local status_ok, gl = pcall(require, "galaxyline")
if not status_ok then
return
end
-- NOTE: if someone defines colors but doesn't have them then this will break
local palette_status_ok, colors = pcall(require, lvim.colorscheme .. ".palette")
if not palette_status_ok then
colors = lvim.builtin.galaxyline.colors
end
local condition = require "galaxyline.condition"
local gls = gl.section
gl.short_line_list = { "NvimTree", "vista", "dbui", "packer" }
table.insert(gls.left, {
ViMode = {
provider = function()
-- auto change color according the vim mode
local mode_color = {
n = colors.blue,
i = colors.green,
v = colors.purple,
[""] = colors.purple,
V = colors.purple,
c = colors.magenta,
no = colors.blue,
s = colors.orange,
S = colors.orange,
[""] = colors.orange,
ic = colors.yellow,
R = colors.red,
Rv = colors.red,
cv = colors.blue,
ce = colors.blue,
r = colors.cyan,
rm = colors.cyan,
["r?"] = colors.cyan,
["!"] = colors.blue,
t = colors.blue,
}
vim.api.nvim_command("hi GalaxyViMode guifg=" .. mode_color[vim.fn.mode()])
return ""
end,
separator_highlight = { "NONE", colors.alt_bg },
highlight = { "NONE", colors.alt_bg },
},
})
-- print(vim.fn.getbufvar(0, 'ts'))
vim.fn.getbufvar(0, "ts")
table.insert(gls.left, {
GitIcon = {
provider = function()
return ""
end,
condition = condition.check_git_workspace,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.orange, colors.alt_bg },
},
})
table.insert(gls.left, {
GitBranch = {
provider = "GitBranch",
condition = condition.check_git_workspace,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.left, {
DiffAdd = {
provider = "DiffAdd",
condition = condition.hide_in_width,
icon = "",
highlight = { colors.green, colors.alt_bg },
},
})
table.insert(gls.left, {
DiffModified = {
provider = "DiffModified",
condition = condition.hide_in_width,
icon = "",
highlight = { colors.blue, colors.alt_bg },
},
})
table.insert(gls.left, {
DiffRemove = {
provider = "DiffRemove",
condition = condition.hide_in_width,
icon = "",
highlight = { colors.red, colors.alt_bg },
},
})
table.insert(gls.left, {
Filler = {
provider = function()
return " "
end,
highlight = { colors.grey, colors.alt_bg },
},
})
-- get output from shell command
function os.capture(cmd, raw)
local f = assert(io.popen(cmd, "r"))
local s = assert(f:read "*a")
f:close()
if raw then
return s
end
s = string.gsub(s, "^%s+", "")
s = string.gsub(s, "%s+$", "")
s = string.gsub(s, "[\n\r]+", " ")
return s
end
-- cleanup virtual env
local function env_cleanup(venv)
if string.find(venv, "/") then
local final_venv = venv
for w in venv:gmatch "([^/]+)" do
final_venv = w
end
venv = final_venv
end
return venv
end
local PythonEnv = function()
if vim.bo.filetype == "python" then
local venv = os.getenv "CONDA_DEFAULT_ENV"
if venv ~= nil then
return "  (" .. env_cleanup(venv) .. ")"
end
venv = os.getenv "VIRTUAL_ENV"
if venv ~= nil then
return "  (" .. env_cleanup(venv) .. ")"
end
return ""
end
return ""
end
table.insert(gls.left, {
VirtualEnv = {
provider = PythonEnv,
event = "BufEnter",
highlight = { colors.green, colors.alt_bg },
},
})
table.insert(gls.right, {
DiagnosticError = {
provider = "DiagnosticError",
icon = "",
highlight = { colors.red, colors.alt_bg },
},
})
table.insert(gls.right, {
DiagnosticWarn = {
provider = "DiagnosticWarn",
icon = "",
highlight = { colors.orange, colors.alt_bg },
},
})
table.insert(gls.right, {
DiagnosticInfo = {
provider = "DiagnosticInfo",
icon = "",
highlight = { colors.yellow, colors.alt_bg },
},
})
table.insert(gls.right, {
DiagnosticHint = {
provider = "DiagnosticHint",
icon = "",
highlight = { colors.blue, colors.alt_bg },
},
})
table.insert(gls.right, {
TreesitterIcon = {
provider = function()
if next(vim.treesitter.highlighter.active) ~= nil then
return ""
end
return ""
end,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.green, colors.alt_bg },
},
})
-- TODO: this function doesn't need to be this complicated
local function get_attached_provider_name(msg)
msg = msg or "LSP Inactive"
local buf_ft = vim.bo.filetype
local buf_clients = vim.lsp.buf_get_clients()
if next(buf_clients) == nil then
return msg
end
local utils = require "utils"
local config = require("null-ls.config").get()
local builtins = require "null-ls.builtins"
-- concat all the builtin formatters and linters from null-ls
local all_things = builtins.formatting
for k, v in pairs(builtins.diagnostics) do
all_things[k] = v
end
-- if we open multiple filetypes in the same session
-- null-ls will register multiple formatter/linters
-- but only use the ones that support vim.bo.filetype
-- so we need to filter them
local buf_client_names = {}
for _, client in pairs(buf_clients) do
if client.name == "null-ls" then
-- for every registered formatter/linter in the current buffer
for _, v in pairs(config._names) do
-- show only the ones that are being used for the current filetype
if utils.has_value(all_things[v].filetypes, buf_ft) then
table.insert(buf_client_names, v)
end
end
else
table.insert(buf_client_names, client.name)
end
end
return table.concat(buf_client_names, ", ")
end
table.insert(gls.right, {
ShowLspClient = {
provider = get_attached_provider_name,
condition = function()
local tbl = { ["dashboard"] = true, [" "] = true }
if tbl[vim.bo.filetype] then
return false
end
return true
end,
icon = "",
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
LineInfo = {
provider = "LineColumn",
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
PerCent = {
provider = "LinePercent",
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
Tabstop = {
provider = function()
local label = "Spaces: "
if not vim.api.nvim_buf_get_option(0, "expandtab") then
label = "Tab size: "
end
return label .. vim.api.nvim_buf_get_option(0, "shiftwidth") .. " "
end,
condition = condition.hide_in_width,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
BufferType = {
provider = "FileTypeName",
condition = condition.hide_in_width,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
FileEncode = {
provider = "FileEncode",
condition = condition.hide_in_width,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.right, {
Space = {
provider = function()
return " "
end,
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.grey, colors.alt_bg },
},
})
table.insert(gls.short_line_left, {
BufferType = {
provider = "FileTypeName",
separator = " ",
separator_highlight = { "NONE", colors.alt_bg },
highlight = { colors.alt_bg, colors.alt_bg },
},
})
table.insert(gls.short_line_left, {
SFileName = {
provider = "SFileName",
condition = condition.buffer_not_empty,
highlight = { colors.alt_bg, colors.alt_bg },
},
})
--table.insert(gls.short_line_right[1] = {BufferIcon = {provider = 'BufferIcon', highlight = {colors.grey, colors.alt_bg}}})