local theme = {} function theme.setup() local options = require("nightly_cm.config").options local p = require("nightly_cm.palette").dark_colors if options.transparent then p.background = "NONE" vim.o.pumblend = 0 end theme.highlights = { -- Base highlights Boolean = { fg = p.color5 }, Character = { fg = p.color12 }, ColorColumn = { bg = p.none }, Comment = { fg = p.comment, style = options.styles.comments }, Conceal = { fg = p.color4, bg = p.background }, Conditional = { fg = p.color6 }, Constant = { fg = p.color7 }, Cursor = { fg = p.foreground, bg = p.foreground }, CursorNC = { fg = "NONE", bg = "NONE" }, CurSearch = { link = "IncSearch" }, CursorColumn = { bg = p.background }, CursorIM = { fg = p.foreground, bg = p.foreground }, CursorLine = { bg = p.cursorline }, CursorLineNr = { fg = p.foreground }, Debug = { fg = p.color1 }, Define = { fg = p.color6 }, Delimiter = { fg = p.foreground }, DiffAdd = { fg = p.color4, bg = p.background }, DiffChange = { fg = p.color5, bg = p.background }, DiffDelete = { fg = p.color1, bg = p.background }, DiffText = { fg = p.color5, bg = p.background }, Directory = { fg = p.color4 }, EndOfBuffer = { fg = p.background }, EndOfBufferNC = { fg = p.background }, Error = { fg = p.color1, bg = p.background }, ErrorMsg = { fg = p.color1, bg = p.background }, Exception = { fg = p.color6 }, Float = { fg = p.color5 }, FloatBorder = { fg = p.comment, bg = p.background }, FoldColumn = { fg = p.color4, bg = p.background }, Folded = { fg = p.color4, bg = p.background }, Function = { fg = p.color6, style = options.styles.functions }, Identifier = { fg = p.color5 }, Ignore = { fg = p.color7, bg = p.background }, IncSearch = { fg = p.black, bg = p.color10 }, Include = { fg = p.color6 }, Keyword = { fg = p.color6, style = options.styles.keywords }, Label = { fg = p.color4 }, LineNr = { fg = p.color17 }, Macro = { fg = p.color6 }, MatchParen = { bg = p.color17 }, ModeMsg = { fg = p.foreground, bg = p.background }, MoreMsg = { fg = p.color5 }, MsgArea = { fg = p.foreground, bg = p.background }, MsgSeparator = { fg = p.foreground, bg = p.background }, NonText = { fg = p.color5 }, Normal = { fg = p.foreground, bg = p.background }, NormalFloat = { bg = p.color0 }, NormalNC = { fg = p.foreground, bg = p.background }, Number = { fg = p.color3 }, Operator = { fg = p.color6 }, Pmenu = { fg = p.foreground, bg = p.color0 }, PmenuSbar = { bg = p.color0 }, PmenuSel = { fg = p.black, bg = p.color4 }, PmenuThumb = { bg = p.color2 }, PreCondit = { fg = p.color6 }, PreProc = { fg = p.color6 }, Question = { fg = p.color5 }, QuickFixLine = { bg = p.color2 }, Repeat = { fg = p.color6 }, Search = { fg = p.black, bg = p.color4 }, SignColumn = { fg = p.background, bg = p.background }, Special = { fg = p.color6 }, SpecialChar = { fg = p.foreground }, SpecialComment = { fg = p.color2 }, SpecialKey = { fg = p.color4 }, SpellBad = { fg = p.color2 }, SpellCap = { fg = p.color6 }, SpellLocal = { fg = p.color4 }, SpellRare = { fg = p.color6 }, Statement = { fg = p.color6 }, StatusLine = { fg = p.foreground, bg = p.background }, StStatusLine = { fg = p.foreground, bg = p.background }, Storage = { fg = p.color5 }, StorageClass = { fg = p.color7 }, String = { fg = p.color2 }, Structure = { fg = p.color6 }, Substitute = { fg = p.black, bg = p.color5 }, TabLine = { fg = p.color2, bg = p.color16 }, TabLineFill = { fg = p.foreground, bg = p.color16 }, TabLineSel = { fg = p.foreground, bg = p.background }, Tag = { fg = p.color4 }, TermCursor = { fg = p.foreground, bg = p.foreground }, TermCursorNC = { fg = p.foreground, bg = p.foreground }, Title = { fg = p.color4, bold = true }, Todo = { fg = p.color1, bg = p.background }, type = { fg = p.color5 }, typedef = { fg = p.color6 }, underlined = { fg = p.color2, underline = true }, Variable = { fg = p.color15 }, VertSplit = { fg = p.cursorline }, Visual = { bg = p.color18 }, VisualNOS = { bg = p.background }, WarningMsg = { fg = p.color3, bg = p.background }, Whitespace = { fg = p.color1 }, WildMenu = { fg = p.color7, bg = p.color4 }, lCursor = { fg = p.foreground, bg = p.foreground }, WinSeparator = { fg = p.cursorline }, -- Lazygit LazyGitFloat = { fg = p.foreground, bg = p.color0 }, LazyGitBorder = { fg = p.foreground, bg = p.background }, -- Diagnostic DiagnosticError = { fg = p.color1 }, DiagnosticHint = { fg = p.color2 }, DiagnosticInfo = { fg = p.color4 }, DiagnosticWarn = { fg = p.color3 }, DiagnosticUnnecessary = { fg = p.none }, -- diff diffAdded = { fg = p.color4 }, diffChanged = { fg = p.color5 }, diffFile = { fg = p.color7 }, diffIndexLine = { fg = p.color6 }, diffLine = { fg = p.color5 }, diffNewFile = { fg = p.color5 }, diffOldFile = { fg = p.color5 }, diffRemoved = { fg = p.color1 }, -- gitsigns: https://github.com/lewis6991/gitsigns.nvim GitSignsAdd = { fg = p.color2 }, GitSignsChange = { fg = p.color3 }, GitSignsDelete = { fg = p.color1 }, -- indent-blankline.nvim: https://github.com/lukas-reineke/indent-blankline.nvim IblIndent = { fg = p.cursorline }, IblScope = { fg = p.color17 }, -- LSP LspInfoFiletype = { fg = p.color15 }, LspReferenceText = { bg = p.color4 }, LspReferenceRead = { bg = p.color4 }, LspReferenceWrite = { bg = p.color4 }, LspInfoBorder = { link = "FloatBorder" }, -- Neovim healthError = { fg = p.color1 }, healthSuccess = { fg = p.color4 }, healthWarning = { fg = p.color3 }, -- Yank YankyPut = { link = "Visual" }, YankyYanked = { link = "Visual" }, YankHighlight = { bg = p.cursorline }, -- Markdown markdownCodeBlock = { fg = p.color7 }, markdownCodeDelimeter = { fg = p.color7 }, markdownUrl = { fg = p.color15 }, markdownLink = { fg = p.foreground, underline = true }, -- mini.statusline MiniStatuslineModeNormal = { fg = p.color0, bg = p.comment }, MiniStatuslineModeInsert = { fg = p.color0, bg = p.color2 }, MiniStatuslineModeVisual = { fg = p.color0, bg = p.color4 }, MiniStatuslineModeReplace = { fg = p.color0, bg = p.color5 }, MiniStatuslineModeCommand = { fg = p.color0, bg = p.color3 }, MiniStatuslineModeOther = { fg = p.color0, bg = p.color3 }, MiniStatuslineDevinfo = { fg = p.comment, bg = p.background }, MiniStatuslineFilename = { fg = p.comment, bg = p.background }, MiniStatuslineFileinfo = { fg = p.comment, bg = p.background }, MiniStatuslineInactive = { fg = p.comment, bg = p.background }, -- nvim-treesitter: https://github.com/nvim-treesitter/nvim-treesitter ["@attribute"] = { fg = p.color4 }, ["@boolean"] = { fg = p.color6 }, ["@character"] = { fg = p.color4 }, ["@comment"] = { fg = p.comment, style = options.styles.comments }, ["@conditional"] = { fg = p.color4 }, ["@constant"] = { fg = p.color6 }, ["@constant.builtin"] = { fg = p.color4 }, ["@constant.macro"] = { fg = p.color3 }, ["@constructor"] = { fg = p.color4 }, ["@exception"] = { fg = p.color11 }, ["@field"] = { fg = p.color7 }, ["@float"] = { link = "@number" }, ["@function"] = { fg = p.color4, style = options.styles.functions }, ["@function.builtin"] = { fg = p.color14 }, ["@function.macro"] = { fg = p.color2 }, ["@include"] = { fg = p.color3 }, ["@keyword"] = { fg = p.color15, style = options.styles.keywords }, ["@keyword.function"] = { fg = p.color4, style = options.styles.functions }, ["@keyword.operator"] = { fg = p.color12 }, ["@keyword.return"] = { fg = p.color4 }, ["@label"] = { fg = p.color3 }, ["@method"] = { fg = p.color12 }, ["@namespace"] = { fg = p.color5 }, ["@number"] = { fg = p.color15 }, ["@operator"] = { fg = p.color7 }, ["@parameter"] = { fg = p.color15 }, ["@parameter.reference"] = { fg = p.color15 }, ["@property"] = { fg = p.color5 }, ["@punctuation.bracket"] = { fg = p.color7 }, ["@punctuation.delimiter"] = { fg = p.color7 }, ["@punctuation.special"] = { fg = p.color7 }, ["@repeat"] = { fg = p.color13 }, ["@string"] = { fg = p.color2 }, ["@string.escape"] = { fg = p.color4 }, ["@string.regex"] = { fg = p.color2 }, ["@string.special"] = { fg = p.color4 }, ["@symbol"] = { fg = p.color3 }, ["@tag"] = { fg = p.color4 }, ["@tag.attribute"] = { fg = p.color3 }, ["@tag.delimiter"] = { fg = p.color7 }, ["@text"] = { fg = p.color7 }, ["@text.danger"] = { fg = p.color9 }, ["@text.emphasis"] = { fg = p.color7, italic = true }, ["@text.environment.name"] = { fg = p.color3 }, ["@text.environtment"] = { fg = p.color5 }, ["@text.literal"] = { fg = p.color2, italic = true }, ["@text.math"] = { fg = p.color6 }, ["@text.note"] = { fg = p.black, bg = p.color2 }, ["@text.reference"] = { fg = p.color6 }, ["@text.strike"] = { fg = p.color7, strikethrough = true }, ["@text.strong"] = { fg = p.color7, bold = true }, ["@text.title"] = { fg = p.color3, bold = true }, ["@text.underline"] = { fg = p.color15, underline = true }, ["@text.uri"] = { fg = p.color3, underline = true }, ["@text.warning"] = { fg = p.color0, bg = p.color1 }, ["@type"] = { fg = p.color4 }, ["@type.builtin"] = { fg = p.color3 }, ["@variable"] = { fg = p.color7, style = options.styles.variables }, ["@variable.builtin"] = { fg = p.color4 }, -- vim-gitgutter: https://github.com/airblade/vim-gitgutter GitGutterAdd = { fg = p.color2 }, GitGutterChange = { fg = p.color3 }, GitGutterDelete = { fg = p.color1 }, } theme.terminal_colors = { terminal_color_0 = p.color0, terminal_color_1 = p.color1, terminal_color_2 = p.color2, terminal_color_3 = p.color3, terminal_color_4 = p.color4, terminal_color_5 = p.color5, terminal_color_6 = p.color6, terminal_color_7 = p.color7, terminal_color_8 = p.color8, terminal_color_9 = p.color9, terminal_color_10 = p.color10, terminal_color_11 = p.color11, terminal_color_12 = p.color12, terminal_color_13 = p.color13, terminal_color_14 = p.color14, terminal_color_15 = p.color15, } for option, value in pairs(theme.terminal_colors) do vim.g[option] = value end theme.highlights = vim.tbl_extend("force", {}, theme.highlights, options.highlights) -- Hide all semantic highlights for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do vim.api.nvim_set_hl(0, group, {}) end -- Set the highlights for group, colors in pairs(theme.highlights) do if colors.style then if type(colors.style) == "table" then colors = vim.tbl_extend("force", colors, colors.style) end colors.style = nil end vim.api.nvim_set_hl(0, group, colors) end end return theme