1
0
Fork 0
nvim-configs/lua/galaxyline/themes/minimalist.lua

322 lines
7.4 KiB
Lua

local gl = require 'galaxyline'
local utils = require 'conf.utils'
local condition = require 'galaxyline.condition'
local vcs = require 'galaxyline.providers.vcs'
local fileinfo = require 'galaxyline.providers.fileinfo'
local gls = gl.section
gl.short_line_list = {
'packer',
'NvimTree',
'Outline',
'Trouble',
'dap-repl',
'dapui_scopes',
'dapui_breakpoints',
'dapui_stacks',
'dapui_watches',
}
local colors = {
bg = '#282c34',
fg = '#abb2bf',
section_bg = '#38393f',
blue = '#61afef',
green = '#98c379',
purple = '#c678dd',
orange = '#e5c07b',
red = '#e06c75',
yellow = '#e5c07b',
darkgrey = '#2c323d',
middlegrey = '#8791A5',
}
local mode_colors = {
['n'] = colors.green,
['i'] = colors.blue,
['c'] = colors.green,
['t'] = colors.blue,
['v'] = colors.purple,
['\x16'] = colors.purple,
['V'] = colors.purple,
['R'] = colors.red,
['s'] = colors.red,
['S'] = colors.red,
['ic'] = colors.blue,
}
local mode_names = {
['n'] = 'NORMAL',
['i'] = 'INSERT',
['c'] = 'COMMAND',
['t'] = 'TERMINAL',
['v'] = 'VISUAL',
['\x16'] = 'V-BLOCK',
['V'] = 'V-LINE',
['R'] = 'REPLACE',
['s'] = 'SELECT',
['S'] = 'S-LINE',
['ic'] = 'COMPLETION',
}
-- Local helper functions
local buffer_not_empty = function()
return not utils.is_buffer_empty()
end
local checkwidth = function()
return utils.has_width_gt(35) and buffer_not_empty()
end
local is_file = function()
return vim.bo.buftype ~= 'nofile'
end
local function has_value(tab, val)
for _, value in ipairs(tab) do
if value[1] == val then
return true
end
end
return false
end
local get_mode = function()
return vim.api.nvim_get_mode()['mode']
end
local mode_color = function(mode)
local color = mode_colors[mode]
if color ~= nil then
return color
end
print 'statusline: error looking up vi mode color'
return colors.middlegrey
end
local vi_mode = function()
local mode = get_mode()
local color = mode_color(mode)
vim.cmd('hi GalaxyViMode guibg=' .. color)
local alias = mode_names[mode]
if alias ~= nil then
if not utils.has_width_gt(35) then
alias = alias:sub(1, 1)
end
else
alias = mode
end
return ' ' .. alias .. ' '
end
local function file_readonly()
if vim.bo.filetype == 'help' then
return false
end
if vim.bo.readonly then
return true
end
return false
end
local function file_name()
local file = vim.fn.expand '%:t'
if not file then
return ''
end
if file_readonly() then
return file .. ''
end
if vim.bo.modifiable and vim.bo.modified then
return file .. ''
end
return file .. ' '
end
local function split(str, sep)
local res = {}
local n = 1
for w in str:gmatch('([^' .. sep .. ']*)') do
res[n] = res[n] or w -- only set once (so the blank after a string is ignored)
if w == '' then
n = n + 1
end -- step forwards on a blank but not a string
end
return res
end
local function file_path()
local fp = vim.fn.fnamemodify(vim.fn.expand '%', ':~:.:h')
local tbl = split(fp, '/')
local len = #tbl
if len > 2 and not len == 3 and not tbl[0] == '~' then
return '…/' .. table.concat(tbl, '/', len - 1) .. '/' -- shorten filepath to last 2 folders
-- alternative: only 1 containing folder using vim builtin function
-- return '…/' .. vim.fn.fnamemodify(vim.fn.expand '%', ':p:h:t') .. '/'
else
return fp .. '/'
end
end
local function get_basename(file)
return file:match '^.+/(.+)$'
end
local git_root = function()
local git_dir = vcs.get_git_dir()
if not git_dir then
return ''
end
local git_root = git_dir:gsub('/.git/?$', '')
return get_basename(git_root)
end
-- Left side
gls.left[1] = {
ViMode = {
provider = { vi_mode },
highlight = { colors.bg, colors.bg, 'bold' },
},
}
gls.left[2] = {
FileIcon = {
provider = {
function()
return ' '
end,
'FileIcon',
},
condition = buffer_not_empty,
highlight = {
fileinfo.get_file_icon,
colors.section_bg,
},
},
}
gls.left[3] = {
FilePath = {
provider = file_path,
condition = function()
return is_file() and checkwidth()
end,
highlight = { colors.middlegrey, colors.section_bg },
},
}
gls.left[4] = {
FileName = {
provider = file_name,
condition = buffer_not_empty,
highlight = { colors.fg, colors.section_bg },
separator = '',
separator_highlight = { colors.section_bg, colors.bg },
},
}
-- Right side
gls.right[1] = {
DiffAdd = {
provider = 'DiffAdd',
condition = checkwidth,
icon = '+',
highlight = { colors.green, colors.bg },
separator = ' ',
separator_highlight = { colors.section_bg, colors.bg },
},
}
gls.right[2] = {
DiffModified = {
provider = 'DiffModified',
condition = checkwidth,
icon = '~',
highlight = { colors.orange, colors.bg },
},
}
gls.right[3] = {
DiffRemove = {
provider = 'DiffRemove',
condition = checkwidth,
icon = '-',
highlight = { colors.red, colors.bg },
},
}
gls.right[4] = {
Space = {
provider = function()
return ' '
end,
highlight = { colors.section_bg, colors.bg },
},
}
gls.right[6] = {
GitBranch = {
provider = {
function()
return ''
end,
'GitBranch',
},
condition = condition.check_git_workspace,
highlight = { colors.middlegrey, colors.bg },
},
}
gls.right[7] = {
GitRoot = {
provider = git_root,
condition = function()
return utils.has_width_gt(50) and condition.check_git_workspace
end,
highlight = { colors.fg, colors.bg },
separator = ' ',
separator_highlight = { colors.middlegrey, colors.bg },
},
}
gls.right[8] = {
PerCent = {
provider = 'LinePercent',
separator = '',
separator_highlight = { colors.blue, colors.bg },
highlight = { colors.darkgrey, colors.blue },
},
}
-- Short status line
gls.short_line_left[1] = {
FileIcon = {
provider = {
function()
return ' '
end,
'FileIcon',
},
condition = function()
return buffer_not_empty
and has_value(gl.short_line_list, vim.bo.filetype)
end,
highlight = {
fileinfo.get_file_icon,
colors.section_bg,
},
},
}
gls.short_line_left[2] = {
FileName = {
provider = file_name,
condition = buffer_not_empty,
highlight = { colors.fg, colors.section_bg },
separator = '',
separator_highlight = { colors.section_bg, colors.bg },
},
}
gls.short_line_right[1] = {
BufferIcon = {
provider = 'BufferIcon',
highlight = { colors.yellow, colors.section_bg },
separator = '',
separator_highlight = { colors.section_bg, colors.bg },
},
}
-- Force manual load so that nvim boots with a status line
gl.load_galaxyline()