From c1f449ed3dc8f16fa36a1ab4f655c8aea66571a3 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Sat, 25 Sep 2021 21:06:36 +0200 Subject: [PATCH] Feat: use lualine evil lualine config --- nvim/.config/nvim/lua/config/lualine.lua | 219 +++++++++++++++++++++++ nvim/.config/nvim/lua/lualine_.lua | 31 ---- nvim/.config/nvim/lua/plugins.lua | 34 +--- 3 files changed, 220 insertions(+), 64 deletions(-) create mode 100644 nvim/.config/nvim/lua/config/lualine.lua delete mode 100644 nvim/.config/nvim/lua/lualine_.lua diff --git a/nvim/.config/nvim/lua/config/lualine.lua b/nvim/.config/nvim/lua/config/lualine.lua new file mode 100644 index 0000000..7154c3a --- /dev/null +++ b/nvim/.config/nvim/lua/config/lualine.lua @@ -0,0 +1,219 @@ +-- Eviline config for lualine +-- Author: shadmansaleh +-- Credit: glepnir +local lualine = require 'lualine' + +-- Color table for highlights +local colors = { + bg = '#202328', + fg = '#bbc2cf', + yellow = '#ECBE7B', + cyan = '#008080', + darkblue = '#081633', + green = '#98be65', + orange = '#FF8800', + violet = '#a9a1e1', + magenta = '#c678dd', + blue = '#51afef', + red = '#ec5f67' +} + +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) > 80 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 +} + +-- Config +local config = { + options = { + -- Disable sections and component separators + component_separators = "", + section_separators = "", + theme = { + -- We are going to use lualine_c an lualine_x as left and + -- right section. Both are highlighted by c theme . So we + -- are just setting default looks o statusline + normal = {c = {fg = colors.fg, bg = colors.bg}}, + inactive = {c = {fg = colors.fg, bg = colors.bg}} + } + }, + sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + -- These will be filled later + lualine_c = {}, + lualine_x = {} + }, + inactive_sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_v = {}, + lualine_y = {}, + lualine_z = {}, + lualine_c = {}, + lualine_x = {} + } +} + +-- Inserts a component in lualine_c at left section +local function ins_left(component) + table.insert(config.sections.lualine_c, component) +end + +-- Inserts a component in lualine_x ot right section +local function ins_right(component) + table.insert(config.sections.lualine_x, component) +end + +ins_left { + function() return '▊' end, + color = {fg = colors.blue}, -- Sets highlighting of component + left_padding = 0 -- We don't need space before this +} + +ins_left { + -- mode component + function() + -- auto change color according to neovims mode + local mode_color = { + n = colors.red, + i = colors.green, + v = colors.blue, + [''] = colors.blue, + V = colors.blue, + c = colors.magenta, + no = colors.red, + s = colors.orange, + S = colors.orange, + [''] = colors.orange, + ic = colors.yellow, + R = colors.violet, + Rv = colors.violet, + cv = colors.red, + ce = colors.red, + r = colors.cyan, + rm = colors.cyan, + ['r?'] = colors.cyan, + ['!'] = colors.red, + t = colors.red + } + vim.api.nvim_command( + 'hi! LualineMode guifg=' .. mode_color[vim.fn.mode()] .. " guibg=" .. + colors.bg) + return '' + end, + color = "LualineMode", + left_padding = 0 +} + +ins_left { + -- filesize component + function() + local function format_file_size(file) + local size = vim.fn.getfsize(file) + if size <= 0 then return '' end + local sufixes = {'b', 'k', 'm', 'g'} + local i = 1 + while size > 1024 do + size = size / 1024 + i = i + 1 + end + return string.format('%.1f%s', size, sufixes[i]) + end + local file = vim.fn.expand('%:p') + if string.len(file) == 0 then return '' end + return format_file_size(file) + end, + condition = conditions.buffer_not_empty +} + +ins_left { + 'filename', + condition = conditions.buffer_not_empty, + color = {fg = colors.magenta, gui = 'bold'} +} + +ins_left {'location'} + +ins_left {'progress', color = {fg = colors.fg, gui = 'bold'}} + +ins_left { + 'diagnostics', + sources = {'nvim_lsp'}, + symbols = {error = ' ', warn = ' ', info = ' '}, + color_error = colors.red, + color_warn = colors.yellow, + color_info = colors.cyan +} + +-- Insert mid section. You can make any number of sections in neovim :) +-- for lualine it's any number greater then 2 +ins_left {function() return '%=' end} + +ins_left { + -- Lsp server name . + function() + local msg = 'No Active Lsp' + local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype') + local clients = vim.lsp.get_active_clients() + if next(clients) == nil then return msg end + for _, client in ipairs(clients) do + local filetypes = client.config.filetypes + if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then + return client.name + end + end + return msg + end, + icon = ' LSP:', + color = {fg = '#ffffff', gui = 'bold'} +} + +-- Add components to right sections +ins_right { + 'o:encoding', -- option component same as &encoding in viml + upper = true, -- I'm not sure why it's upper case either ;) + condition = conditions.hide_in_width, + color = {fg = colors.green, gui = 'bold'} +} + +ins_right { + 'fileformat', + upper = true, + icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh + color = {fg = colors.green, gui = 'bold'} +} + +ins_right { + 'branch', + icon = '', + condition = conditions.check_git_workspace, + color = {fg = colors.violet, gui = 'bold'} +} + +ins_right { + 'diff', + -- Is it me or the symbol for modified us really weird + symbols = {added = ' ', modified = '柳 ', removed = ' '}, + color_added = colors.green, + color_modified = colors.orange, + color_removed = colors.red, + condition = conditions.hide_in_width +} + +ins_right { + function() return '▊' end, + color = {fg = colors.blue}, + right_padding = 0 +} + +-- Now don't forget to initialize lualine +lualine.setup(config) \ No newline at end of file diff --git a/nvim/.config/nvim/lua/lualine_.lua b/nvim/.config/nvim/lua/lualine_.lua deleted file mode 100644 index d8f6de9..0000000 --- a/nvim/.config/nvim/lua/lualine_.lua +++ /dev/null @@ -1,31 +0,0 @@ -require('lualine').setup{ - options = { - icons_enabled = true, - theme = 'gruvbox', - component_separators = {'', ''}, - section_separators = {'', ''}, - disabled_filetypes = {} - }, - sections = { - lualine_a = {'mode'}, - lualine_b = {'branch'}, - lualine_c = {'filename'}, - lualine_x = { - { 'diagnostics', sources = {"nvim_lsp"}, symbols = {error = ' ', warn = ' ', info = ' ', hint = ' '} }, - 'encoding', - '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 = {} -} diff --git a/nvim/.config/nvim/lua/plugins.lua b/nvim/.config/nvim/lua/plugins.lua index 18d28c8..5dd7098 100644 --- a/nvim/.config/nvim/lua/plugins.lua +++ b/nvim/.config/nvim/lua/plugins.lua @@ -7,39 +7,7 @@ return require('packer').startup(function() -- Status line use { 'hoob3rt/lualine.nvim', - config = function () - require('lualine').setup{ - options = { - icons_enabled = true, - theme = 'gruvbox', - component_separators = {'', ''}, - section_separators = {'', ''}, - disabled_filetypes = {} - }, - sections = { - lualine_a = {'mode'}, - lualine_b = {'branch'}, - lualine_c = {'filename'}, - lualine_x = { - { 'diagnostics', sources = {"nvim_lsp"}, symbols = {error = ' ', warn = ' ', info = ' ', hint = ' '} }, - 'encoding', - '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 = {} - } - end + config = [[require('config.lualine')]], } use 'tpope/vim-fugitive'