diff --git a/modules/nvim/config/colors/winterly.lua b/modules/nvim/config/colors/winterly.lua new file mode 100644 index 0000000..8a49041 --- /dev/null +++ b/modules/nvim/config/colors/winterly.lua @@ -0,0 +1,284 @@ +local palette = require("dnsc.palette") + +vim.cmd.highlight("clear") +vim.g.colors_name = "winterly" + +local hi = function(name, val) + -- Force links + val.force = true + + -- Make sure that `cterm` attribute is not populated from `gui` + val.cterm = val.cterm or {} ---@type vim.api.keyset.highlight + + -- Define global highlight + vim.api.nvim_set_hl(0, name, val) +end + +-- General +hi("Normal", { fg = palette.fg }) + +hi("Conceal", { fg = "LightGrey", bg = "DarkGrey", ctermfg = "LightGrey", ctermbg = "DarkGrey" }) +hi("Cursor", { bg = palette.magenta_bright }) +hi("DiffText", { bg = "Red", bold = true, ctermbg = "Red", cterm = { bold = true } }) +hi("ErrorMsg", { fg = palette.red_bright, bg = palette.red_subtle_bg, ctermfg = "White", ctermbg = "DarkRed" }) +hi("IncSearch", { reverse = true, cterm = { reverse = true } }) +hi("ModeMsg", { bold = true, cterm = { bold = true } }) +hi("NonText", { fg = palette.grey, ctermfg = "DarkGrey" }) +hi("PmenuSbar", { bg = "Grey", ctermbg = "Grey" }) +hi("StatusLine", { reverse = true, bold = true, cterm = { reverse = true, bold = true } }) +hi("StatusLineNC", { reverse = true, cterm = { reverse = true } }) +hi("TabLineFill", { reverse = true, cterm = { reverse = true } }) +hi("TabLineSel", { bold = true, cterm = { bold = true } }) +hi("TermCursor", { reverse = true, cterm = { reverse = true } }) +hi("WinBar", { bold = true, cterm = { bold = true } }) +hi("WildMenu", { fg = "Black", bg = "Yellow", ctermfg = "Black", ctermbg = "Yellow" }) + +hi("VertSplit", { link = "Normal" }) +hi("WinSeparator", { link = "VertSplit" }) +hi("WinBarNC", { link = "WinBar" }) +hi("DiffTextAdd", { link = "DiffText" }) +hi("EndOfBuffer", { link = "NonText" }) +hi("LineNrAbove", { link = "LineNr" }) +hi("LineNrBelow", { link = "LineNr" }) +hi("QuickFixLine", { link = "Search" }) +hi("CursorLineSign", { link = "SignColumn" }) +hi("CursorLineFold", { link = "FoldColumn" }) +hi("CurSearch", { link = "Search" }) +hi("PmenuKind", { link = "Pmenu" }) +hi("PmenuKindSel", { link = "PmenuSel" }) +hi("PmenuMatch", { link = "Pmenu" }) +hi("PmenuMatchSel", { link = "PmenuSel" }) +hi("PmenuExtra", { link = "Pmenu" }) +hi("PmenuExtraSel", { link = "PmenuSel" }) +hi("PreInsert", { link = "Added" }) +hi("ComplMatchIns", {}) +hi("ComplHint", { link = "NonText" }) +hi("ComplHintMore", { link = "MoreMsg" }) +hi("Whitespace", { link = "NonText" }) +hi("MsgSeparator", { link = "StatusLine" }) +hi("NormalFloat", { link = "Pmenu" }) +hi("FloatBorder", { link = "WinSeparator" }) +hi("FloatTitle", { link = "Title" }) +hi("FloatFooter", { link = "Title" }) + +hi("FloatShadow", { bg = "Black", blend = 80 }) +hi("FloatShadowThrough", { bg = "Black", blend = 100 }) +hi("RedrawDebugNormal", { reverse = true, cterm = { reverse = true } }) +hi("RedrawDebugClear", { bg = "Yellow", ctermbg = "Yellow" }) +hi("RedrawDebugComposed", { bg = "Green", ctermbg = "Green" }) +hi("RedrawDebugRecompose", { bg = "Red", ctermbg = "Red" }) +hi("Error", { fg = "White", bg = "Red", ctermfg = "White", ctermbg = "Red" }) +hi("Todo", { fg = "Blue", bg = "Yellow", ctermfg = "Black", ctermbg = "Yellow" }) + +hi("String", { link = "Constant" }) +hi("Character", { link = "Constant" }) +hi("Number", { link = "Constant" }) +hi("Boolean", { link = "Constant" }) +hi("Float", { link = "Number" }) +hi("Function", { link = "Identifier" }) +hi("Conditional", { link = "Statement" }) +hi("Repeat", { link = "Statement" }) +hi("Label", { link = "Statement" }) +hi("Operator", { link = "Statement" }) +hi("Keyword", { link = "Statement" }) +hi("Exception", { link = "Statement" }) +hi("Include", { link = "PreProc" }) +hi("Define", { link = "PreProc" }) +hi("Macro", { link = "PreProc" }) +hi("PreCondit", { link = "PreProc" }) +hi("StorageClass", { link = "Type" }) +hi("Structure", { link = "Type" }) +hi("Typedef", { link = "Type" }) +hi("Tag", { link = "Special" }) +hi("SpecialChar", { link = "Special" }) +hi("Delimiter", { link = "Special" }) +hi("SpecialComment", { link = "Special" }) +hi("Debug", { link = "Special" }) + +hi("DiagnosticError", { fg = palette.red_bright, ctermfg = 1 }) +hi("DiagnosticWarn", { fg = "Orange", ctermfg = 3 }) +hi("DiagnosticInfo", { fg = "LightBlue", ctermfg = 4 }) +hi("DiagnosticHint", { fg = "LightGrey", ctermfg = 7 }) +hi("DiagnosticOk", { fg = "LightGreen", ctermfg = 10 }) +hi("DiagnosticUnderlineError", { fg = palette.red_bright, undercurl = true, cterm = { underline = true } }) +hi("DiagnosticUnderlineWarn", { sp = "Orange", undercurl = true, cterm = { underline = true } }) +hi("DiagnosticUnderlineInfo", { sp = "LightBlue", undercurl = true, cterm = { underline = true } }) +hi("DiagnosticUnderlineHint", { sp = "LightGrey", undercurl = true, cterm = { underline = true } }) +hi("DiagnosticUnderlineOk", { sp = "LightGreen", undercurl = true, cterm = { underline = true } }) +hi("DiagnosticVirtualTextError", { link = "DiagnosticError" }) +hi("DiagnosticVirtualTextWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticVirtualTextInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticVirtualTextHint", { link = "DiagnosticHint" }) +hi("DiagnosticVirtualTextOk", { link = "DiagnosticOk" }) +hi("DiagnosticFloatingError", { link = "DiagnosticError" }) +hi("DiagnosticFloatingWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticFloatingInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticFloatingHint", { link = "DiagnosticHint" }) +hi("DiagnosticFloatingOk", { link = "DiagnosticOk" }) +hi("DiagnosticSignError", { link = "DiagnosticError" }) +hi("DiagnosticSignWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticSignInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticSignHint", { link = "DiagnosticHint" }) +hi("DiagnosticSignOk", { link = "DiagnosticOk" }) +hi("DiagnosticDeprecated", { sp = "Red", strikethrough = true, cterm = { strikethrough = true } }) + +hi("DiagnosticUnnecessary", { link = "Unused" }) +hi("LspInlayHint", { link = "NonText" }) +hi("SnippetTabstop", { link = "Visual" }) +hi("SnippetTabstopActive", { link = "SnippetTabstop" }) + +-- Text +hi("@markup.raw", { link = "Comment" }) +hi("@markup.link", { link = "Identifier" }) +hi("@markup.heading", { link = "Title" }) +hi("@markup.link.url", { link = "Underlined" }) +hi("@markup.underline", { link = "Underlined" }) +hi("@comment.todo", { link = "Todo" }) + +-- Miscs +hi("@comment", { link = "Comment" }) +hi("@punctuation", { link = "Delimiter" }) + +-- Constants +hi("@constant", { link = "Constant" }) +hi("@constant.builtin", { link = "Special" }) +hi("@constant.macro", { link = "Define" }) +hi("@keyword.directive", { link = "Define" }) +hi("@string", { link = "String" }) +hi("@string.escape", { link = "SpecialChar" }) +hi("@string.special", { link = "SpecialChar" }) +hi("@character", { link = "Character" }) +hi("@character.special", { link = "SpecialChar" }) +hi("@number", { link = "Number" }) +hi("@boolean", { link = "Boolean" }) +hi("@number.float", { link = "Float" }) + +-- Functions +hi("@function", { link = "Function" }) +hi("@function.builtin", { link = "Special" }) +hi("@function.macro", { link = "Macro" }) +hi("@function.method", { link = "Function" }) +hi("@variable.parameter", { link = "Identifier" }) +hi("@variable.parameter.builtin", { link = "Special" }) +hi("@variable.member", { link = "Identifier" }) +hi("@property", { link = "Identifier" }) +hi("@attribute", { link = "Macro" }) +hi("@attribute.builtin", { link = "Special" }) +hi("@constructor", { link = "Special" }) + +-- Keywords +hi("@keyword.conditional", { link = "Conditional" }) +hi("@keyword.repeat", { link = "Repeat" }) +hi("@keyword.type", { link = "Structure" }) +hi("@label", { link = "Label" }) +hi("@operator", { link = "Operator" }) +hi("@keyword", { link = "Keyword" }) +hi("@keyword.exception", { link = "Exception" }) + +hi("@variable", { link = "Identifier" }) +hi("@type", { link = "Type" }) +hi("@type.definition", { link = "Typedef" }) +hi("@module", { link = "Identifier" }) +hi("@keyword.import", { link = "Include" }) +hi("@keyword.directive", { link = "PreProc" }) +hi("@keyword.debug", { link = "Debug" }) +hi("@tag", { link = "Tag" }) +hi("@tag.builtin", { link = "Special" }) + +-- LSP semantic tokens +hi("@lsp.type.class", { link = "Structure" }) +hi("@lsp.type.comment", { link = "Comment" }) +hi("@lsp.type.decorator", { link = "Function" }) +hi("@lsp.type.enum", { link = "Structure" }) +hi("@lsp.type.enumMember", { link = "Constant" }) +hi("@lsp.type.function", { link = "Function" }) +hi("@lsp.type.interface", { link = "Structure" }) +hi("@lsp.type.macro", { link = "Macro" }) +hi("@lsp.type.method", { link = "Function" }) +hi("@lsp.type.namespace", { link = "Structure" }) +hi("@lsp.type.parameter", { link = "Identifier" }) +hi("@lsp.type.property", { link = "Identifier" }) +hi("@lsp.type.struct", { link = "Structure" }) +hi("@lsp.type.type", { link = "Type" }) +hi("@lsp.type.typeParameter", { link = "TypeDef" }) +hi("@lsp.type.variable", { link = "Identifier" }) +hi("@lsp.typemod.keyword.documentation", { fg = palette.grey, bold = true }) + +if vim.o.background == "light" then + -- TODO: Define light scheme +else + -- Default colors only used with a dark background. + hi("ColorColumn", { bg = "DarkRed", ctermbg = "DarkRed" }) + hi("CursorColumn", { bg = "Grey40", ctermbg = "DarkGrey" }) + hi("CursorLine", { bg = palette.magenta_subtle_bg_darker, cterm = { underline = true } }) + hi("CursorLineNr", { + fg = palette.fg, + bg = palette.magenta_subtle_bg_darker, + bold = true, + ctermfg = "White", + cterm = { underline = true }, + }) + hi("DiffAdd", { bg = "DarkBlue", ctermbg = "DarkBlue" }) + hi("DiffChange", { bg = "DarkMagenta", ctermbg = "DarkMagenta" }) + hi("DiffDelete", { fg = "Blue", bg = "DarkCyan", bold = true, ctermfg = "Blue", ctermbg = "DarkCyan" }) + hi("Directory", { fg = "Cyan", ctermfg = "LightCyan" }) + hi("FoldColumn", { fg = "Cyan", bg = "Grey", ctermfg = "Cyan", ctermbg = "DarkGrey" }) + hi("Folded", { fg = "Cyan", bg = "DarkGrey", ctermfg = "Cyan", ctermbg = "DarkGrey" }) + hi("LineNr", { fg = palette.grey_bright, ctermfg = "Grey" }) + hi("MatchParen", { bg = "DarkCyan", ctermbg = "DarkCyan" }) + hi("MoreMsg", { fg = "SeaGreen", bold = true, ctermfg = "LightGreen" }) + hi("Pmenu", { bg = palette.bg, ctermfg = "White", ctermbg = "Black" }) + hi("PmenuSel", { bg = "DarkGrey", ctermfg = "DarkGrey", ctermbg = "Black" }) + hi("PmenuThumb", { bg = "White", ctermbg = "White" }) + hi("Question", { fg = "Green", bold = true, ctermfg = "LightGreen" }) + hi("Search", { fg = palette.cyan_bright, bg = palette.cyan_subtle_bg, ctermfg = "LightCyan", ctermbg = "DarkCyan" }) + hi( + "Substitute", + { fg = palette.blue_subtle_bg, bg = palette.blue_bright, bold = true, ctermfg = "DarkBlue", ctermbg = "LightBlue" } + ) + hi("SignColumn", { fg = palette.grey_bright, bg = palette.bg, ctermfg = "Cyan", ctermbg = "DarkGrey" }) + hi("SpecialKey", { fg = "Cyan", ctermfg = "LightBlue" }) + hi("SpellBad", { sp = "Red", undercurl = true, ctermbg = "Red" }) + hi("SpellCap", { sp = "Blue", undercurl = true, ctermbg = "Blue" }) + hi("SpellLocal", { sp = "Cyan", undercurl = true, ctermbg = "Cyan" }) + hi("SpellRare", { sp = "Magenta", undercurl = true, ctermbg = "Magenta" }) + hi( + "StatusLineTerm", + { fg = "Black", bg = "LightGreen", bold = true, ctermfg = "Black", ctermbg = "LightGreen", cterm = { bold = true } } + ) + hi("StatusLineTermNC", { fg = "Black", bg = "LightGreen", ctermfg = "Black", ctermbg = "LightGreen" }) + hi( + "TabLine", + { bg = "DarkGrey", underline = true, ctermfg = "White", ctermbg = "DarkGrey", cterm = { underline = true } } + ) + hi("Title", { fg = "Magenta", bold = true, ctermfg = "LightMagenta" }) + hi( + "Visual", + { fg = palette.magenta_brighter, bg = palette.magenta_subtle_bg, ctermfg = "LightMagenta", ctermbg = "DarkMagenta" } + ) + hi("WarningMsg", { fg = "Red", ctermfg = "LightRed" }) + hi("Comment", { fg = palette.grey, ctermfg = "Cyan" }) + hi("Unused", { fg = palette.grey_bright, undercurl = true, ctermfg = "LightGrey" }) + hi("Constant", { fg = palette.yellow_brighter, ctermfg = "LightYellow" }) + hi("Special", { fg = palette.silver, ctermfg = "LightGrey" }) + hi("Identifier", { fg = palette.fg, bold = true, ctermfg = "White", cterm = { bold = true } }) + hi("Statement", { fg = palette.fg_alt, italic = true, ctermfg = "White" }) + hi("PreProc", { fg = "#ff80ff", ctermfg = "LightBlue" }) + hi("Type", { fg = palette.silver, bold = true, ctermfg = "LightCyan" }) + hi("Underlined", { fg = "#80a0ff", underline = true, ctermfg = "LightBlue", cterm = { underline = true } }) + hi("Ignore", { ctermfg = "Black" }) + hi("Added", { fg = "LimeGreen", ctermfg = "Green" }) + hi("Changed", { fg = "DodgerBlue", ctermfg = "Blue" }) + hi("Removed", { fg = "Red", ctermfg = "Red" }) + + -- Snacks + hi("SnacksIndentScope", { fg = palette.magenta, ctermfg = "LightGrey" }) + hi("SnacksIndent", { fg = palette.magenta_subtle_bg, ctermfg = "DarkGrey" }) + + -- Flash + hi("FlashMatch", { fg = palette.bg, bg = palette.grey_bright, ctermfg = "LightGrey", ctermbg = "DarkGrey" }) + + -- todo-comments + hi("TodoBgTODO", { fg = palette.bg, bg = palette.cyan, ctermbg = "Cyan", ctermfg = "Black" }) + hi("TodoFgTODO", { fg = palette.cyan, ctermfg = "Cyan" }) +end diff --git a/modules/nvim/config/lua/dnsc/lazy.lua b/modules/nvim/config/lua/dnsc/lazy.lua index 4d4cdd2..4178fd3 100644 --- a/modules/nvim/config/lua/dnsc/lazy.lua +++ b/modules/nvim/config/lua/dnsc/lazy.lua @@ -18,6 +18,8 @@ vim.opt.rtp:prepend(lazypath) vim.g.mapleader = " " vim.g.maplocalleader = " " +vim.cmd([[colorscheme winterly]]) + local options = { backup = false, -- creates a backup file clipboard = "unnamedplus", -- allows neovim to access the system clipboard @@ -72,7 +74,7 @@ require("lazy").setup({ }, -- Configure any other settings here. See the documentation for more details. -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "rose-pine" } }, + install = { colorscheme = { "winterly" } }, -- automatically check for plugin updates checker = { enabled = false }, }) diff --git a/modules/nvim/config/lua/dnsc/palette.lua b/modules/nvim/config/lua/dnsc/palette.lua new file mode 100644 index 0000000..314f608 --- /dev/null +++ b/modules/nvim/config/lua/dnsc/palette.lua @@ -0,0 +1,33 @@ +return { + fg = "#ffffff", + fg_alt = "#bf8a9f", + fg_dim = "#807c9f", + bg = "#0f0b15", + bg_secondary = "#1d202f", + grey = "#807c9f", + grey_bright = "#807c9f", + red = "#f47359", + red_bright = "#ff6a7a", + red_subtle_bg = "#67182f", + green = "#29a444", + green_bright = "#00a392", + green_subtle_bg = "#10452f", + yellow = "#b58a52", + yellow_bright = "#df9080", + yellow_brighter = "#FCC1B6", + yellow_subtle_bg = "#54362a", + blue = "#3f95f6", + blue_bright = "#029fff", + blue_subtle_bg = "#2a346e", + blue_subtle_dark_bg = "#003045", + magenta = "#d369af", + magenta_bright = "#af85ea", + magenta_brighter = "#c57faf", + magenta_subtle_bg = "#572454", + magenta_subtle_bg_darker = "#331531", + cyan = "#4fbaef", + cyan_bright = "#35afbf", + cyan_subtle_bg = "#133d56", + silver = "#b8c6d5", + silver_bright = "#ffffff", +} diff --git a/modules/nvim/config/lua/plugins/oil.lua b/modules/nvim/config/lua/plugins/oil.lua index 5676b96..0dd1d7c 100644 --- a/modules/nvim/config/lua/plugins/oil.lua +++ b/modules/nvim/config/lua/plugins/oil.lua @@ -8,17 +8,12 @@ return { "icon", "permissions", "size", - -- "mtime", - }, - float = { - padding = 4, - border = "rounded", - preview_split = "auto", + "mtime", }, }, -- stylua: ignore keys = { - { "n", "Oil --float", desc = "Open file browser", mode = "n" }, + { "n", "Oil", desc = "Open file browser", mode = "n" }, } , } diff --git a/modules/nvim/config/lua/plugins/snacks.lua b/modules/nvim/config/lua/plugins/snacks.lua index 5da12fe..a481640 100644 --- a/modules/nvim/config/lua/plugins/snacks.lua +++ b/modules/nvim/config/lua/plugins/snacks.lua @@ -21,7 +21,6 @@ return { }, indent = { enabled = true, - char = "┆", }, input = { enabled = true }, lazygit = { @@ -193,5 +192,12 @@ return { end, desc = "Open notification history", }, + { + "oh", + function() + Snacks.picker.highlights() + end, + desc = "List highlights", + }, }, } diff --git a/modules/nvim/config/lua/plugins/theme.lua b/modules/nvim/config/lua/plugins/theme.lua deleted file mode 100644 index dd79d63..0000000 --- a/modules/nvim/config/lua/plugins/theme.lua +++ /dev/null @@ -1,50 +0,0 @@ -return { - "miikanissi/modus-themes.nvim", - priority = 1000, - opts = { - style = "modus_vivendi", - styles = { - comments = { italic = true }, - keywords = { italic = false }, - }, - variant = "tinted", - transparent = true, - sign_column_background = false, - line_nr_column_background = false, - on_highlights = function(highlight, color) - highlight.TabLine = { fg = color.fg_dim, bg = color.bg_dim } - highlight.TabLineFill = { fg = color.fg_dim, bg = color.bg_main } - highlight.BufferInactiveMod = { fg = color.fg_dim, bg = color.bg_main } - highlight.BufferInactive = { fg = color.fg_dim, bg = color.bg_main } - highlight.BufferInactiveSign = { fg = color.fg_alt, bg = color.bg_main } - highlight.BufferInactiveSignRight = { fg = color.fg_alt, bg = color.bg_main } - highlight.BufferInactiveTarget = { fg = color.yellow_faint, bg = color.bg_main } - highlight.BufferActiveMod = { fg = color.fg_dim, bg = color.bg_main } - highlight.BufferActive = { fg = color.fg_dim, bg = color.bg_main } - highlight.BufferActiveSign = { fg = color.fg_alt, bg = color.bg_dim } - highlight.BufferActiveSignRight = { fg = color.fg_alt, bg = color.bg_dim } - highlight.BufferActiveTarget = { fg = color.yellow_faint, bg = color.bg_dim } - highlight.BufferCurrentMod = { fg = color.fg_alt, bg = color.bg_dim } - highlight.BufferCurrentBtn = { fg = color.fg_main, bg = color.bg_dim } - highlight.BufferCurrent = { fg = color.fg_main, bg = color.bg_dim } - highlight.BufferCurrentSign = { fg = color.fg_alt, bg = color.bg_dim } - highlight.BufferCurrentSignRight = { fg = color.fg_alt, bg = color.bg_dim } - highlight.BufferCurrentTarget = { fg = color.yellow_faint, bg = color.bg_dim } - highlight.WhichKeyFloat = { fg = "NONE", bg = "NONE" } - highlight.NormalFloat = { fg = "NONE", bg = "NONE" } - highlight.SnacksIndent = { fg = color.bg_dim } - highlight.FlashMatch = { fg = color.fg_main, bg = color.bg_cyan_subtle } - highlight.FlashLabel = { fg = color.fg_main, bg = color.bg_magenta_intense } - highlight.SnacksIndentScope = { fg = color.fg_dim } - highlight.CursorLine = { bg = color.tinted_bg_cyan_nuanced } - highlight.Visual = { bg = color.bg_magenta_subtle } - highlight.Search = { fg = color.magenta, bg = color.bg_magenta_nuanced } - highlight.IncSearch = { fg = color.magenta, bg = color.bg_magenta_nuanced } - highlight["@comment"] = { fg = color.fg_dim } - highlight["@tag.tsx"] = { fg = color.fg_main } - end, - }, - init = function() - vim.cmd([[colorscheme modus]]) - end, -} diff --git a/modules/nvim/config/lua/plugins/which-key.lua b/modules/nvim/config/lua/plugins/which-key.lua index 0982e0f..7e05765 100644 --- a/modules/nvim/config/lua/plugins/which-key.lua +++ b/modules/nvim/config/lua/plugins/which-key.lua @@ -21,12 +21,6 @@ return { desc = "Go to definition in other window", mode = "n", }, - { - "od", - "vsplit | lua vim.lsp.buf.definition()", - desc = "Go to definition in other window", - mode = "n", - }, { "b", group = "+buffer", mode = "n" }, { "bd",