-
-
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.json
When I enter the src directory, the branch does not display properly:
cd src/
nvim App.tsx
This 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
diff
command, 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
diff
block 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!