1
0
Fork 0
forked from ahurac/dotfiles
ahuarc-dotfiles/config/nvim-arch/plugin/init.feline.lua
2023-04-13 10:21:47 +02:00

295 lines
No EOL
5.2 KiB
Lua

---depends om https://github.com/feline-nvim/feline.nvim
local present, feline = pcall(require, "feline")
if not present then
return
end
local theme = {
aqua = "#7AB0DF",
bg = "#1C212A",
blue = "#5FB0FC",
cyan = "#70C0BA",
darkred = "#FB7373",
fg = "#C7C7CA",
gray = "#222730",
green = "#79DCAA",
lime = "#54CED6",
orange = "#FFD064",
pink = "#D997C8",
purple = "#C397D8",
red = "#F87070",
yellow = "#FFE59E"
}
local mode_theme = {
["NORMAL"] = theme.green,
["OP"] = theme.cyan,
["INSERT"] = theme.aqua,
["VISUAL"] = theme.yellow,
["LINES"] = theme.darkred,
["BLOCK"] = theme.orange,
["REPLACE"] = theme.purple,
["V-REPLACE"] = theme.pink,
["ENTER"] = theme.pink,
["MORE"] = theme.pink,
["SELECT"] = theme.darkred,
["SHELL"] = theme.cyan,
["TERM"] = theme.lime,
["NONE"] = theme.gray,
["COMMAND"] = theme.blue,
}
local component = {}
component.vim_mode = {
provider = function()
return vim.api.nvim_get_mode().mode:upper()
end,
hl = function()
return {
fg = "bg",
bg = require("feline.providers.vi_mode").get_mode_color(),
style = "bold",
name = "NeovimModeHLColor",
}
end,
left_sep = "block",
right_sep = "block",
}
component.git_branch = {
provider = "git_branch",
hl = {
fg = "fg",
bg = "bg",
style = "bold",
},
left_sep = "block",
right_sep = "",
}
component.git_add = {
provider = "git_diff_added",
hl = {
fg = "green",
bg = "bg",
},
left_sep = "",
right_sep = "",
}
component.git_delete = {
provider = "git_diff_removed",
hl = {
fg = "red",
bg = "bg",
},
left_sep = "",
right_sep = "",
}
component.git_change = {
provider = "git_diff_changed",
hl = {
fg = "purple",
bg = "bg",
},
left_sep = "",
right_sep = "",
}
component.separator = {
provider = "",
hl = {
fg = "bg",
bg = "bg",
},
}
component.diagnostic_errors = {
provider = "diagnostic_errors",
hl = {
fg = "red",
},
}
component.diagnostic_warnings = {
provider = "diagnostic_warnings",
hl = {
fg = "yellow",
},
}
component.diagnostic_hints = {
provider = "diagnostic_hints",
hl = {
fg = "aqua",
},
}
component.diagnostic_info = {
provider = "diagnostic_info",
}
component.lsp = {
provider = function()
if not rawget(vim, "lsp") then
return ""
end
local progress = vim.lsp.util.get_progress_messages()[1]
if vim.o.columns < 120 then
return ""
end
local clients = vim.lsp.get_active_clients({ bufnr = 0 })
if #clients ~= 0 then
if progress then
local spinners = {
"",
"",
"",
"",
"",
"",
}
local ms = vim.loop.hrtime() / 1000000
local frame = math.floor(ms / 120) % #spinners
local content = string.format("%%<%s", spinners[frame + 1])
return content or ""
else
return "לּ LSP"
end
end
return ""
end,
hl = function()
local progress = vim.lsp.util.get_progress_messages()[1]
return {
fg = progress and "yellow" or "green",
bg = "gray",
style = "bold",
}
end,
left_sep = "",
right_sep = "block",
}
component.file_type = {
provider = {
name = "file_type",
opts = {
filetype_icon = true,
},
},
hl = {
fg = "fg",
bg = "gray",
},
left_sep = "block",
right_sep = "block",
}
component.scroll_bar = {
provider = function()
local chars = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
local line_ratio = vim.api.nvim_win_get_cursor(0)[1] / vim.api.nvim_buf_line_count(0)
local position = math.floor(line_ratio * 100)
if position <= 5 then
position = " TOP"
elseif position >= 95 then
position = " BOT"
else
position = chars[math.floor(line_ratio * #chars)] .. position
end
return position
end,
hl = function()
local position = math.floor(vim.api.nvim_win_get_cursor(0)[1] / vim.api.nvim_buf_line_count(0) * 100)
local fg
local style
if position <= 5 then
fg = "aqua"
style = "bold"
elseif position >= 95 then
fg = "red"
style = "bold"
else
fg = "purple"
style = nil
end
return {
fg = fg,
style = "bold",
bg = "bg",
}
end,
left_sep = "block",
right_sep = "block",
}
local left = {}
local middle = {}
local right = {
component.vim_mode,
component.file_type,
component.lsp,
component.git_branch,
component.git_add,
component.git_delete,
component.git_change,
component.separator,
component.diagnostic_errors,
component.diagnostic_warnings,
component.diagnostic_info,
component.diagnostic_hints,
component.scroll_bar,
}
local components = {
active = {
left,
middle,
right,
},
}
feline.setup({
components = components,
theme = theme,
vi_mode_colors = mode_theme,
})
---vim:filetype=lua