Files
yadm/.config/nvim/lua/plugins/line.lua
2025-01-10 11:10:51 +01:00

559 lines
18 KiB
Lua

-- -- progress data
-- local clients = {}
-- local progress = { '⠋', '⠙', '⠸', '⢰', '⣠', '⣄', '⡆', '⠇' }
--
-- -- check for lsp progress data
-- local function is_lsp_loading(client) return client and clients[client] and clients[client].percentage < 100 end
--
-- -- update lsp progress
-- local function update_lsp_progress()
-- local messages = vim.lsp.util.get_progress_messages()
-- for _, message in ipairs(messages) do
-- if not message.name then goto continue end
--
-- local client_name = message.name
--
-- if not clients[client_name] then clients[client_name] = { percentage = 0, progress_index = 0 } end
--
-- if message.done then
-- clients[client_name].percentage = 100
-- else
-- if message.percentage then clients[client_name].percentage = message.percentage end
-- end
--
-- if clients[client_name].percentage % 5 == 0 or clients[client_name].progress_index == 0 then
-- vim.opt.statusline = vim.opt.statusline
-- clients[client_name].progress_index = clients[client_name].progress_index + 1
-- end
--
-- if clients[client_name].progress_index > #progress then clients[client_name].progress_index = 1 end
--
-- ::continue::
-- end
-- end
--
-- -- get lsp client name for buffer
-- local function get_lsp_client_name()
-- local active_clients = vim.lsp.get_clients({ bufnr = 0 })
-- local client_name
--
-- if #active_clients > 0 then client_name = active_clients[1].name end
-- return client_name
-- end
--
-- -- configure feline
-- local function config(_, opts)
-- --local colorscheme = vim.g.colors_name
-- local colorscheme = 'nightfox'
-- local palette = require('nightfox.palette').load(colorscheme)
-- local feline = require('feline')
-- local vi_mode = require('feline.providers.vi_mode')
-- local file = require('feline.providers.file')
-- local separators = require('feline.defaults').statusline.separators.default_value
-- local lsp = require('feline.providers.lsp')
--
-- local theme = {
-- fg = palette.fg1,
-- bg = palette.bg1,
-- black = palette.black.base,
-- skyblue = palette.blue.bright,
-- cyan = palette.cyan.base,
-- green = palette.green.base,
-- oceanblue = palette.blue.base,
-- magenta = palette.magenta.base,
-- orange = palette.orange.base,
-- red = palette.red.base,
-- violet = palette.magenta.bright,
-- white = palette.white.base,
-- yellow = palette.yellow.base,
-- }
--
-- local c = {
--
-- -- local function git_diff(type)
-- -- ---@diagnostic disable-next-line: undefined-field
-- -- local gsd = vim.b.gitsigns_status_dict
-- -- if gsd and gsd[type] and gsd[type] > 0 then return tostring(gsd[type]) end
-- -- return nil
-- -- end
--
-- -- left
-- vim_status = {
-- provider = function()
-- local s
-- if require('lazy.status').has_updates() then
-- s = require('lazy.status').updates()
-- else
-- s = ''
-- end
-- s = string.format(' %s ', s)
-- return s
-- end,
-- hl = { fg = palette.bg0, bg = palette.blue.base },
-- right_sep = {
-- always_visible = true,
-- str = separators.slant_right,
-- hl = { fg = palette.blue.base, bg = palette.bg0 },
-- },
-- },
--
-- file_name = {
-- provider = {
-- name = 'file_info',
-- opts = { colored_icon = false },
-- },
-- hl = { fg = palette.bg0, bg = palette.white.base },
-- left_sep = {
-- always_visible = true,
-- str = string.format('%s ', separators.slant_right),
-- hl = { fg = palette.bg0, bg = palette.white.base },
-- },
-- },
--
-- git_branch = {
-- provider = function()
-- local git = require('feline.providers.git')
-- local branch, icon = git.git_branch()
-- local s
-- if #branch > 0 then
-- s = string.format(' %s%s ', icon, branch)
-- else
-- s = string.format(' %s ', 'Untracked')
-- end
-- return s
-- end,
-- hl = { fg = palette.bg0, bg = palette.fg3 },
-- left_sep = {
-- always_visible = true,
-- str = string.format('%s%s', separators.block, separators.slant_right),
-- hl = { fg = palette.white.base, bg = palette.fg3 },
-- },
-- right_sep = {
-- always_visible = true,
-- str = separators.slant_right,
-- hl = { fg = palette.fg3, bg = palette.bg0 },
-- },
-- },
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local status = git_diff('added')
-- -- local s
-- -- if status then
-- -- s = string.format(' %s %s ', '', status)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.green.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.bg0, bg = palette.green.base },
-- -- },
-- -- })
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local status = git_diff('changed')
-- -- local s
-- -- if status then
-- -- s = string.format(' %s %s ', '', status)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.yellow.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.green.base, bg = palette.yellow.base },
-- -- },
-- -- })
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local status = git_diff('removed')
-- -- local s
-- -- if status then
-- -- s = string.format(' %s %s ', '', status)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.red.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.yellow.base, bg = palette.red.base },
-- -- },
-- -- right_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.red.base, bg = palette.bg0 },
-- -- },
-- -- })
--
-- lsp = {
-- provider = function()
-- if not lsp.is_lsp_attached() then return ' 󱏎 LSP ' end
--
-- local client_name = get_lsp_client_name()
-- if is_lsp_loading(client_name) then
-- return string.format(' %s LSP ', progress[clients[client_name].progress_index])
-- else
-- return ' 󱁛 LSP '
-- end
-- end,
-- hl = function()
-- if not lsp.is_lsp_attached() then return { fg = palette.bg0, bg = palette.fg3 } end
--
-- local client_name = get_lsp_client_name()
-- if is_lsp_loading(client_name) then return { fg = palette.bg0, bg = palette.yellow.base } end
--
-- return { fg = palette.bg0, bg = palette.green.base }
-- end,
-- left_sep = {
-- always_visible = true,
-- str = separators.slant_right,
-- hl = function()
-- if not lsp.is_lsp_attached() then return { fg = palette.bg0, bg = palette.fg3 } end
--
-- local client_name = get_lsp_client_name()
-- if is_lsp_loading(client_name) then return { fg = palette.bg0, bg = palette.yellow.base } end
--
-- return { fg = palette.bg0, bg = palette.green.base }
-- end,
-- },
-- right_sep = {
-- always_visible = true,
-- str = separators.slant_right,
-- hl = function()
-- if not lsp.is_lsp_attached() then return { fg = palette.fg3, bg = 'none' } end
--
-- local client_name = get_lsp_client_name()
-- if is_lsp_loading(client_name) then return { fg = palette.yellow.base, bg = 'none' } end
--
-- return { fg = palette.green.base, bg = 'none' }
-- end,
-- },
-- },
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local s
-- -- local count = vim.tbl_count(vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR }))
-- -- if count > 0 then
-- -- s = string.format(' %s %d ', '', count)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.red.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.bg0, bg = palette.red.base },
-- -- },
-- -- })
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local s
-- -- local count = vim.tbl_count(vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN }))
-- -- if count > 0 then
-- -- s = string.format(' %s %d ', '', count)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.magenta.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.red.base, bg = palette.magenta.base },
-- -- },
-- -- })
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local s
-- -- local count = vim.tbl_count(vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO }))
-- -- if count > 0 then
-- -- s = string.format(' %s %d ', '', count)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.blue.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.magenta.base, bg = palette.blue.base },
-- -- },
-- -- })
--
-- -- table.insert(components.active[left], {
-- -- provider = function()
-- -- local s
-- -- local count = vim.tbl_count(vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT }))
-- -- if count > 0 then
-- -- s = string.format(' %s %d ', '', count)
-- -- else
-- -- s = ''
-- -- end
-- -- return s
-- -- end,
-- -- hl = { fg = palette.bg0, bg = palette.orange.base },
-- -- left_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.blue.base, bg = palette.orange.base },
-- -- },
-- -- right_sep = {
-- -- always_visible = true,
-- -- str = separators.slant_right,
-- -- hl = { fg = palette.orange.base, bg = 'none' },
-- -- },
-- -- })
--
-- -- right
-- vi_mode = {
-- provider = function() return string.format(' %s ', vi_mode.get_vim_mode()) end,
-- hl = function() return { fg = palette.bg0, bg = vi_mode.get_mode_color() } end,
-- left_sep = {
-- always_visible = true,
-- str = separators.slant_left,
-- hl = function() return { fg = vi_mode.get_mode_color(), bg = 'none' } end,
-- },
-- right_sep = {
-- always_visible = true,
-- str = separators.slant_left,
-- hl = function() return { fg = palette.bg0, bg = vi_mode.get_mode_color() } end,
-- },
-- },
--
-- macro = {
-- provider = function()
-- local s
-- local recording_register = vim.fn.reg_recording()
-- if #recording_register == 0 then
-- s = ''
-- else
-- s = string.format(' Recording @%s ', recording_register)
-- end
-- return s
-- end,
-- hl = { fg = palette.bg0, bg = palette.fg3 },
-- left_sep = {
-- always_visible = true,
-- str = separators.slant_left,
-- hl = function() return { fg = palette.fg3, bg = palette.bg0 } end,
-- },
-- },
--
-- search_count = {
-- provider = function()
-- if vim.v.hlsearch == 0 then return '' end
--
-- local ok, result = pcall(vim.fn.searchcount, { maxcount = 999, timeout = 250 })
-- if not ok then return '' end
-- if next(result) == nil then return '' end
--
-- local denominator = math.min(result.total, result.maxcount)
-- return string.format(' [%d/%d] ', result.current, denominator)
-- end,
-- hl = { fg = palette.bg0, bg = palette.white.base },
-- left_sep = {
-- always_visible = true,
-- str = separators.slant_left,
-- hl = function() return { fg = palette.white.base, bg = palette.fg3 } end,
-- },
-- right_sep = {
-- always_visible = true,
-- str = separators.slant_left,
-- hl = { fg = palette.bg0, bg = palette.white.base },
-- },
-- },
--
-- cursor_position = {
-- provider = {
-- name = 'position',
-- opts = { padding = true },
-- },
-- hl = { fg = palette.bg0, bg = palette.blue.base },
-- left_sep = {
-- always_visible = true,
-- str = string.format('%s%s', separators.slant_left, separators.block),
-- hl = function() return { fg = palette.blue.base, bg = palette.bg0 } end,
-- },
-- right_sep = {
-- always_visible = true,
-- str = ' ',
-- hl = { fg = palette.bg0, bg = palette.blue.base },
-- },
-- },
--
-- scroll_bar = {
-- provider = {
-- name = 'scroll_bar',
-- opts = { reverse = true },
-- },
-- hl = { fg = palette.blue.dim, bg = palette.blue.base },
-- },
--
-- -- inactive statusline
-- in_file_info = {
-- provider = function()
-- if vim.api.nvim_buf_get_name(0) ~= '' then
-- return file.file_info({}, { colored_icon = false })
-- else
-- return file.file_type({}, { colored_icon = false, case = 'lowercase' })
-- end
-- end,
-- hl = { fg = palette.bg0, bg = palette.blue.base },
-- left_sep = {
-- always_visible = true,
-- str = string.format('%s%s', separators.slant_left, separators.block),
-- hl = { fg = palette.blue.base, bg = 'none' },
-- },
-- right_sep = {
-- always_visible = true,
-- str = ' ',
-- hl = { fg = palette.bg0, bg = palette.blue.base },
-- },
-- },
-- }
--
-- local active = {
-- { -- left
-- c.vim_status,
-- c.file_name,
-- c.git_branch,
-- c.lsp,
-- },
-- { -- right
-- c.vi_mode,
-- c.macro,
-- c.search_count,
-- c.cursor_position,
-- c.scroll_bar,
-- },
-- }
--
-- local inactive = {
-- { -- left
-- },
-- { -- right
-- c.in_file_info,
-- },
-- }
--
-- opts.components = { active = active, inactive = inactive }
--
-- feline.setup(opts)
-- feline.use_theme(theme)
-- end
--
-- return {
-- 'freddiehaddad/feline.nvim',
-- config = config,
-- dependencies = { 'EdenEast/nightfox.nvim', 'lewis6991/gitsigns.nvim', 'nvim-tree/nvim-web-devicons' },
-- init = function()
-- -- use a global statusline
-- -- vim.opt.laststatus = 3
--
-- -- update statusbar when there's a plugin update
-- vim.api.nvim_create_autocmd('User', {
-- pattern = 'LazyCheck',
-- callback = function() vim.opt.statusline = vim.opt.statusline end,
-- })
--
-- -- update statusbar with LSP progress
-- vim.api.nvim_create_autocmd('User', {
-- pattern = 'LspProgressUpdate',
-- callback = function() update_lsp_progress() end,
-- })
--
-- -- hide the mode
-- vim.opt.showmode = false
--
-- -- hide search count on command line
-- vim.opt.shortmess:append({ S = true })
-- end,
-- opts = {
-- force_inactive = { filetypes = { '^dapui_*', '^help$', '^neotest*', '^NvimTree$', '^qf$' } },
-- disable = { filetypes = { '^alpha$' } },
-- },
-- }
return {
-- Calls `require('slimline').setup({})`
"sschleemilch/slimline.nvim",
opts = {
bold = false, -- makes primary parts and mode bold
verbose_mode = false, -- Mode as single letter or as a word
style = 'bg', -- or "fg". Whether highlights should be applied to bg or fg of components
mode_follow_style = true, -- Whether the mode color components should follow the style option
components = { -- Choose components and their location
left = {
"mode",
"path",
"git"
},
center = {},
right = {
"diagnostics",
"filetype_lsp",
"progress"
}
},
spaces = {
components = ' ', -- string between components
left = ' ', -- string at the start of the line
right = ' ', -- string at the end of the line
},
sep = {
hide = {
first = false, -- hides the first separator
last = false, -- hides the last separator
},
left = '', -- left separator of components
right = '', -- right separator of components
},
hl = {
modes = {
normal = 'Type', -- highlight base of modes
insert = 'Function',
pending = 'Boolean',
visual = 'Keyword',
command = 'String',
},
base = 'Comment', -- highlight of everything in in between components
primary = 'Normal', -- highlight of primary parts (e.g. filename)
secondary = 'Comment', -- highlight of secondary parts (e.g. filepath)
},
icons = {
diagnostics = {
ERROR = '',
WARN = '',
HINT = '',
INFO = '',
},
git = {
branch = '',
},
folder = '',
lines = '',
recording = '',
},
}
}