local present, gl = pcall(require, "galaxyline") if not present then return end local gls = gl.section local fileinfo = require('galaxyline.provider_fileinfo') local iconz = require("nvim-nonicons") gl.short_line_list = {'plug', 'fugitive', 'NvimTree', 'vista', 'dbui', 'packer', 'startify', 'coq'} local icons = { sep = { right = "", left = "" }, diagnostic = { -- error = " ", error = iconz.get("x-circle-fill"), -- warn = " ", warn = iconz.get("alert"), -- info = " " info = iconz.get("info") }, diff = { added = iconz.get("diff-added"), modified = iconz.get("diff-modified"), removed = iconz.get("diff-removed"), -- add = " ", -- modified = " ", -- remove = " " }, git = iconz.get("git-branch"), line_nr = iconz.get("list-ordered"), file = { read_only = '', -- modified = '⨁ ', -- modified = '✎', modified = iconz.get("pencil"), }, normal = iconz.get("vim-normal-mode"), insert = iconz.get("vim-insert-mode"), command = iconz.get("vim-command-mode"), visual = iconz.get("vim-visual-mode"), replace = iconz.get("vim-replace-mode"), selection = iconz.get("vim-select-mode"), terminal = iconz.get("terminal"), visual_block = iconz.get("field") -- terminal = iconz.get("vim-terminal-mode") } local colors = { main = "#ff87ff", bg_alt = "#0B0C15", main_bg = "#262626", lightbg = "#21252B", commented = "#5c6370", grey = "#3c4048", line_bg = "#282c34", creamydark = "#282c34", purple = "#252930", cyan = "#00FFFF", nord = "#81A1C1", lightblue = "#81a1c1", darkblue = "#61afef", blue = "#61afef", limegreen = "#bbe67e", green = "#7ed491", fg_green = "#65a380", creamygreen = "#a3be8c", yellow = "#cccc00", creamyorange = "#ff8800", orange = "#FF8800", bg = "#000B0C15", fg = "#D8DEE9", magenta = "#c678dd", red = "#df8890", crimsonRed = "#990000", crimsonRed2 = "#ff4d4d", greenYel = "#EBCB8B", white = "#d8dee9", brown = "#91684a", teal = '#23D4AC', blue2 = '#5c5c81', icon_inactive= '#9896AA' } local mode_map = { -- n = {" NORMAL ", colors.red}, -- i = {" INSERT ", colors.green}, -- c = {" COMMAND ", colors.orange}, -- v = {" VISUAL ", colors.lightblue}, n = {icons.normal .. " NORMAL ", colors.red}, no = {icons.normal .. " NORMAL ", colors.red}, i = {icons.insert .. " INSERT ", colors.green}, ic = {icons.insert .. " INSERT ", colors.green}, c = {icons.command .. " COMMAND ", colors.orange}, ce = {icons.command .. " COMMAND ", colors.orange}, cv = {icons.command .. " COMMAND ", colors.orange}, v = {icons.visual .. " VISUAL ", colors.lightblue}, V = {icons.visual .. " VISUAL ", colors.lightblue}, [""] = {icons.visual .. " VISUAL" .. icons.visual_block .. " ", colors.brown}, R = {icons.replace .. " REPLACE ", colors.crimsonRed2}, ['r?'] = {icons.replace .. " REPLACE ", colors.lightblue}, Rv = {icons.replace .. " REPLACE ", colors.crimsonRed2}, r = {icons.replace .. " REPLACE ", colors.blue2}, rm = {icons.replace .. " REPLACE ", colors.blue2}, s = {icons.selection .. " SELECT ", colors.greenYelenYel}, S = {icons.selection .. " SELECT ", colors.greenYelenYel}, [''] = {icons.selection .. " SELECT ", colors.greenYelenYel}, t = {icons.terminal .. " TERMINAL ", colors.magenta}, ['!'] = { " ! ", colors.crimsonRed} } ----------------------------=== Funcs ===-------------------------- local function mode_label() return mode_map[vim.fn.mode()][1] or 'N/A' end local function mode_hl() return mode_map[vim.fn.mode()][2] or colors.main end local function highlight1(group, fg, gui) local cmd = string.format('highlight %s guifg=%s', group, fg) if gui ~= nil then cmd = cmd .. ' gui=' .. gui end vim.cmd(cmd) end local function highlight2(group, bg, fg, gui) local cmd = string.format('highlight %s guibg=%s guifg=%s', group, bg, fg) if gui ~= nil then cmd = cmd .. ' gui=' .. gui end vim.cmd(cmd) end local function get_coc_lsp() local f, status = pcall(vim.api.nvim_get_var, 'coc_status') if not f or status == '' then return nil else return status end end local function get_diagnostic_info() if vim.fn.exists('*coc#rpc#start_server') == 1 then return get_coc_lsp() end return nil end local function get_current_func() local has_func, func_name = pcall(vim.api.nvim_buf_get_var, 0, 'coc_current_function') if not has_func then return nil end return func_name end local function get_function_info() if vim.fn.exists('*coc#rpc#start_server') == 1 then return get_current_func() end return '' end CocStatus = get_diagnostic_info CocFunc = get_function_info local checkwidth = function() local squeeze_width = vim.fn.winwidth(0) / 2 if squeeze_width > 40 then return true end return false end local function file_name(is_active, highlight_group) local normal_fg = is_active and colors.creamydark or colors.blue2 local modified_fg = is_active and "#ff0000" or "#cc8800" if vim.bo.modifiable then if vim.bo.modified then vim.api.nvim_command('hi ' .. highlight_group .. ' guifg='.. modified_fg .. ' gui=bold') else vim.api.nvim_command('hi ' .. highlight_group .. ' guifg='.. normal_fg .. ' gui=NONE') end end local fname = fileinfo.get_current_file_name(icons.file.modified, icons.file.read_only) if (require("galaxyline.condition").check_git_workspace()) and checkwidth() then local git_dir = require("galaxyline.provider_vcs").get_git_dir(vim.fn.expand("%:p")) local current_dir = vim.fn.expand("%:p:h") if git_dir == current_dir .. "/.git" or git_dir == nil then return fname end local get_path_from_git_root = current_dir:sub(#git_dir - 3) return get_path_from_git_root .. "/" .. fname end return fname end local white_space = function() return ' ' end local function trailing_whitespace() local trail = vim.fn.search("\\s$", "nw") if trail ~= 0 then return ' ' else return nil end end local TrailingWhiteSpace = trailing_whitespace local check_git_width = function() return checkwidth() and require("galaxyline.condition").check_git_workspace() end local check_git_terminal_workspace = function() return not (vim.fn.mode() == 't') and require("galaxyline.condition").check_git_workspace() end ----------------------------=== Components ===-------------------------- ----------------------------=== Left ===-------------------------- local i = 1 gls.left[i] = { leftRounded = { provider = function() return "" end, highlight = 'GalaxyViModeInv' } } i = i + 1 gls.left[i] = { ViMode = { provider = function() highlight2('GalaxyViMode', mode_hl(), colors.main_bg, 'bold') highlight1('GalaxyViModeInv', mode_hl(), 'bold') return string.format(' %s', mode_label()) end, } } i = i + 1 gls.left[i] = { WhiteSpace = { provider = function() highlight2('SecondGalaxyViMode', mode_hl(), colors.white, 'bold') end, separator = "", separator_highlight = 'SecondGalaxyViMode' } } i = i + 1 gls.left[i] = { FileIcon = { provider = "FileIcon", separator = " ", separator_highlight = {colors.white, colors.white}, highlight = {colors.creamydark, colors.white} } } i = i + 1 gls.left[i] = { FileName = { provider = function() return file_name(true, 'GalaxyFileName') end, condition = require('galaxyline.condition').buffer_not_empty, highlight = {colors.creamydark, colors.white}, } } i = i + 1 gls.left[i] = { teech = { provider = function() return "" end, separator = "", highlight = {colors.white, colors.main_bg} } } i = i + 1 gls.left[i] = { Space = { provider = white_space, highlight = {colors.bg, colors.main_bg} } } i = i + 1 gls.left[i] = { DiagnosticError = { provider = "DiagnosticError", -- icon = "  ", icon = " " .. icons.diagnostic.error .. " ", highlight = {colors.red, colors.main_bg} } } i = i + 1 gls.left[i] = { Space = { provider = white_space, highlight = {colors.bg, colors.main_bg}, condition = function() return require('galaxyline.provider_diagnostic').get_diagnostic_error() ~= '' end } } i = i + 1 gls.left[i] = { DiagnosticWarn = { provider = "DiagnosticWarn", -- icon = "  ", icon = " " .. icons.diagnostic.warn .. " ", highlight = {colors.yellow, colors.main_bg} } } i = i + 1 gls.left[i] = { Space = { provider = white_space, highlight = {colors.bg, colors.main_bg}, condition = function() return require('galaxyline.provider_diagnostic').get_diagnostic_warn() ~= '' end } } i = i + 1 gls.left[i] = { DiagnosticInfo = { provider = "DiagnosticInfo", -- icon = "  ", icon = " " .. icons.diagnostic.info .. " ", highlight = {colors.blue, colors.main_bg} } } i = i + 1 gls.left[i] = { Space = { provider = white_space, highlight = {colors.bg, colors.main_bg}, condition = function() return require('galaxyline.provider_diagnostic').get_diagnostic_info() ~= '' end } } i = i + 1 gls.left[i] = { Space = { provider = white_space, highlight = {colors.bg, colors.main_bg}, condition = function() return require('galaxyline.provider_diagnostic').get_diagnostic_info() ~= '' end } } i = i + 1 gls.left[i] = { DiagnosticHint = { provider = "DiagnosticHint", icon = "  ", highlight = {colors.blue, colors.main_bg} } } i = i + 1 gls.left[i] = { CocStatus = { provider = function() if CocStatus() ~= nil then return ' ' .. CocStatus() else return '' end end, separator = ' ', separator_highlight = {colors.main_bg, colors.main_bg}, highlight = {colors.blue, colors.main_bg}, } } i = i + 1 gls.left[i] = { CocFunc = { provider = function() if CocFunc() ~= nil and CocFunc() ~= '' then return ' ⨍' .. CocFunc() else return '' end end, highlight = {colors.blue, colors.main_bg}, } } ----------------------------=== Middle ===-------------------------- -- gls.mid[1] = { -- ShowLspClient = { -- provider = 'GetLspClient', -- condition = function () -- local tbl = {['dashboard'] = true,['']=true} -- if tbl[vim.bo.filetype] then -- return false -- end -- return true -- end, -- icon = ' LSP:', -- highlight = {colors.white,colors.bg,'bold'} -- } -- } ----------------------------=== Right ===-------------------------- i = 1 gls.right[i] = { DiffAdd = { provider = "DiffAdd", condition = check_git_width, -- icon = "  ", icon = " " .. icons.diff.added .. " ", highlight = {colors.greenYel, colors.main_bg} } } i = i + 1 gls.right[i] = { DiffModified = { provider = "DiffModified", condition = check_git_width, -- icon = " 柳", icon = " " .. icons.diff.modified .. " ", highlight = {colors.creamyorange, colors.main_bg} } } i = i + 1 gls.right[i] = { DiffRemove = { provider = "DiffRemove", condition = check_git_width, -- icon = "  ", icon = " " .. icons.diff.removed .. " ", highlight = {colors.red, colors.main_bg} } } i = i + 1 gls.right[i] = { right_LeftRounded1 = { separator = " ", separator_highlight = {colors.main_bg, colors.main_bg}, provider = function() return "" end, condition = require("galaxyline.condition").check_git_workspace, highlight = {colors.blue2, colors.main_bg} } } i = i + 1 gls.right[i] = { GitIcon = { provider = function() return icons.git .. ' ' end, condition = check_git_terminal_workspace, highlight = {colors.white, colors.blue2} } } i = i + 1 gls.right[i] = { GitBranch = { provider = "GitBranch", condition = require("galaxyline.condition").check_git_workspace, highlight = {colors.white, colors.blue2}, } } i = i + 1 gls.right[i] = { Space2 = { provider = white_space, condition = require("galaxyline.condition").check_git_workspace, highlight = {colors.blue2, colors.blue2}, } } i = i + 1 gls.right[i] = { right_LeftRounded = { provider = function() return "" end, highlight = function() if require("galaxyline.condition").check_git_workspace() then return {colors.grey, colors.blue2} else return {colors.grey, colors.main_bg} end end } } i = i + 1 gls.right[i] = { LineInfo = { provider = "LineColumn", icon = icons.line_nr .. " ", highlight = {colors.white, colors.grey} } } i = i + 1 gls.right[i] = { PerCent = { provider = "LinePercent", separator = " ", separator_highlight = {colors.white, colors.grey}, highlight = {colors.white, colors.grey} } } i = i + 1 gls.right[i] = { rightRounded = { provider = function() return "" end, highlight = {colors.grey, colors.bg} } } -- -------------------------Short status line--------------------------------------- local k = 1 gls.short_line_left[k] = { SFirstElement = { provider = function() return icons.sep.right end, highlight = { colors.grey, 'NONE' }, }, } k = k + 1 gls.short_line_left[k] ={ SFileIcon = { provider = 'FileIcon', highlight = { colors.icon_inactive, colors.grey }, }, } k = k + 1 gls.short_line_left[k] = { SMyFileName = { provider = function() return file_name(false, 'GalaxySMyFileName') end, highlight = {colors.red, colors.grey}, separator = icons.sep.left, separator_highlight = {colors.grey, colors.main_bg} } }