From 053d792b79252610a4bb4b526a7ec18597bb7e67 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Sat, 24 Apr 2021 01:57:41 +0200 Subject: [PATCH] switch to galaxyline --- nvim/lua/plugins.lua | 9 +- nvim/lua/statusline.lua | 357 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 364 insertions(+), 2 deletions(-) create mode 100644 nvim/lua/statusline.lua diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua index 260683c..5b5612a 100644 --- a/nvim/lua/plugins.lua +++ b/nvim/lua/plugins.lua @@ -15,13 +15,18 @@ return require("packer").startup(function(use) use "tpope/vim-endwise" use "vimwiki/vimwiki" use {"glacambre/firenvim", run = function() vim.fn["firenvim#install"](0) end} - use "vim-airline/vim-airline" - use "vim-airline/vim-airline-themes" use "jreybert/vimagit" use "airblade/vim-gitgutter" use "dag/vim-fish" use "uiiaoo/java-syntax.vim" use "honza/vim-snippets" use "sheerun/vim-polyglot" + use { + "glepnir/galaxyline.nvim", + branch = "main", + config = function() + require("statusline") + end + } end) diff --git a/nvim/lua/statusline.lua b/nvim/lua/statusline.lua new file mode 100644 index 0000000..b56f9f5 --- /dev/null +++ b/nvim/lua/statusline.lua @@ -0,0 +1,357 @@ +-- BASED OFF https://github.com/LoydAndrew/nvim/blob/main/evilline.lua + +local gl = require("galaxyline") +local gls = gl.section +local extension = require("galaxyline.provider_extensions") + +gl.short_line_list = { + "LuaTree", + "vista", + "dbui", + "startify", + "term", + "nerdtree", + "fugitive", + "fugitiveblame", + "plug" +} + +-- VistaPlugin = extension.vista_nearest + +local colors = { + bg = "#44475a", + line_bg = "#282c34", + fg = "#f8f8f2", + fg_green = "#65a380", + yellow = "#f1fa8c", + cyan = "#8be9fd", + darkblue = "#081633", + green = "#50fa7b", + orange = "#ffb86c", + purple = "#bd93f9", + magenta = "#ff79c6", + blue = "#51afef", + red = "#ff5555" +} + +local mode_color = { + n = colors.green, + i = colors.blue, + v = colors.magenta, + [""] = colors.blue, + V = colors.blue, + c = colors.red, + no = colors.magenta, + s = colors.orange, + S = colors.orange, + [""] = colors.orange, + ic = colors.yellow, + R = colors.purple, + Rv = colors.purple, + cv = colors.red, + ce = colors.red, + r = colors.cyan, + rm = colors.cyan, + ["r?"] = colors.cyan, + ["!"] = colors.green, + t = colors.green, + c = colors.purple, + ["r?"] = colors.red, + ["r"] = colors.red, + rm = colors.red, + R = colors.yellow, + Rv = colors.magenta +} + +local function lsp_status(status) + shorter_stat = "" + for match in string.gmatch(status, "[^%s]+") do + err_warn = string.find(match, "^[WE]%d+", 0) + if not err_warn then + shorter_stat = shorter_stat .. " " .. match + end + end + return shorter_stat +end + +local function get_coc_lsp() + local status = vim.fn["coc#status"]() + if not status or status == "" then + return "" + end + return lsp_status(status) +end + +function get_diagnostic_info() + if vim.fn.exists("*coc#rpc#start_server") == 1 then + return get_coc_lsp() + end + return "" +end + +local function get_current_func() + local has_func, func_name = pcall(vim.fn.nvim_buf_get_var, 0, "coc_current_function") + if not has_func then + return + end + return func_name +end + +function get_function_info() + if vim.fn.exists("*coc#rpc#start_server") == 1 then + return get_current_func() + end + return "" +end + +local function trailing_whitespace() + local trail = vim.fn.search("\\s$", "nw") + if trail ~= 0 then + return " " + else + return nil + end +end + +CocStatus = get_diagnostic_info +CocFunc = get_current_func +TrailingWhiteSpace = trailing_whitespace + +function has_file_type() + local f_type = vim.bo.filetype + if not f_type or f_type == "" then + return false + end + return true +end + +local buffer_not_empty = function() + if vim.fn.empty(vim.fn.expand("%:t")) ~= 1 then + return true + end + return false +end + +gls.left[1] = { + FirstElement = { + provider = function() + return " " + end, + highlight = {colors.blue, colors.line_bg} + } +} +gls.left[2] = { + ViMode = { + provider = function() + -- auto change color according the vim mode + local alias = { + n = "NORMAL", + i = "INSERT", + c = "COMMAND", + V = "VISUAL", + [""] = "VISUAL", + v = "VISUAL", + c = "COMMAND-LINE", + ["r?"] = ":CONFIRM", + rm = "--MORE", + R = "REPLACE", + Rv = "VIRTUAL", + s = "SELECT", + S = "SELECT", + ["r"] = "HIT-ENTER", + [""] = "SELECT", + t = "TERMINAL", + ["!"] = "SHELL" + } + local vim_mode = vim.fn.mode() + vim.api.nvim_command("hi GalaxyViMode guibg=" .. mode_color[vim_mode]) + return alias[vim_mode] .. "  " + end, + highlight = {colors.fg, colors.line_bg, "bold"} + } +} +gls.left[3] = { + ModeSep = { + provider = function() + vim.api.nvim_command("hi GalaxyModeSep guifg=" .. mode_color[vim.fn.mode()] .. " guibg=" .. colors.bg) + return "" + end, + highlight = {colors.line_bg, colors.line_bg}, + separator = " ", + separator_highlight = {colors.bg, colors.line_bg} + } +} +gls.left[4] = { + FileIcon = { + provider = "FileIcon", + condition = buffer_not_empty, + highlight = {require("galaxyline.provider_fileinfo").get_file_icon_color, colors.line_bg} + } +} +gls.left[5] = { + FileName = { + provider = {"FileName", "FileSize"}, + condition = buffer_not_empty, + highlight = {colors.fg, colors.line_bg, "bold"} + } +} + +gls.left[6] = { + GitIcon = { + provider = function() + return "  " + end, + condition = require("galaxyline.provider_vcs").check_git_workspace, + highlight = {colors.orange, colors.line_bg} + } +} +gls.left[7] = { + GitBranch = { + provider = "GitBranch", + condition = require("galaxyline.provider_vcs").check_git_workspace, + highlight = {"#8FBCBB", colors.line_bg, "bold"} + } +} + +local checkwidth = function() + local squeeze_width = vim.fn.winwidth(0) / 2 + if squeeze_width > 40 then + return true + end + return false +end + +gls.left[8] = { + DiffAdd = { + provider = "DiffAdd", + condition = checkwidth, + icon = " ", + highlight = {colors.green, colors.line_bg} + } +} +gls.left[9] = { + DiffModified = { + provider = "DiffModified", + condition = checkwidth, + icon = " ", + highlight = {colors.orange, colors.line_bg} + } +} +gls.left[10] = { + DiffRemove = { + provider = "DiffRemove", + condition = checkwidth, + icon = " ", + highlight = {colors.red, colors.line_bg} + } +} +gls.left[11] = { + LeftEnd = { + provider = function() + return "" + end, + highlight = {colors.line_bg, colors.bg}, + separator = "", + separator_highlight = {colors.line_bg, colors.bg} + } +} + +gls.left[12] = { + TrailingWhiteSpace = { + provider = TrailingWhiteSpace, + icon = "  ", + highlight = {colors.yellow, colors.bg} + } +} + +gls.left[13] = { + DiagnosticError = { + provider = "DiagnosticError", + icon = "  ", + highlight = {colors.red, colors.bg} + } +} +gls.left[14] = { + Space = { + provider = function() + return " " + end, + highlight = {colors.bg, colors.bg} + } +} +gls.left[15] = { + DiagnosticWarn = { + provider = "DiagnosticWarn", + icon = "  ", + highlight = {colors.yellow, colors.bg} + } +} + +gls.left[16] = { + CocStatus = { + provider = CocStatus, + highlight = {colors.green, colors.bg}, + icon = " 🗱" + } +} + +gls.left[17] = { + CocFunc = { + provider = CocFunc, + icon = " λ ", + highlight = {colors.yellow, colors.bg} + } +} + +gls.right[1] = { + FileFormat = { + provider = "FileFormat", + separator = "", + separator_highlight = {colors.line_bg, colors.bg}, + highlight = {colors.fg, colors.line_bg, "bold"} + } +} +gls.right[4] = { + LineInfo = { + provider = "LineColumn", + separator = " |", + separator_highlight = {colors.blue, colors.line_bg}, + highlight = {colors.fg, colors.line_bg} + } +} +gls.right[5] = { + PerCent = { + provider = "LinePercent", + separator = " ", + separator_highlight = {colors.darkblue, colors.darkblue}, + highlight = {colors.cyan, colors.darkblue, "bold"} + } +} + +gls.right[4] = { + ScrollBar = { + provider = 'ScrollBar', + highlight = {colors.blue,colors.purple}, + } +} + +gls.short_line_left[1] = { + BufferType = { + provider = "FileTypeName", + separator = "", + condition = has_file_type, + separator_highlight = {colors.purple, colors.bg}, + highlight = {colors.fg, colors.purple} + } +} + +gls.short_line_right[1] = { + BufferIcon = { + provider = "BufferIcon", + separator = "", + condition = has_file_type, + separator_highlight = {colors.purple, colors.bg}, + highlight = {colors.fg, colors.purple} + } +} +