summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/theme.lua
blob: 4fb69c6cee86eac8747ad41adfb7e9fd11f3f670 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
vim.cmd("hi clear")

function highlight(group, color)
    local gui = {
        style = color.gui      and  "gui="   .. color.gui      or "gui=NONE",
        fg    = color.guifg    and  "guifg=" .. color.guifg    or "guifg=NONE",
        bg    = color.guibg    and  "guibg=" .. color.guibg    or "guibg=NONE",
        sp    = color.guisp    and  "guisp=" .. color.guisp    or "guisp=NONE",
    }

    local term = {
        style = color.cterm      and  "cterm="   .. color.cterm      or "cterm=NONE",
        fg    = color.ctermfg    and  "ctermfg=" .. color.ctermfg    or "ctermfg=NONE",
        bg    = color.ctermbg    and  "ctermbg=" .. color.ctermbg    or "ctermbg=NONE",
        sp    = ""
    }

    function serialize(options)
        return " " .. options.style .. " " .. options.fg .. " " .. options.bg .. " " .. options.sp
    end

    local hi = "highlight " .. group .. serialize(term) .. serialize(gui)

    vim.cmd(hi)
end

function link(from, to)
    for i in ipairs(from)
    do
        local hi = "hi! link " .. from[i] .. " " .. to
        vim.cmd(hi)
    end
end

-- test
local color = {
    none = "NONE",
    blue = {
        [1] = "#83a598",
        [2] = "#458588",
    },
    yellow = {
        [1] = "#fabd2f",
        [2] = "#eecf90",
    },
    red = {
        [1] = "#d75f5f",
        [2] = "#e96862",
    },
    orange = {
        [1] = "#d65d0e",
        [2] = "#feb67b",
    },
    aqua = {
        [1] = "#8ec07c",
        [2] = "#98c899",
    },
    purple = {
        [0] = "#a68390",
        [1] = "#d3869b",
        [2] = "#b16286",
    },
    white = {
        [1] = "#fbf1c7",
        [2] = "#ebdbb2",
        [3] = "#d5c4a1",
        [4] = "#bdae93",
        [5] = "#a89984",
    },
    gray = {
        [1] = "#928374",
        [2] = "#7c6f64",
        [3] = "#665c54",
        [4] = "#504945",
        [5] = "#3c3836",
    },
    black = {
        [0] = "#32302f",
        [1] = "#282828",
        [2] = "#1d2021",
    },
}

-- TODO: cterm options have not been checked
local theme = {
    Normal            = { },
    EndOfBuffer       = { },
    NonText           = { ctermfg="238", guifg=color.gray[4] },
    Comment           = { ctermfg="241", guifg=color.gray[3], gui="italic" },
    Conceal           = { ctermfg="241", guifg=color.gray[2] },
    Constant          = { ctermfg="140", guifg=color.orange[2] },
    String            = { ctermfg="140", guifg=color.blue[1] },
    Identifier        = { ctermfg="251", guifg=color.white[2], gui="bold" },
    Statement         = { ctermfg="243", guifg=color.aqua[2] },
    Operator          = { ctermfg="251", guifg=color.white[3] },
    PreProc           = { ctermfg="243", guifg=color.red[2] },
    Type              = { ctermfg="251", guifg=color.yellow[2] },
    Special           = { ctermfg="243", guifg=color.purple[1] },
    Error             = { ctermfg="132", guifg=color.orange[1] },
    Warning           = { ctermfg="179", guifg=color.yellow[1] },
    ModeMsg           = { ctermfg="243", guifg=color.blue[1], gui="bold" },
    Todo              = { ctermfg="167", cterm="bold", guifg=color.red[1], guibg=color.black[1], gui="bold" },
    Underlined        = { ctermfg="251", cterm="underline", guifg=color.white[3], gui="underline" },
    StatusLine        = { ctermbg="237", ctermfg="140", guibg=color.white[5], guifg=color.gray[5], gui="bold" },
    StatusLineNC      = { ctermbg="236", ctermfg="243", guibg=color.gray[4], guifg=color.white[3] },
    WildMenu          = { ctermbg="236", ctermfg="167", guibg=color.gray[5], guifg=color.red[1] },
    VertSplit         = { ctermbg="236", ctermfg="236", guibg=color.black[0], guifg=color.gray[2] },
    Title             = { ctermfg="251", cterm="bold", guifg=color.white[3], gui="bold" },
    LineNr            = { ctermfg="241", guifg=color.gray[2] },
    CursorLineNr      = { ctermbg="236", ctermfg="140", guifg=color.blue[1], gui="bold" },
    Cursor            = { ctermbg="140", ctermfg="251", guibg=color.blue[1], guifg=color.white[3] },
    CursorLine        = { ctermbg="236", guibg=color.black[0] },
    ColorColumn       = { ctermbg="234", guibg=color.black[1] },
    SignColumn        = { ctermfg="243", guifg=color.gray[2] },
    Visual            = { ctermbg="237", guibg=color.gray[2] },
    VisualNOS         = { ctermbg="238", guibg=color.gray[1] },
    Pmenu             = { ctermbg="237", guibg=color.gray[3], guifg=color.white[2] },
    PmenuSbar         = { ctermbg="236", guibg=color.black[0] },
    PmenuSel          = { ctermbg="236", ctermfg="140", guibg=color.gray[5], guifg=color.blue[1] },
    PmenuThumb        = { ctermbg="167", guibg=color.red[1] },
    FoldColumn        = { ctermfg="241", guifg=color.gray[2] },
    Folded            = { ctermbg="234", ctermfg="243", guibg=color.black[0], guifg=color.white[5] },
    SpecialKey        = { ctermfg="243", guifg=color.gray[4] },
    IncSearch         = { ctermbg="167", ctermfg="235", guibg=color.aqua[1], guifg=color.black[1] },
    Search            = { ctermbg="140", ctermfg="235", guibg=color.blue[1], guifg=color.black[1] },
    Directory         = { ctermfg="140", guifg=color.blue[1] },
    MatchParen        = { ctermfg="167", cterm="bold", guifg=color.aqua[1], gui="bold" },
    SpellBad          = { ctermfg="132", cterm="underline", guifg=color.purple[1], gui="underline" },
    SpellCap          = { ctermfg="108", cterm="underline", guifg=color.aqua[1], gui="underline" },
    SpellLocal        = { ctermfg="179", cterm="underline", guifg=color.yellow[1], gui="underline" },
    QuickFixLine      = { ctermbg="234", guibg=color.black[1] },
    DiffAdd           = { ctermbg="236", ctermfg="108", guifg=color.aqua[1] },
    DiffChange        = { ctermbg="236", guifg=color.yellow[1] },
    DiffName          = { ctermbg="236", ctermfg="132", guifg=color.purple[1] },
    DiffDelete        = { ctermbg="236", ctermfg="132", guifg=color.red[1] },
    DiffText          = { ctermbg="236", ctermfg="179", guifg=color.yellow[1] },

    helpHyperTextJump = { ctermfg="140",  guifg=color.blue[1] },
    netrwExe          = { guifg=color.aqua[1] },
    mailQuoted1       = { guifg=color.gray[1] },
    mailQuoted2       = { guifg=color.gray[3] },
}

local links = {
    Constant     = { "Boolean", "Character", "Number" },
    CursorLine   = { "CursorColumn" },
    CursorLineNr = { "NeogitDiffContextHighlight" },
    DiffAdd      = { "diffAdded", "GitSignsAdd", "NeogitDiffAddHighlight" },
    DiffChange   = { "GitSignsChange" },
    DiffName     = { "diffSubname", "diffLine" },
    DiffDelete   = { "diffRemoved", "GitSignsDelete", "NeogitDiffDeleteHighlight" },
    Error        = { "ErrorMsg", "NeogitNotificationError" },
    htmlTag      = { "htmlEndTag" },
    htmlTagName  = { "htmlTag" },
    Identifier   = { "Function", "NeogitHunkHeader" },
    ModeMsg      = { "MoreMsg", "Question" },
    NonText      = { "Ignore" },
    Number       = { "Float" },
    PreProc      = { "Define", "Include", "Macro", "PreCondit" },
    Special      = { "Debug", "Delimiter", "SpecialChar", "SpecialComment", "Tag", "NeogitHunkHeaderHighlight" },
    SpellLocal   = { "SpellRare" },
    Statement    = { "Conditonal", "Exception", "Keyword", "Label", "Repeat" },
    StatusLineNC = { "StatusLineTermNC", "TabLine", "TabLineFill" },
    StatusLine   = { "StatusLineTerm", "TabLineSel", },
    Title        = { "gitcommitSummary" },
    Type         = { "StorageClass", "Structure", "Typedef" },
    Warning      = { "WarningMsg", "NeogitNotificationWarning" },
}

for group,  colors in pairs(theme) do highlight(group, colors) end
for parent, groups in pairs(links) do link(groups, parent)     end

vim.g.terminal_color_0  = "#282828"
vim.g.terminal_color_1  = "#ea6962"
vim.g.terminal_color_2  = "#a9b665"
vim.g.terminal_color_3  = "#d8a657"
vim.g.terminal_color_4  = "#7daea3"
vim.g.terminal_color_5  = "#d3869b"
vim.g.terminal_color_6  = "#89b482"
vim.g.terminal_color_7  = "#d4be98"
vim.g.terminal_color_8  = "#928374"
vim.g.terminal_color_9  = "#ef938e"
vim.g.terminal_color_10 = "#bbc585"
vim.g.terminal_color_11 = "#e1bb7e"
vim.g.terminal_color_12 = "#9dc2ba"
vim.g.terminal_color_13 = "#e1acbb"
vim.g.terminal_color_14 = "#a7c7a2"
vim.g.terminal_color_15 = "#e2d3ba"