aboutsummaryrefslogtreecommitdiff
path: root/lua/gruvbox.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/gruvbox.lua')
-rw-r--r--lua/gruvbox.lua248
1 files changed, 248 insertions, 0 deletions
diff --git a/lua/gruvbox.lua b/lua/gruvbox.lua
new file mode 100644
index 0000000..6d5872d
--- /dev/null
+++ b/lua/gruvbox.lua
@@ -0,0 +1,248 @@
+local Color, colors, Group, groups, styles = require("colorbuddy").setup()
+
+-- color palette
+local dark = {
+ dark0_hard = "#1d2021",
+ dark0 = "#282828",
+ dark0_soft = "#32302f",
+ dark1 = "#3c3836",
+ dark2 = "#504945",
+ dark3 = "#665c54",
+ dark4 = "#7c6f64",
+}
+
+local light = {
+ light0_hard = "#f9f5d7",
+ light0 = "#fbf1c7",
+ light0_soft = "#f2e5bc",
+ light1 = "#ebdbb2",
+ light2 = "#d5c4a1",
+ light3 = "#bdae93",
+ light4 = "#a89984",
+}
+
+for k, item in pairs(dark) do
+ Color.new(k, item)
+end
+
+for k, item in pairs(light) do
+ Color.new(k, item)
+end
+
+local bright_colors = {
+ bright_red = "#fb4934",
+ bright_green = "#b8bb26",
+ bright_yellow = "#fabd2f",
+ bright_blue = "#83a598",
+ bright_purple = "#d3869b",
+ bright_aqua = "#8ec07c",
+ bright_orange = "#fe8019",
+}
+
+for k, item in pairs(bright_colors) do
+ Color.new(k, item)
+end
+
+local neutral_colors = {
+ neutral_red = "#cc241d",
+ neutral_green = "#98971a",
+ neutral_yellow = "#d79921",
+ neutral_blue = "#458588",
+ neutral_purple = "#b16286",
+ neutral_aqua = "#689d6a",
+ neutral_orange = "#d65d0e",
+}
+
+for k, item in pairs(neutral_colors) do
+ Color.new(k, item)
+end
+
+local faded_colors = {
+ faded_red = "#9d0006",
+ faded_green = "#79740e",
+ faded_yellow = "#b57614",
+ faded_blue = "#076678",
+ faded_purple = "#8f3f71",
+ faded_aqua = "#427b58",
+ faded_orange = "#af3a03",
+}
+
+for k, item in pairs(faded_colors) do
+ Color.new(k, item)
+end
+
+Color.new("gray", "#928374")
+
+-- options
+-- TODO(ellisonleao) handle light vs dark modes
+local sign_column = colors.dark1
+
+local bg0 = colors.dark0_hard
+local bg1 = colors.dark1
+local bg2 = colors.dark2
+local bg3 = colors.dark3
+local bg4 = colors.dark4
+
+local fg0 = colors.light0
+local fg1 = colors.light1
+local fg2 = colors.light2
+local fg3 = colors.light3
+local fg4 = colors.light4
+
+local red = colors.bright_red
+local green = colors.bright_green
+local yellow = colors.bright_yellow
+local blue = colors.bright_blue
+local purple = colors.bright_purple
+local aqua = colors.bright_aqua
+local orange = colors.bright_orange
+
+-- vim.g vars
+local function get_or_set_default(option, default)
+ -- TODO(ellisonleao) validate inputs
+ local key = "gruvbox_" .. option
+ if vim.g[key] ~= nil then
+ return vim.g[key]
+ end
+
+ return default
+end
+
+-- g:gruvbox_* options
+local hls_cursor = get_or_set_default("hls_cursor", orange)
+local vert_split = get_or_set_default("vert_split", bg0)
+local color_column = get_or_set_default("color_column", bg1)
+local number_column = get_or_set_default("number_column", nil)
+local improved_strings = get_or_set_default("improved_strings", nil)
+
+-- foregrounds
+Group.new("GruvboxGray", colors.gray)
+Group.new("GruvboxFg0", fg0)
+Group.new("GruvboxFg1", fg1)
+Group.new("GruvboxFg2", fg2)
+Group.new("GruvboxFg3", fg3)
+Group.new("GruvboxFg4", fg4)
+
+-- backgrounds
+Group.new("GruvboxBg0", bg0)
+Group.new("GruvboxBg1", bg1)
+Group.new("GruvboxBg2", bg2)
+Group.new("GruvboxBg3", bg3)
+Group.new("GruvboxBg4", bg4)
+
+-- color groups
+Group.new("GruvboxRed", red)
+Group.new("GruvboxRedBold", red, nil, styles.bold)
+
+Group.new("GruvboxGreen", green)
+Group.new("GruvboxGreenBold", green, nil, styles.bold)
+
+Group.new("GruvboxYellow", yellow)
+Group.new("GruvboxYellowBold", yellow, nil, styles.bold)
+
+Group.new("GruvboxBlue", blue)
+Group.new("GruvboxBlueBold", blue, nil, styles.bold)
+
+Group.new("GruvboxPurple", purple)
+Group.new("GruvboxPurpleBold", purple, nil, styles.bold)
+
+Group.new("GruvboxAqua", aqua)
+Group.new("GruvboxAquaBold", aqua, nil, styles.bold)
+
+Group.new("GruvboxOrange", orange)
+Group.new("GruvboxOrangeBold", orange, nil, styles.bold)
+
+-- signs
+Group.new("GruvboxRedSign", red, sign_column, styles.inverse)
+Group.new("GruvboxGreenSign", green, sign_column, styles.inverse)
+Group.new("GruvboxYellowSign", yellow, sign_column, styles.inverse)
+Group.new("GruvboxBlueSign", blue, sign_column, styles.inverse)
+Group.new("GruvboxPurpleSign", purple, sign_column, styles.inverse)
+Group.new("GruvboxAquaSign", aqua, sign_column, styles.inverse)
+Group.new("GruvboxOrangeSign", orange, sign_column, styles.inverse)
+
+-- base highlight groups
+Group.new("Normal", fg1, bg0)
+Group.new("Visual", nil, bg3, styles.inverse)
+Group.new("VisualNOS", groups.Visual)
+Group.new("CursorLine", nil, bg1)
+Group.new("CursorColumn", groups.CursorLine)
+Group.new("ColorColumn", color_column)
+Group.new("CursorLineNr", yellow, bg1)
+Group.new("TabLineFill", bg4, bg1, styles.inverse)
+Group.new("TabLineSel", green, bg1, styles.inverse)
+Group.new("TabLine", groups.TabLineFill)
+Group.new("MatchParen", nil, bg3, styles.bold)
+Group.new("Conceal", blue, nil)
+Group.new("NonText", groups.GruvboxBg2)
+Group.new("SpecialKey", groups.GruvboxBg2)
+Group.new("Underlined", blue, nil, styles.underline)
+Group.new("Search", yellow, bg0, styles.inverse)
+Group.new("IncSearch", yellow, hls_cursor, styles.inverse)
+Group.new("StatusLine", bg2, fg1, styles.inverse)
+Group.new("StatusLineNC", bg1, fg4, styles.inverse)
+Group.new("VertSplit", bg3, vert_split)
+Group.new("WildMenu", blue, bg2, styles.bold)
+Group.new("Directory", groups.GruvboxGreenBold)
+Group.new("Title", groups.GruvboxGreenBold)
+Group.new("ErrorMsg", bg0, red, styles.bold)
+Group.new("MoreMsg", groups.GruvboxYellowBold)
+Group.new("ModeMsg", groups.GruvboxYellowBold)
+Group.new("Question", groups.GruvboxOrangeBold)
+Group.new("WarningMsg", groups.GruvboxRedBold)
+Group.new("LineNr", bg4, number_column)
+Group.new("SignColumn", bg4, sign_column)
+Group.new("Folded", colors.gray, bg1, styles.italic)
+Group.new("FoldColumn", colors.gray, bg1)
+Group.new("Cursor", nil, nil, styles.inverse)
+Group.new("vCursor", groups.Cursor)
+Group.new("iCursor", groups.Cursor)
+Group.new("lCursor", groups.Cursor)
+
+-- Syntax highlight
+if improved_strings == nil then
+ Group.new("Special", groups.GruvboxOrange)
+ Group.new("String", green, nil, styles.italic)
+else
+ Group.new("Special", orange, bg1, styles.italic)
+ Group.new("String", fg1, bg1, styles.italic)
+end
+
+Group.new("Comment", colors.gray, nil, styles.italic)
+Group.new("Todo", fg0, bg0, styles.bold, styles.italic)
+Group.new("Error", red, bg0, styles.bold, styles.inverse)
+Group.new("Statement", groups.GruvboxRed)
+Group.new("Conditional", groups.GruvboxRed)
+Group.new("Repeat", groups.GruvboxRed)
+Group.new("Label", groups.GruvboxRed)
+Group.new("Exception", groups.GruvboxRed)
+Group.new("Operator", groups.Normal)
+Group.new("Keyword", groups.GruvboxRed)
+Group.new("Identifier", groups.GruvboxBlue)
+Group.new("Function", groups.GruvboxGreenBold)
+Group.new("PreProc", groups.GruvboxAqua)
+Group.new("Include", groups.GruvboxAqua)
+Group.new("Define", groups.GruvboxAqua)
+Group.new("Macro", groups.GruvboxAqua)
+Group.new("PreCondit", groups.GruvboxAqua)
+Group.new("Constant", groups.GruvboxPurple)
+Group.new("Character", groups.GruvboxPurple)
+Group.new("Boolean", groups.GruvboxPurple)
+Group.new("Number", groups.GruvboxPurple)
+Group.new("Float", groups.GruvboxPurple)
+Group.new("Type", groups.GruvboxYellow)
+Group.new("StorageClass", groups.GruvboxYellow)
+Group.new("Structure", groups.GruvboxYellow)
+Group.new("Typedef", groups.GruvboxYellow)
+
+-- Plugin specific
+
+-- GitGutter
+Group.new("GitGutterAdd", groups.GruvboxGreenSign)
+Group.new("GitGutterChange", groups.GruvboxAquaSign)
+Group.new("GitGutterDelete", groups.GruvboxRedSign)
+Group.new("GitGutterChangeDelete", groups.GruvboxAquaSign)
+
+-- gitcommit
+Group.new("gitcommitSelectedFile", groups.GruvboxGreen)
+Group.new("gitcommitDiscardedFile", groups.GruvboxRed)