From e1ae8a414f4561bd23c337ed509b8acfc05c147d Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Sat, 26 Mar 2022 17:17:28 +0000 Subject: [PATCH] feat: theme the statusline --- neovim/lua/statusline.lua | 62 +++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/neovim/lua/statusline.lua b/neovim/lua/statusline.lua index 20be131..a1e7482 100644 --- a/neovim/lua/statusline.lua +++ b/neovim/lua/statusline.lua @@ -33,36 +33,72 @@ function _G.format_mode(mode) output = mode end - return output + return string.upper(output) +end + +local function setHighlight(str) + return string.format("%%#%s#", str) end function M.output() - local separator = "☰ " - local mode = "%{%v:lua.format_mode(v:lua.vim.fn.mode())%} " - local open_file = separator .. "%r%t %m" - local buf_nr = "[%n]" + local palette = { + cyan = "#7dcfff", + blue = "#7aa2f7", + magenta = "#bb9af7", + black = "#414868", + bg = "#15161e", + none = "NONE", + } + + local statuslineMode = "StatuslineMode" + local statuslineTransparent = "StatuslineTransparent" + local statuslineBlueText = "StatuslineBlueText" + local statuslineMagentaText = "StatuslineMagentaText" + + local theme = { + [statuslineMode] = {fg = palette["black"], bg = palette["cyan"], bold = true}, + [statuslineTransparent] = {bg = palette["none"]}, + [statuslineBlueText] = {bg = palette["bg"], fg = palette["blue"], bold = true}, + [statuslineMagentaText] = {bg = palette["bg"], fg = palette["magenta"], bold = true}, + } + + local ns = vim.api.nvim_create_namespace("statusline") + vim.api.nvim__set_hl_ns(ns) + + for name, settings in pairs(theme) do + vim.api.nvim_set_hl(ns, name, settings) + end + + local separator = " ☰ " + local mode = " %{%v:lua.format_mode(v:lua.vim.fn.mode())%} " + local open_file = "%r%t %m" + local buf_nr = "[%n] " local right_align = "%=" local file_format = "%{&ff}" - local file_type = "%y " - local encoding = "%{''.(&fenc!=''?&fenc:&enc).''} " - local line_no = "line: %03l/%03L " - local percentage = "[%3p%%]" + local file_type = "%y " + local encoding = "%{''.(&fenc!=''?&fenc:&enc).''} " + local line_no = "line: %03l/%03L " + local percentage = "[%3p%%]" - return string.format( - "%s%s%s%s%s%s%s%s%s%s%s%s", - separator, + return table.concat{ + setHighlight(statuslineMode), mode, + setHighlight(statuslineBlueText), + separator, open_file, buf_nr, + setHighlight(statuslineTransparent), right_align, + setHighlight(statuslineBlueText), separator, file_format, file_type, encoding, + setHighlight(statuslineMagentaText), separator, line_no, percentage - ) + } end return M