-
-
Save hoob3rt/b200435a765ca18f09f83580a606b878 to your computer and use it in GitHub Desktop.
| -- 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) |
The internal diff implementation checks diff for file not buffer . If you have something else that tracks of buffer based diff then you can use that as data source and you'll have buffer diffs . For example I'm using gitsigns like this
.
├── .git
├── .gitignore
├── node_modules
├── package-lock.json
├── package.json
├── src
Normal display of branch:
nvim package.jsonWhen I enter the src directory, the branch does not display properly:
cd src/
nvim App.tsxThis will display the branch properly again:
nvim src/App.tsx@DemoorBug Can you reproduce this with https://github.com/shadmansaleh/lualine.nvim ?
Can you reproduce it in just that folder or in any git folder ?
This file is considered deprecated by me . Switch to
https://github.com/shadmansaleh/lualine.nvim
and grab examples/evil_lualine.lua
That one is maintained see nvim-lualine/lualine.nvim#311 for details. Make proper issue reports in the repo.
I will not respond to issues here anymore .



EDIT: I just realized the diff shows when you save the file, not as and when you type. I checked the issues and ran the diagnostic
diffcommand, and it works fine. My Apologies 😅 Would there be any way to get the diff to update live?Hi! Thank you for putting your config out there. The
diffblock doesn't seem to be working for me - how could I best approach debugging this, and if I need to provide additional information, how could I help?Thank you!