initial lualine setup
This commit is contained in:
parent
2c24d623dc
commit
fa6aa3c324
|
@ -0,0 +1,4 @@
|
|||
globals = {
|
||||
"vim",
|
||||
"vimp",
|
||||
}
|
|
@ -0,0 +1,108 @@
|
|||
local utils = require('lualine.utils')
|
||||
local highlight = require('lualine.highlight')
|
||||
|
||||
local M = { }
|
||||
|
||||
M.theme = 'gruvbox'
|
||||
|
||||
M.separator = '|'
|
||||
|
||||
M.sections = {
|
||||
lualine_a = { 'mode' },
|
||||
lualine_b = { 'branch' },
|
||||
lualine_c = { 'filename' },
|
||||
lualine_x = { 'encoding', 'fileformat', 'filetype' },
|
||||
lualine_y = { 'progress' },
|
||||
lualine_z = { 'location' },
|
||||
lualine_diagnostics = { }
|
||||
}
|
||||
|
||||
M.inactiveSections = {
|
||||
lualine_a = { },
|
||||
lualine_b = { },
|
||||
lualine_c = { 'filename' },
|
||||
lualine_x = { 'location' },
|
||||
lualine_y = { },
|
||||
lualine_z = { }
|
||||
}
|
||||
|
||||
M.extensions = {
|
||||
}
|
||||
|
||||
local function loadComponents()
|
||||
local function loadSections(sections)
|
||||
for _, section in pairs(sections) do
|
||||
for index, component in pairs(section) do
|
||||
if type(component) == 'string' then
|
||||
section[index] = require('lualine.components.' .. component)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
loadSections(M.sections)
|
||||
loadSections(M.inactiveSections)
|
||||
end
|
||||
|
||||
local function loadExtensions()
|
||||
for _, extension in pairs(M.extensions) do
|
||||
if type(extension) == 'string' then
|
||||
require('lualine.components.extensions.' .. extension).loadExtension()
|
||||
end
|
||||
if type(extension) == 'table' then
|
||||
extension.loadExtension()
|
||||
end
|
||||
if type(extension) == 'function' then
|
||||
extension()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function StatusLine(isFocused)
|
||||
local sections = M.sections
|
||||
if not isFocused then
|
||||
sections = M.inactiveSections
|
||||
end
|
||||
if type(M.theme) == 'string' then
|
||||
M.theme = utils.setTheme(M.theme)
|
||||
highlight.createHighlightGroups(M.theme)
|
||||
end
|
||||
local status = ''
|
||||
if sections.lualine_a ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_a')
|
||||
status = status .. utils.drawSection(sections.lualine_a, M.separator)
|
||||
end
|
||||
if sections.lualine_b ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_b')
|
||||
status = status .. utils.drawSection(sections.lualine_b, M.separator)
|
||||
end
|
||||
if sections.lualine_c ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_c')
|
||||
status = status .. utils.drawSection(sections.lualine_c, M.separator)
|
||||
end
|
||||
status = status .. [[%=]]
|
||||
if sections.lualine_x ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_c')
|
||||
status = status .. utils.drawSection(sections.lualine_x, M.separator)
|
||||
end
|
||||
if sections.lualine_y ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_b')
|
||||
status = status .. utils.drawSection(sections.lualine_y, M.separator)
|
||||
end
|
||||
if sections.lualine_z ~= nil then
|
||||
status = status .. highlight.formatHighlight(isFocused, 'lualine_a')
|
||||
status = status .. utils.drawSection(sections.lualine_z, M.separator)
|
||||
end
|
||||
return status
|
||||
end
|
||||
|
||||
function M.status()
|
||||
loadComponents()
|
||||
loadExtensions()
|
||||
_G.statusline = StatusLine
|
||||
vim.cmd([[autocmd WinEnter,BufEnter * setlocal statusline=%!v:lua.statusline(1)]])
|
||||
vim.cmd([[autocmd WinLeave,BufLeave * setlocal statusline=%!v:lua.statusline()]])
|
||||
end
|
||||
|
||||
M.status()
|
||||
|
||||
return M
|
|
@ -0,0 +1,25 @@
|
|||
local function Branch()
|
||||
local branch = vim.fn.systemlist(
|
||||
'cd '..vim.fn.expand('%:p:h:S')..' 2>/dev/null && git status --porcelain -b 2>/dev/null')[1]
|
||||
if not branch or #branch == 0 then
|
||||
return ''
|
||||
end
|
||||
branch = branch:gsub([[^## No commits yet on (%w+)$]], '%1')
|
||||
branch = branch:gsub([[^##%s+(%w+).*$]], '%1')
|
||||
local ok,devicons = pcall(require,'nvim-web-devicons')
|
||||
if ok then
|
||||
local icon = devicons.get_icon('git')
|
||||
if icon ~= nil then
|
||||
return icon .. ' ' .. branch
|
||||
end
|
||||
return branch
|
||||
end
|
||||
ok = (vim.fn.exists('*WebDevIconsGetFileTypeSymbol'))
|
||||
if ok then
|
||||
local icon = ''
|
||||
return icon .. ' ' .. branch
|
||||
end
|
||||
return branch
|
||||
end
|
||||
|
||||
return Branch
|
|
@ -0,0 +1,6 @@
|
|||
local function Encoding()
|
||||
local encoding = [[%{strlen(&fenc)?&fenc:&enc}]]
|
||||
return encoding
|
||||
end
|
||||
|
||||
return Encoding
|
|
@ -0,0 +1,17 @@
|
|||
local function fzfStatusline()
|
||||
vim.cmd([[hi clear fzf1]])
|
||||
vim.cmd([[hi link fzf1 lualine_a_normal]])
|
||||
vim.cmd([[hi clear fzf2]])
|
||||
vim.cmd([[hi link fzf2 lualine_c_normal]])
|
||||
return ([[%#fzf1# FZF %#fzf2#]])
|
||||
|
||||
end
|
||||
|
||||
local function loadExtension()
|
||||
_G.fzfStatusline = fzfStatusline
|
||||
vim.cmd(([[autocmd! User FzfStatusLine setlocal statusline=%!v:lua.fzfStatusline()]]))
|
||||
end
|
||||
|
||||
return {
|
||||
loadExtension = loadExtension
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
local function FileFormat()
|
||||
local fileformat = [[%{&ff}]]
|
||||
return fileformat
|
||||
end
|
||||
|
||||
return FileFormat
|
|
@ -0,0 +1,5 @@
|
|||
local function FileName()
|
||||
return [[%t %m]]
|
||||
end
|
||||
|
||||
return FileName
|
|
@ -0,0 +1,23 @@
|
|||
local function Filetype()
|
||||
local filetype = vim.bo.filetype
|
||||
if filetype:len() > 0 then
|
||||
local ok,devicons = pcall(require,'nvim-web-devicons')
|
||||
if ok then
|
||||
local f_name,f_extension = vim.fn.expand('%:t'),vim.fn.expand('%:e')
|
||||
local icon = devicons.get_icon(f_name,f_extension)
|
||||
if icon ~= nil then
|
||||
return icon .. ' ' .. filetype
|
||||
end
|
||||
return filetype
|
||||
end
|
||||
ok = (vim.fn.exists('*WebDevIconsGetFileTypeSymbol'))
|
||||
if ok then
|
||||
local icon = vim.call('WebDevIconsGetFileTypeSymbol')
|
||||
return icon .. ' ' .. filetype
|
||||
end
|
||||
return filetype
|
||||
end
|
||||
return ''
|
||||
end
|
||||
|
||||
return Filetype
|
|
@ -0,0 +1,5 @@
|
|||
local function Location()
|
||||
return[[%3l:%-2c]]
|
||||
end
|
||||
|
||||
return Location
|
|
@ -0,0 +1,18 @@
|
|||
local function Mode()
|
||||
local mode_map = {
|
||||
['__'] = '------',
|
||||
['n'] = 'NORMAL',
|
||||
['i'] = 'INSERT',
|
||||
['v'] = 'VISUAL',
|
||||
['V'] = 'V-LINE',
|
||||
[''] = 'V-BLOCK',
|
||||
['R'] = 'REPLACE',
|
||||
['r'] = 'REPLACE',
|
||||
['Rv'] = 'V-REPLACE',
|
||||
['c'] = 'COMMAND',
|
||||
['t'] = 'TERMINAL',
|
||||
}
|
||||
return mode_map[vim.fn.mode()]
|
||||
end
|
||||
|
||||
return Mode
|
|
@ -0,0 +1,5 @@
|
|||
local function Progress()
|
||||
return [[%3P]]
|
||||
end
|
||||
|
||||
return Progress
|
|
@ -0,0 +1,47 @@
|
|||
local M = { }
|
||||
|
||||
local function highlight (name, foreground, background, special)
|
||||
if special == nil then
|
||||
special = 'none'
|
||||
end
|
||||
local command = 'highlight '
|
||||
command = command .. name .. ' '
|
||||
command = command .. 'guifg=' .. foreground .. ' '
|
||||
command = command .. 'guibg=' .. background .. ' '
|
||||
if special then
|
||||
command = command .. 'gui=' .. special .. ' '
|
||||
end
|
||||
return command
|
||||
end
|
||||
|
||||
function M.createHighlightGroups(theme)
|
||||
for mode, sections in pairs(theme) do
|
||||
for section, colorscheme in pairs(sections) do
|
||||
if section == 'a' then
|
||||
vim.cmd(highlight('lualine_' .. section .. '_' .. mode, colorscheme.fg, colorscheme.bg ,'bold'))
|
||||
else
|
||||
vim.cmd(highlight('lualine_' .. section .. '_' .. mode, colorscheme.fg, colorscheme.bg ))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.formatHighlight(isFocused, highlighGroup)
|
||||
local mode = require('lualine.components.mode')()
|
||||
highlighGroup = [[%#]] .. highlighGroup
|
||||
if not isFocused then
|
||||
highlighGroup = highlighGroup .. [[_inactive]]
|
||||
else
|
||||
if mode == 'V-BLOCK' or mode == 'V-LINE' then
|
||||
highlighGroup = highlighGroup .. '_visual'
|
||||
elseif mode == 'V-REPLACE' then
|
||||
highlighGroup = highlighGroup .. '_replace'
|
||||
else
|
||||
highlighGroup = highlighGroup .. '_' .. mode:lower()
|
||||
end
|
||||
end
|
||||
highlighGroup = highlighGroup .. [[#]]
|
||||
return highlighGroup
|
||||
end
|
||||
|
||||
return M
|
|
@ -0,0 +1,111 @@
|
|||
local M = { }
|
||||
|
||||
local Colors = {
|
||||
black = "#282828",
|
||||
white = '#ebdbb2',
|
||||
red = '#fb4934',
|
||||
green = '#b8bb26',
|
||||
blue = '#83a598',
|
||||
yellow = '#fe8019',
|
||||
|
||||
gray = '#a89984',
|
||||
darkgray = '#3c3836',
|
||||
|
||||
lightgray = '#504945',
|
||||
inactivegray = '#7c6f64',
|
||||
}
|
||||
|
||||
M.normal = {
|
||||
a = {
|
||||
bg = Colors.gray,
|
||||
fg = Colors.black,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.darkgray,
|
||||
fg = Colors.gray
|
||||
}
|
||||
}
|
||||
|
||||
M.insert = {
|
||||
a = {
|
||||
bg = Colors.blue,
|
||||
fg = Colors.black,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
M.visual = {
|
||||
a = {
|
||||
bg = Colors.yellow,
|
||||
fg = Colors.black,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.inactivegray,
|
||||
fg = Colors.black
|
||||
},
|
||||
}
|
||||
|
||||
M.replace = {
|
||||
a = {
|
||||
bg = Colors.red,
|
||||
fg = Colors.black,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.black,
|
||||
fg = Colors.white
|
||||
},
|
||||
}
|
||||
|
||||
M.command = {
|
||||
a = {
|
||||
bg = Colors.green,
|
||||
fg = Colors.black,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.lightgray,
|
||||
fg = Colors.white,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.inactivegray,
|
||||
fg = Colors.black
|
||||
},
|
||||
}
|
||||
|
||||
M.terminal = M.normal
|
||||
|
||||
M.inactive = {
|
||||
a = {
|
||||
bg = Colors.darkgray,
|
||||
fg = Colors.gray,
|
||||
},
|
||||
b = {
|
||||
bg = Colors.darkgray,
|
||||
fg = Colors.gray,
|
||||
},
|
||||
c = {
|
||||
bg = Colors.darkgray,
|
||||
fg = Colors.gray
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
|
@ -0,0 +1,33 @@
|
|||
local M = { }
|
||||
|
||||
function M.setTheme(theme)
|
||||
return require('lualine.themes.'..theme)
|
||||
end
|
||||
|
||||
function M.drawSection(section, separator)
|
||||
local status = ''
|
||||
for index, statusFunction in pairs(section) do
|
||||
local localstatus = statusFunction()
|
||||
if localstatus:len() > 0 then
|
||||
if separator:len() > 0 then
|
||||
if index > 1 then
|
||||
status = status .. separator .. ' '
|
||||
end
|
||||
status = status .. localstatus
|
||||
status = status .. ' '
|
||||
else
|
||||
status = status .. localstatus
|
||||
status = status .. ' '
|
||||
end
|
||||
end
|
||||
end
|
||||
if status:len() > 0 then
|
||||
if separator:len() > 0 and table.maxn(section) > 1 then
|
||||
return ' ' .. status .. ' '
|
||||
end
|
||||
return ' ' .. status
|
||||
end
|
||||
return ''
|
||||
end
|
||||
|
||||
return M
|
Loading…
Reference in New Issue