Skip to content

Instantly share code, notes, and snippets.

@hoob3rt
Created May 14, 2021 12:19
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hoob3rt/b200435a765ca18f09f83580a606b878 to your computer and use it in GitHub Desktop.
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)
@macintacos
Copy link

macintacos commented Jun 8, 2021

Any good way to get icons next to the filetype (preferably before the name of the file itself)?

EDIT: Figured it our from the README :)

ins_left {'filetype', colored = true}

@finviman
Copy link

finviman commented Jul 6, 2021

please how to use this file? i put this file in lua/statusline/, and require it in init.lua, but no statusline shows. and default lualine is disappeard too.

@lalitmee
Copy link

please how to use this file? i put this file in lua/statusline/, and require it in init.lua, but no statusline shows. and default lualine is disappeard too.

There may be some other problem if your normal status line is also disappearing. I tried this config too and it worked. Try to debug what is wrong with your status line config

@enricofadly
Copy link

im not familiar with lua, but how if I wanna change the evil icon to normal mode? (like normal/insert/command letter not evil icon)

@fgheng
Copy link

fgheng commented Jul 24, 2021

How can I get LSP info from coc?

@shadmansaleh
Copy link

@FinallyFinancialFreedom you need to require it from you're init.lua . Though running it anyway will be fine . like with :source or :luafile . There was a bug in lualine that was causing statusline to disapear . It was fixed in shadmansaleh/lualine.nvim . You can try with that.

@shadmansaleh
Copy link

shadmansaleh commented Aug 13, 2021

im not familiar with lua, but how if I wanna change the evil icon to normal mode? (like normal/insert/command letter not evil icon)

@enricofadly you can use the mode component if you want to see things like normal/insert .

@shadmansaleh
Copy link

shadmansaleh commented Aug 13, 2021

How can I get LSP info from coc?

@fgheng you'll have to add 'coc' to list of sources in line 150

@anirudhRowjee
Copy link

anirudhRowjee commented Aug 20, 2021

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!

@shadmansaleh
Copy link

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

@DemoorBug
Copy link

DemoorBug commented Sep 16, 2021

.
β”œβ”€β”€ .git
β”œβ”€β”€ .gitignore
β”œβ”€β”€ node_modules
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
β”œβ”€β”€ src
Normal display of branch:

nvim package.json

show branch

When I enter the src directory, the branch does not display properly:

cd src/
nvim App.tsx

Do not show branch
no branch

This will display the branch properly again:

nvim src/App.tsx

show-branch

@shadmansaleh
Copy link

@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 ?

@shadmansaleh
Copy link

shadmansaleh commented Sep 16, 2021

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 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment