trying out nix

This commit is contained in:
snarmph 2026-02-18 14:32:37 +01:00
commit 65bd68a260
18 changed files with 1217 additions and 0 deletions

202
lua/colorini/config.lua Normal file
View file

@ -0,0 +1,202 @@
local M = {}
M.highlights_base = function(colors, base)
local colorscheme = {
green = {
main = colors.green,
high = colors.orange_light,
main_dark = colors.green_dark,
extra = colors.green_dark,
},
orange = {
main = colors.orange_light,
high = colors.green,
main_dark = colors.orange,
extra = colors.orange,
},
}
local selected = base or "green"
local main = colorscheme[selected].main
local high = colorscheme[selected].high
local main_dark = colorscheme[selected].main_dark
local extra = colorscheme[selected].extra
return {
Boolean = { fg = main },
Character = { fg = high },
ColorColumn = { bg = colors.background },
Comment = { fg = colors.light_gray },
Conditional = { fg = main_dark },
Constant = { fg = high },
Cursor = { fg = colors.white, bg = main },
CursorColumn = { bg = colors.gray },
CursorIM = { fg = colors.foreground, bg = colors.cursor },
CursorLine = { bg = colors.gray },
CursorLineNr = { fg = main },
Debug = { fg = colors.blue },
Define = { fg = extra },
Delimiter = { fg = colors.white },
DiffAdd = { fg = colors.white, bg = main },
DiffChange = { fg = colors.white, bg = main },
DiffDelete = { fg = colors.white, bg = colors.red },
DiffText = { fg = colors.foreground, bg = main },
Directory = { fg = high },
EndOfBuffer = { fg = colors.gray, bg = colors.transparent },
-- for some reason every single squirly bracket in c appears red if i leave this red????
Error = { fg = main, bg = colors.transparent },
ErrorMsg = { fg = colors.red, bg = colors.transparent },
Exception = { fg = colors.red },
Float = { fg = main },
FloatBorder = { fg = main, bg = colors.transparent },
FoldColumn = { fg = main, bg = colors.transparent },
Folded = { fg = main, bg = colors.transparent },
Function = { fg = main_dark },
Identifier = { fg = main },
Ignore = { fg = colors.light_gray, bg = colors.transparent },
IncSearch = { fg = colors.white, bg = high },
Include = { fg = main },
Keyword = { fg = high },
Label = { fg = extra },
LineNr = { fg = colors.light_gray, bg = colors.transparent },
LineNrAbove = { fg = colors.light_gray, bg = colors.transparent },
LineNrBelow = { fg = colors.light_gray, bg = colors.transparent },
Macro = { fg = extra },
MatchParen = { fg = colors.white, bg = main },
ModeMsg = { fg = main, bg = colors.transparent },
MoreMsg = { fg = main },
MsgArea = { fg = main, bg = colors.transparent },
MsgSeparator = { fg = colors.gray, bg = colors.transparent },
NonText = { fg = colors.gray },
Normal = { fg = main, bg = colors.transparent },
NormalFloat = { fg = main, bg = colors.background },
NormalNC = { fg = main, bg = colors.transparent },
Number = { fg = high },
Operator = { fg = main },
Pmenu = { fg = colors.white, bg = colors.black },
PmenuSbar = { fg = colors.white, bg = main },
PmenuSel = { fg = colors.white, bg = main },
PmenuThumb = { bg = main },
PreCondit = { fg = main_dark },
PreProc = { fg = main_dark },
Question = { fg = main },
QuickFixLine = { bg = main, fg = colors.white },
Repeat = { fg = main },
Search = { fg = colors.white, bg = main },
SignColumn = { fg = colors.transparent, bg = colors.transparent },
Special = { fg = colors.yellow },
SpecialChar = { fg = main },
SpecialComment = { fg = colors.white },
SpecialKey = { fg = colors.white, bg = colors.red },
SpellBad = { fg = colors.red },
SpellCap = { fg = main },
SpellLocal = { fg = colors.yellow },
SpellRare = { fg = colors.blue },
Statement = { fg = main },
StatusLine = { fg = colors.transparent, bg = colors.transparent },
StatusLineNC = { fg = colors.transparent, bg = colors.transparent },
StorageClass = { fg = main },
String = { fg = high },
Structure = { fg = high },
Substitute = { fg = colors.white, bg = main },
Tag = { fg = high },
TermCursor = { fg = colors.foreground, bg = colors.cursor },
TermCursorNC = { fg = colors.foreground, bg = colors.cursor },
Title = { fg = main },
Todo = { fg = colors.white, bg = colors.transparent },
Type = { fg = main_dark },
Typedef = { fg = main_dark },
Variable = { fg = main },
VertSplit = { fg = colors.blue, bg = colors.transparent },
Visual = { fg = colors.white, bg = main },
VisualNOS = { bg = colors.transparent },
WarningMsg = { fg = colors.yellow, bg = colors.transparent },
Whitespace = { fg = colors.gray, bg = colors.background },
WildMenu = { fg = colors.white, bg = colors.white },
WinBar = { bg = colors.transparent },
WinBarNC = { bg = colors.transparent },
WinSeparator = { fg = colors.gray, bg = colors.transparent },
healthError = { fg = colors.red },
healthSuccess = { fg = colors.green },
healthWarning = { fg = colors.yellow },
lCursor = { fg = colors.foreground, bg = colors.cursor },
-- diagnostics
DiagnosticError = { fg = colors.red },
DiagnosticHint = { fg = colors.orange },
DiagnosticInfo = { fg = colors.white },
DiagnosticWarn = { fg = colors.yellow },
DiagnosticUnderlineError = { undercurl = true, fg = colors.red },
DiagnosticUnderlineHint = { undercurl = true, fg = colors.orange },
DiagnosticUnderlineInfo = { undercurl = true, fg = colors.white },
DiagnosticUnderlineWarn = { undercurl = true, fg = colors.yellow },
-- Telescope
TelescopeBorder = { fg = main, bg = colors.transparent },
TelescopeNormal = { fg = colors.white, bg = colors.transparent },
TelescopeSelection = { fg = colors.transparent, bg = main },
-- treesitter
-- These groups are for the neovim tree-sitter highlights.
-- As of writing, tree-sitter support is a WIP, group names may color5.
-- By default, most of these groups link to an appropriate Vim group,
-- TSError -> Error for example, so you do not have to define these unless
-- you explicitly want to support Treesitter's improved syntax awareness.
-- TSAnnotation = { }; -- For C++/Dart attributes, annotations that can be attached to the code to denote some kind of meta information.
-- TSBoolean = { }; -- For booleans.
-- TSCharacter = { }; -- For characters.
-- TSComment = { }; -- For blueblocks.
TSComment = { fg = colors.blue},
TSConstructor = { fg = colors.blue}, -- For constructor calls and definitions: `= { }` in Lua, and Java constructors.
TSDanger = { fg = colors.transparent, bg = colors.blue},
TSNote = { fg = colors.transparent, bg = colors.blue},
TSWarning = { fg = colors.transparent, bg = colors.blue},
-- TSConditional = { }; -- For keywords related to conditionnals.
-- TSConstant = { }; -- For constants
-- TSConstBuiltin = { }; -- For constant that are built in the language: `nil` in Lua.
-- TSConstMacro = { }; -- For constants that are defined by macros: `NULL` in C.
-- TSError = { }; -- For syntax/parser errors.
-- TSException = { }; -- For exception related keywords.
TSField = { fg = colors.blue }, -- For fields.
-- TSFloat = { }; -- For floats.
-- TSFunction = { }; -- For function (calls and definitions).
-- TSFuncBuiltin = { }; -- For builtin functions: `table.insert` in Lua.
-- TSFuncMacro = { }; -- For macro defined fuctions (calls and definitions): each `macro_rules` in Rust.
-- TSInclude = { }; -- For includes: `#include` in C, `use` or `extern crate` in Rust, or `require` in Lua.
TSKeyword = { fg = colors.blue}, -- For keywords that don't fall in previous categories.
TSKeywordFunction = { fg = colors.blue}, -- For keywords used to define a fuction.
TSLabel = { fg = colors.blue}, -- For labels: `label:` in C and `:label:` in Lua.
-- TSMethod = { }; -- For method calls and definitions.
-- TSNamespace = { }; -- For identifiers referring to modules and namespaces.
-- TSNone = { }; -- TODO: docs
-- TSNumber = { }; -- For all numbers
TSOperator = { fg = colors.blue}, -- For any operator: `+`, but also `->` and `*` in C.
TSParameter = { fg = colors.blue}, -- For parameters of a function.
-- TSParameterReference= { }; -- For references to parameters of a function.
TSProperty = { fg = colors.blue}, -- Same as `TSField`.
TSPunctDelimiter = { fg = colors.blue}, -- For delimiters ie: `.`
TSPunctBracket = { fg = colors.foreground }, -- For brackets and parens.
TSPunctSpecial = { fg = colors.blue}, -- For special punctutation that does not fall in the catagories before.
-- TSRepeat = { }; -- For keywords related to loops.
-- TSString = { }; -- For strings.
TSStringRegex = { fg = colors.blue}, -- For regexes.
TSStringEscape = { fg = colors.blue}, -- For escape characters within a string.
-- TSSymbol = { }; -- For identifiers referring to symbols or atoms.
-- TSType = { }; -- For types.
-- TSTypeBuiltin = { }; -- For builtin types.
TSVariableBuiltin = { fg = colors.blue }, -- Variable names that are defined by the languages, like `this` or `self`.
-- TSTag = { }; -- Tags like html tag names.
-- TSTagDelimiter = { }; -- Tag delimiter like `<` `>` `/`
-- TSText = { }; -- For strings considered text in a markup language.
TSTextReference = { fg = colors.blue},
-- TSEmphasis = { }; -- For text to be represented with emphasis.
-- TSUnderline = { }; -- For text to be represented with an underline.
-- TSStrike = { }; -- For strikethrough text.
-- TSTitle = { }; -- Text that is part of a title.
-- TSLiteral = { }; -- Literal text.
-- TSURI = { }; -- Any URI like a link or email.
}
end
return M

44
lua/colorini/core.lua Normal file
View file

@ -0,0 +1,44 @@
local M = {}
local colors = {
green = "#459A65",
green_dark = "#006666",
orange = "#EE7B3B",
orange_light = "#FD971F",
yellow = "#F6C443",
gray = "#161616",
light_gray = "#464646",
blue = "#3276F6",
red = "#CD0300",
magenta = "#EA3D8D",
white = "#FFFFFF",
black = "#000000",
}
colors.background = colors.black
colors.foreground = colors.green
colors.cursor = colors.orange
function M.get_colors()
return {
transparent = "NONE",
background = colors.background,
foreground = colors.foreground,
cursor = colors.cursor,
white = colors.white,
black = colors.black,
green = colors.green,
green_dark = colors.green_dark,
orange = colors.orange,
orange_light = colors.orange_light,
yellow = colors.yellow,
gray = colors.gray,
light_gray = colors.light_gray,
blue = colors.blue,
red = colors.red,
magenta = colors.magenta,
}
end
return M

432
lua/colorini/feline.lua Normal file
View file

@ -0,0 +1,432 @@
local lsp = require("feline.providers.lsp")
local lsp_severity = vim.diagnostic.severity
local b = vim.b
local assets = {
left_semicircle = "",
right_semicircle = "",
right_semicircle_cut = "",
left_semicircle_cut = "",
vertical_bar_chubby = "",
vertical_bar_medium = "",
vertical_bar_thin = "",
left_arrow_thin = "",
right_arrow_thin = "",
left_arrow_filled = "",
right_arrow_filled = "",
slant_left = "",
slant_left_thin = "",
slant_right = "",
slant_right_thin = "",
slant_left_2 = "",
slant_left_2_thin = "",
slant_right_2 = "",
slant_right_2_thin = "",
chubby_dot = "",
slim_dot = '',
}
local colors = require('pywal16.core').get_colors()
-- settings
local sett = {
bkg = colors.background,
diffs = colors.color1,
extras = colors.color5,
curr_file = colors.color4,
curr_dir = colors.color4,
}
local mode_colors = {
["n"] = { "NORMAL", colors.color1 },
["no"] = { "N-PENDING", colors.color1 },
["i"] = { "INSERT", colors.color1 },
["ic"] = { "INSERT", colors.color1 },
["t"] = { "TERMINAL", colors.color1 },
["v"] = { "VISUAL", colors.color3 },
["V"] = { "V-LINE", colors.color3 },
[""] = { "V-BLOCK", colors.color3 },
["R"] = { "REPLACE", colors.color4 },
["Rv"] = { "V-REPLACE", colors.color4 },
["s"] = { "SELECT", colors.color4 },
["S"] = { "S-LINE", colors.color4 },
[""] = { "S-BLOCK", colors.color4 },
["c"] = { "COMMAND", colors.color6 },
["cv"] = { "COMMAND", colors.color6 },
["ce"] = { "COMMAND", colors.color6 },
["r"] = { "PROMPT", colors.color7 },
["rm"] = { "MORE", colors.color7 },
["r?"] = { "CONFIRM", colors.color2 },
["!"] = { "SHELL", colors.color1 },
}
local shortline = false
-- Initialize the components table
local components = {
active = {},
inactive = {},
}
table.insert(components.active, {}) -- (1) left
table.insert(components.active, {}) -- (2) center
table.insert(components.active, {}) -- (3) right
-- global components
local invi_sep = {
str = " ",
hl = {
fg = sett.bkg,
bg = sett.bkg
},
}
-- helpers
local function any_git_changes()
local gst = b.gitsigns_status_dict -- git stats
if gst then
if gst["added"] and gst["added"] > 0 or gst["removed"] and gst["removed"] > 0 or gst["changed"] and gst["changed"] > 0 then
return true
end
end
return false
end
-- #################### STATUSLINE ->
-- ######## Left
-- Current vi mode ------>
local vi_mode_hl = function()
return {
fg = sett.bkg,
bg = mode_colors[vim.fn.mode()][2],
style = "bold"
}
end
components.active[1][1] = {
provider = assets.vertical_bar_chubby,
hl = function()
return {
fg = mode_colors[vim.fn.mode()][2],
bg = sett.bkg,
}
end,
}
components.active[1][2] = {
provider = "",
hl = function()
return {
fg = sett.bkg,
bg = mode_colors[vim.fn.mode()][2],
}
end,
}
components.active[1][3] = {
provider = function()
return " " .. mode_colors[vim.fn.mode()][1] .. " "
end,
hl = vi_mode_hl,
}
-- there is a dilema: we need to hide Diffs if ther is no git info. We can do that, but this will
-- leave the right_semicircle colored with purple, and since we can't change the color conditonally
-- then the solution is to create two right_semicircles: one with a color2 sett.bkg and the other one normal
-- sett.bkg; both have the same fg (vi mode). The color2 one appears if there is git info, else the one with
-- the normal sett.bkg appears. Fixed :)
-- enable if git diffs are not available
components.active[1][4] = {
provider = assets.right_semicircle,
hl = function()
return {
fg = mode_colors[vim.fn.mode()][2],
bg = sett.bkg
}
end,
enabled = function()
return not any_git_changes()
end
}
-- enable if git diffs are available
components.active[1][5] = {
provider = assets.right_semicircle,
hl = function()
return {
fg = mode_colors[vim.fn.mode()][2],
bg = sett.diffs
}
end,
enabled = function()
return any_git_changes()
end
}
-- Current vi mode ------>
-- Diffs ------>
components.active[1][6] = {
provider = "git_diff_added",
hl = {
fg = sett.bkg,
bg = sett.diffs,
},
icon = "",
}
components.active[1][7] = {
provider = "git_diff_changed",
hl = {
fg = sett.bkg,
bg = sett.diffs,
},
icon = "",
}
components.active[1][8] = {
provider = "git_diff_removed",
hl = {
fg = sett.bkg,
bg = sett.diffs,
},
icon = "",
}
components.active[1][9] = {
provider = assets.right_semicircle,
hl = {
fg = sett.diffs,
bg = sett.bkg,
},
enabled = function()
return any_git_changes()
end
}
-- Diffs ------>
-- Extras ------>
-- file progess
components.active[1][10] = {
provider = function()
local current_line = vim.fn.line(".")
local total_line = vim.fn.line("$")
if current_line == 1 then
return " Top "
elseif current_line == vim.fn.line("$") then
return " Bot "
end
local result, _ = math.modf((current_line / total_line) * 100)
return " " .. result .. "%% "
end,
-- enabled = shortline or function(winid)
-- return vim.api.nvim_win_get_width(winid) > 90
-- end,
hl = {
fg = sett.extras,
bg = sett.bkg
},
left_sep = invi_sep,
}
-- position
components.active[1][11] = {
provider = "position",
-- enabled = shortline or function(winid)
-- return vim.api.nvim_win_get_width(winid) > 90
-- end,
hl = {
fg = sett.extras,
bg = sett.bkg
},
left_sep = invi_sep,
}
-- Extras ------>
-- ######## Left
-- ######## Center
-- Diagnostics ------>
-- workspace loader
components.active[2][1] = {
provider = function()
local Lsp = vim.lsp.util.get_progress_messages()[1]
if Lsp then
local msg = Lsp.message or ""
local percentage = Lsp.percentage or 0
local title = Lsp.title or ""
local spinners = {
"",
"",
"",
}
local success_icon = {
"",
"",
"",
}
local ms = vim.loop.hrtime() / 1000000
local frame = math.floor(ms / 120) % #spinners
if percentage >= 70 then
return string.format(" %%<%s %s %s (%s%%%%) ", success_icon[frame + 1], title, msg, percentage)
end
return string.format(" %%<%s %s %s (%s%%%%) ", spinners[frame + 1], title, msg, percentage)
end
return ""
end,
enabled = shortline or function(winid)
return vim.api.nvim_win_get_width(winid) > 80
end,
hl = {
fg = colors.rosewater,
bg = sett.bkg
},
}
-- genral diagnostics (errors, warnings. info and hints)
components.active[2][2] = {
provider = "diagnostic_errors",
enabled = function()
return lsp.diagnostics_exist(lsp_severity.ERROR)
end,
hl = {
fg = colors.red,
bg = sett.bkg,
},
icon = "",
}
components.active[2][3] = {
provider = "diagnostic_warnings",
enabled = function()
return lsp.diagnostics_exist(lsp_severity.WARN)
end,
hl = {
fg = colors.yellow,
bg = sett.bkg,
},
icon = "",
}
components.active[2][4] = {
provider = "diagnostic_info",
enabled = function()
return lsp.diagnostics_exist(lsp_severity.INFO)
end,
hl = {
fg = colors.sky,
bg = sett.bkg,
},
icon = "",
}
components.active[2][5] = {
provider = "diagnostic_hints",
enabled = function()
return lsp.diagnostics_exist(lsp_severity.HINT)
end,
hl = {
fg = colors.rosewater,
bg = sett.bkg,
},
icon = "",
}
-- Diagnostics ------>
-- ######## Center
-- ######## Right
components.active[3][1] = {
provider = "git_branch",
enabled = shortline or function(winid)
return vim.api.nvim_win_get_width(winid) > 70
end,
hl = {
fg = sett.extras,
bg = sett.bkg
},
icon = "",
left_sep = invi_sep,
right_sep = invi_sep,
}
components.active[3][2] = {
provider = function()
if next(vim.lsp.buf_get_clients()) ~= nil then
return ""
else
return ""
end
end,
hl = {
fg = sett.extras,
bg = sett.bkg
},
right_sep = invi_sep,
}
components.active[3][3] = {
provider = function()
local filename = vim.fn.expand("%:t")
local extension = vim.fn.expand("%:e")
local icon = require("nvim-web-devicons").get_icon(filename, extension)
if icon == nil then
icon = ""
return icon
end
return " " .. icon .. " " .. filename .. " "
end,
enabled = shortline or function(winid)
return vim.api.nvim_win_get_width(winid) > 70
end,
hl = {
fg = sett.bkg,
bg = sett.curr_file,
},
left_sep = {
str = assets.left_semicircle,
hl = {
fg = sett.curr_file,
bg = sett.bkg,
},
},
}
components.active[3][4] = {
provider = function()
local dir_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":t")
return "" .. dir_name .. " "
end,
enabled = shortline or function(winid)
return vim.api.nvim_win_get_width(winid) > 80
end,
hl = {
fg = sett.bkg,
bg = sett.curr_dir,
},
left_sep = {
str = assets.left_semicircle,
hl = {
fg = sett.curr_dir,
bg = sett.curr_file,
},
},
}
-- ######## Right
return components

View file

@ -0,0 +1,11 @@
local M = {}
local config = require('colorini.config')
function M.highlight_all(colors, base)
local base_highlights = config.highlights_base(colors, base)
for group, properties in pairs(base_highlights) do
vim.api.nvim_set_hl(0, group, properties)
end
end
return M

11
lua/colorini/init.lua Normal file
View file

@ -0,0 +1,11 @@
local M = {}
local core = require('colorini.core')
local highlights = require('colorini.highlights')
function M.setup(base)
local colors = core.get_colors()
vim.opt.termguicolors = true
highlights.highlight_all(colors, base)
end
return M