[Feature] switch galaxyline to lualine (#1329)

This commit is contained in:
chaeing 2021-08-20 02:16:29 -07:00 committed by GitHub
parent 5959872307
commit 85fe093efb
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 412 additions and 378 deletions

View file

@ -1,348 +0,0 @@
-- if not package.loaded['galaxyline'] then
-- return
-- end
local Log = require "core.log"
local status_ok, gl = pcall(require, "galaxyline")
if not status_ok then
Log:get_default().error "Failed to load galaxyline"
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" }
local function get_mode_name()
local names = {
n = "NORMAL",
i = "INSERT",
c = "COMMAND",
v = "VISUAL",
V = "VISUAL LINE",
t = "TERMINAL",
R = "REPLACE",
[""] = "VISUAL BLOCK",
}
return names[vim.fn.mode()]
end
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,
}
if lvim.builtin.galaxyline.show_mode then
local name = get_mode_name()
-- Fall back to the default behavior is a name is not defined
if name ~= nil then
vim.api.nvim_command("hi GalaxyViMode guibg=" .. mode_color[vim.fn.mode()])
vim.api.nvim_command("hi GalaxyViMode guifg=" .. colors.alt_bg)
return " " .. name .. " "
end
end
vim.api.nvim_command("hi GalaxyViMode guibg=" .. colors.alt_bg)
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 },
},
})
local function get_attached_provider_name(msg)
msg = msg or "LSP Inactive"
local buf_clients = vim.lsp.buf_get_clients()
if next(buf_clients) == nil then
return msg
end
local buf_client_names = {}
for _, client in pairs(buf_clients) do
if client.name ~= "null-ls" then
table.insert(buf_client_names, client.name)
end
end
local null_ls = require "lsp.null-ls"
local null_ls_providers = null_ls.list_supported_provider_names(vim.bo.filetype)
vim.list_extend(buf_client_names, null_ls_providers)
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}}})

View file

@ -0,0 +1,16 @@
local colors = {
bg = "#202328",
fg = "#bbc2cf",
yellow = "#ECBE7B",
cyan = "#008080",
darkblue = "#081633",
green = "#98be65",
orange = "#FF8800",
violet = "#a9a1e1",
magenta = "#c678dd",
purple = "#c678dd",
blue = "#51afef",
red = "#ec5f67",
}
return colors

View file

@ -0,0 +1,130 @@
local conditions = require "core.lualine.conditions"
local colors = require "core.lualine.colors"
return {
vi_mode = {
function()
return " "
end,
left_padding = 0,
right_padding = 0,
condition = conditions.hide_in_width,
},
branch = {
"branch",
icon = "",
condition = function()
return conditions.hide_in_width() and conditions.check_git_workspace()
end,
},
diff = {
"diff",
symbols = { added = "", modified = "", removed = "" },
color_added = { fg = colors.green },
color_modified = { fg = colors.yellow },
color_removed = { fg = colors.red },
condition = conditions.hide_in_width,
},
python_env = {
function()
local utils = require "core.lualine.utils"
if vim.bo.filetype == "python" then
local venv = os.getenv "CONDA_DEFAULT_ENV"
if venv then
return string.format("  (%s)", utils.env_cleanup(venv))
end
venv = os.getenv "VIRTUAL_ENV"
if venv then
return string.format("  (%s)", utils.env_cleanup(venv))
end
return ""
end
return ""
end,
color = { fg = colors.green },
condition = conditions.hide_in_width,
},
diagnostics = {
"diagnostics",
sources = { "nvim_lsp" },
symbols = { error = "", warn = "", info = "", hint = "" },
condition = conditions.hide_in_width,
},
treesitter = {
function()
if next(vim.treesitter.highlighter.active) then
return ""
end
return ""
end,
color = { fg = colors.green },
condition = conditions.hide_in_width,
},
lsp = {
function(msg)
msg = msg or "LSP Inactive"
local buf_clients = vim.lsp.buf_get_clients()
if next(buf_clients) == nil then
return msg
end
local buf_ft = vim.bo.filetype
local buf_client_names = {}
-- add client
local utils = require "lsp.utils"
local active_client = utils.get_active_client_by_ft(buf_ft)
for _, client in pairs(buf_clients) do
if client.name ~= "null-ls" then
table.insert(buf_client_names, client.name)
end
end
vim.list_extend(buf_client_names, active_client or {})
-- add formatter
local formatters = require "lsp.null-ls.formatters"
local supported_formatters = formatters.list_supported_names(buf_ft)
vim.list_extend(buf_client_names, supported_formatters)
-- add linter
local linters = require "lsp.null-ls.linters"
local supported_linters = linters.list_supported_names(buf_ft)
vim.list_extend(buf_client_names, supported_linters)
return table.concat(buf_client_names, ", ")
end,
condition = conditions.hide_in_width,
icon = "",
color = { gui = "bold" },
},
location = { "location", condition = conditions.hide_in_width },
progress = { "progress", condition = conditions.hide_in_width },
spaces = {
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 = conditions.hide_in_width,
},
encoding = {
"o:encoding",
upper = true,
condition = conditions.hide_in_width,
},
filetype = { "filetype", condition = conditions.hide_in_width },
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,
color = { fg = colors.yellow, bg = colors.bg },
left_padding = 0,
right_padding = 0,
},
}

View file

@ -0,0 +1,17 @@
local window_width_limit = 80
local conditions = {
buffer_not_empty = function()
return vim.fn.empty(vim.fn.expand "%:t") ~= 1
end,
hide_in_width = function()
return vim.fn.winwidth(0) > window_width_limit
end,
check_git_workspace = function()
local filepath = vim.fn.expand "%:p:h"
local gitdir = vim.fn.finddir(".git", filepath .. ";")
return gitdir and #gitdir > 0 and #gitdir < #filepath
end,
}
return conditions

47
lua/core/lualine/init.lua Normal file
View file

@ -0,0 +1,47 @@
local M = {}
M.config = function()
lvim.builtin.lualine = {
active = true,
style = "lvim",
options = {
icons_enabled = nil,
component_separators = nil,
section_separators = nil,
theme = nil,
disabled_filetypes = nil,
},
sections = {
lualine_a = nil,
lualine_b = nil,
lualine_c = nil,
lualine_x = nil,
lualine_y = nil,
lualine_z = nil,
},
inactive_sections = {
lualine_a = nil,
lualine_b = nil,
lualine_c = nil,
lualine_x = nil,
lualine_y = nil,
lualine_z = nil,
},
tabline = nil,
extensions = nil,
on_config_done = nil,
}
end
M.setup = function()
require("core.lualine.styles").update()
require("core.lualine.utils").validate_theme()
local lualine = require "lualine"
lualine.setup(lvim.builtin.lualine)
if lvim.builtin.lualine.on_config_done then
lvim.builtin.lualine.on_config_done(lualine, lvim.builtin.lualine)
end
end
return M

170
lua/core/lualine/styles.lua Normal file
View file

@ -0,0 +1,170 @@
local M = {}
local components = require "core.lualine.components"
local styles = {
lvim = nil,
default = nil,
none = nil,
}
styles.none = {
style = "none",
options = {
icons_enabled = true,
component_separators = "",
section_separators = "",
disabled_filetypes = {},
},
sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {},
},
tabline = {},
extensions = {},
}
styles.default = {
style = "default",
options = {
icons_enabled = true,
component_separators = { "", "" },
section_separators = { "", "" },
disabled_filetypes = {},
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch" },
lualine_c = { "filename" },
lualine_x = { "encoding", "fileformat", "filetype" },
lualine_y = { "progress" },
lualine_z = { "location" },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename" },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
extensions = {},
}
styles.lvim = {
style = "lvim",
options = {
icons_enabled = true,
component_separators = "",
section_separators = "",
disabled_filetypes = { "dashboard", "" },
},
sections = {
lualine_a = {
components.vi_mode,
},
lualine_b = {
components.branch,
},
lualine_c = {
components.diff,
components.python_env,
},
lualine_x = {
components.diagnostics,
components.treesitter,
components.lsp,
-- components.location,
-- components.progress,
-- components.spaces,
-- components.encoding,
components.filetype,
},
lualine_y = {
-- components.filetype,
},
lualine_z = {
components.scrollbar,
},
},
inactive_sections = {
lualine_a = {
"filename",
},
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {},
},
tabline = {},
extensions = { "nvim-tree" },
}
function M.get_style(style)
local style_keys = vim.tbl_keys(styles)
if not vim.tbl_contains(style_keys, style) then
local Log = require "core.log"
local logger = Log:get_default()
logger.error(
"Invalid lualine style",
string.format('"%s"', style),
"options are: ",
string.format('"%s"', table.concat(style_keys, '", "'))
)
logger.info '"lvim" style is applied.'
style = "lvim"
end
return vim.deepcopy(styles[style])
end
function M.update()
local config = lvim.builtin.lualine
local style = M.get_style(config.style)
lvim.builtin.lualine = {
active = true,
style = style.style,
options = {
icons_enabled = config.options.icons_enabled or style.options.icons_enabled,
component_separators = config.options.component_separators or style.options.component_separators,
section_separators = config.options.section_separators or style.options.section_separators,
theme = config.options.theme or lvim.colorscheme or "auto",
disabled_filetypes = config.options.disabled_filetypes or style.options.disabled_filetypes,
},
sections = {
lualine_a = config.sections.lualine_a or style.sections.lualine_a,
lualine_b = config.sections.lualine_b or style.sections.lualine_b,
lualine_c = config.sections.lualine_c or style.sections.lualine_c,
lualine_x = config.sections.lualine_x or style.sections.lualine_x,
lualine_y = config.sections.lualine_y or style.sections.lualine_y,
lualine_z = config.sections.lualine_z or style.sections.lualine_z,
},
inactive_sections = {
lualine_a = config.inactive_sections.lualine_a or style.inactive_sections.lualine_a,
lualine_b = config.inactive_sections.lualine_b or style.inactive_sections.lualine_b,
lualine_c = config.inactive_sections.lualine_c or style.inactive_sections.lualine_c,
lualine_x = config.inactive_sections.lualine_x or style.inactive_sections.lualine_x,
lualine_y = config.inactive_sections.lualine_y or style.inactive_sections.lualine_y,
lualine_z = config.inactive_sections.lualine_z or style.inactive_sections.lualine_z,
},
tabline = config.tabline or style.tabline,
extensions = config.extensions or style.extensions,
on_config_done = config.on_config_done,
}
end
return M

View file

@ -0,0 +1,24 @@
local M = {}
function M.validate_theme()
local theme = lvim.builtin.lualine.options.theme
local lualine_loader = require "lualine.utils.loader"
local ok = pcall(lualine_loader.load_theme, theme)
if not ok then
lvim.builtin.lualine.options.theme = "auto"
end
end
function M.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
return M

View file

@ -1,20 +0,0 @@
lvim.builtin.galaxyline = {
active = true,
show_mode = false,
colors = {
alt_bg = "#2E2E2E",
grey = "#858585",
blue = "#569CD6",
green = "#608B4E",
yellow = "#DCDCAA",
orange = "#FF8800",
purple = "#C586C0",
magenta = "#D16D9E",
cyan = "#4EC9B0",
red = "#D16969",
error_red = "#F44747",
warning_orange = "#FF8800",
info_yellow = "#FFCC66",
hint_blue = "#9CDCFE",
},
}

View file

@ -27,7 +27,7 @@ lvim = {
which_key = {}, which_key = {},
comment = {}, comment = {},
project = {}, project = {},
galaxyline = {}, lualine = {},
bufferline = {}, bufferline = {},
dap = {}, dap = {},
dashboard = {}, dashboard = {},
@ -1330,7 +1330,6 @@ lvim.lang = {
require("keymappings").config() require("keymappings").config()
require("core.which-key").config() require("core.which-key").config()
require "core.status_colors"
require("core.gitsigns").config() require("core.gitsigns").config()
require("core.compe").config() require("core.compe").config()
require("core.dashboard").config() require("core.dashboard").config()
@ -1343,3 +1342,4 @@ require("core.project").config()
require("core.bufferline").config() require("core.bufferline").config()
require("core.autopairs").config() require("core.autopairs").config()
require("core.comment").config() require("core.comment").config()
require("core.lualine").config()

View file

@ -164,15 +164,13 @@ return {
-- Status Line and Bufferline -- Status Line and Bufferline
{ {
"glepnir/galaxyline.nvim", -- "hoob3rt/lualine.nvim",
"shadmansaleh/lualine.nvim",
-- "Lunarvim/lualine.nvim",
config = function() config = function()
require "core.galaxyline" require("core.lualine").setup()
if lvim.builtin.galaxyline.on_config_done then
lvim.builtin.galaxyline.on_config_done(require "galaxyline")
end
end, end,
event = "BufWinEnter", disable = not lvim.builtin.lualine.active,
disable = not lvim.builtin.galaxyline.active,
}, },
{ {

View file

@ -88,6 +88,7 @@ function utils.toggle_autoformat()
end end
function utils.reload_lv_config() function utils.reload_lv_config()
require("core.lualine").config()
vim.cmd "source ~/.local/share/lunarvim/lvim/lua/settings.lua" vim.cmd "source ~/.local/share/lunarvim/lvim/lua/settings.lua"
vim.cmd("source " .. USER_CONFIG_PATH) vim.cmd("source " .. USER_CONFIG_PATH)
require("keymappings").setup() -- this should be done before loading the plugins require("keymappings").setup() -- this should be done before loading the plugins
@ -101,7 +102,6 @@ function utils.reload_lv_config()
-- vim.cmd ":PackerClean" -- vim.cmd ":PackerClean"
local null_ls = require "lsp.null-ls" local null_ls = require "lsp.null-ls"
null_ls.setup(vim.bo.filetype, { force_reload = true }) null_ls.setup(vim.bo.filetype, { force_reload = true })
Log:get_default().info "Reloaded configuration" Log:get_default().info "Reloaded configuration"
end end