From 2cbfe6946ae8da69fe7bc464cad9cac2aa906bd9 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Tue, 11 Aug 2026 17:39:01 +0200 Subject: [PATCH] updated theme --- colors/takemi.lua | 3 + lua/config/keymaps.lua | 16 ++ lua/plugins/init.lua | 24 +- lua/plugins/lsp.lua | 14 +- lua/plugins/tools.lua | 11 +- lua/plugins/ui.lua | 21 +- lua/takemi.lua | 482 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 526 insertions(+), 45 deletions(-) create mode 100644 colors/takemi.lua create mode 100644 lua/takemi.lua diff --git a/colors/takemi.lua b/colors/takemi.lua new file mode 100644 index 0000000..337040e --- /dev/null +++ b/colors/takemi.lua @@ -0,0 +1,3 @@ +-- Loader. The palette and highlight table live in lua/takemi.lua so that +-- `require("takemi")` works for the lualine theme too. +require("takemi").load() diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua index 659c6b5..1d7a2ff 100644 --- a/lua/config/keymaps.lua +++ b/lua/config/keymaps.lua @@ -2,6 +2,10 @@ vim.keymap.set("n", "w", "write", { desc = "Save file" }) vim.keymap.set("n", "q", "quitall", { desc = "Exit Neovim" }) +-- marp configuration +vim.keymap.set("n", "MT", "MarpToggle", { noremap = true, silent = true }) +vim.keymap.set("n", "MS", "MarpStatus", { noremap = true, silent = true }) + -- Window Navigation vim.keymap.set("n", "h", "wincmd h", { desc = "Move to left split" }) vim.keymap.set("n", "l", "wincmd l", { desc = "Move to right split" }) @@ -24,3 +28,15 @@ end, { desc = "Next error" }) vim.keymap.set("n", "[e", function() vim.diagnostic.goto_prev({ severity = vim.diagnostic.severity.ERROR }) end, { desc = "Previous error" }) + +-- Dynamic LSP Keymaps (Loaded only when LSP attaches to a buffer) +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(event) + local opts = { buffer = event.buf } + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) + vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) + end, +}) diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index b6e45e6..eb9f35a 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -2,10 +2,11 @@ require("mini.deps").setup() local add = MiniDeps.add -- UI & Theming -add({ source = "catppuccin/nvim", name = "catppuccin" }) +-- The colourscheme is local (colors/takemi.lua), so there is no theme plugin. add({ source = "nvim-lualine/lualine.nvim" }) add({ source = "lewis6991/gitsigns.nvim" }) add({ source = "folke/which-key.nvim" }) +add({ source = "mpas/marp-nvim" }) -- Utility & Editing add({ source = "akinsho/toggleterm.nvim" }) @@ -24,25 +25,24 @@ add({ source = "mfussenegger/nvim-lint" }) add({ source = "seblyng/roslyn.nvim" }) add({ source = "tris203/rzls.nvim" }) add({ source = "https://git.narl.io/nvrl/mould-rs", checkout = "main" }) +add({ source = "ray-x/go.nvim" }) -- Autocompletion add({ - source = "Saghen/blink.cmp", - depends = { "rafamadriz/friendly-snippets" }, - hooks = { - post_install = function(ctx) - vim.cmd("!cd " .. ctx.path .. " && cargo build --release") - end, - post_checkout = function(ctx) - vim.cmd("!cd " .. ctx.path .. " && cargo build --release") - end, - }, + source = "saghen/blink.cmp", + depends = {'saghen/blink.lib', "rafamadriz/friendly-snippets" }, + hooks = { + -- NOTE: v2 also changed how the rust binary is built! + -- Replace the old 'cargo build --release' string with the new Lua API: + post_install = function() require('blink.cmp').build():pwait(60000) end, + post_checkout = function() require('blink.cmp').build():pwait(60000) end, + } }) -- Treesitter add({ source = "nvim-treesitter/nvim-treesitter", - checkout = "master", + checkout = "main", monitor = "main", hooks = { post_checkout = function() diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index 05a5b3b..d2676fb 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -75,6 +75,9 @@ require("roslyn").setup({ config = { handlers = require("rzls.roslyn_handlers") }, }) +-- Dedicated go Setup +require('go').setup() + -- Diagnostics Configuration local sign = function(opts) vim.fn.sign_define(opts.name, { texthl = opts.name, text = opts.text, numhl = "" }) @@ -135,14 +138,3 @@ require("lint").linters_by_ft = { python = { "flake8" }, } --- Dynamic LSP Keymaps (Loaded only when LSP attaches to a buffer) -vim.api.nvim_create_autocmd("LspAttach", { - callback = function(event) - local opts = { buffer = event.buf } - vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) - vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) - vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) - vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) - vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) - end, -}) diff --git a/lua/plugins/tools.lua b/lua/plugins/tools.lua index 393a12a..2a42ae8 100644 --- a/lua/plugins/tools.lua +++ b/lua/plugins/tools.lua @@ -53,11 +53,10 @@ require("typst-preview").setup({ end, }) +require("marp").setup({}) + -- Treesitter -require("nvim-treesitter.configs").setup({ - ensure_installed = { "lua", "rust", "toml", "c_sharp", "python", "typst", "markdown", "markdown_inline" }, - auto_install = true, - highlight = { enable = true }, - ident = { enable = true }, - rainbow = { enable = true, extended_mode = true }, +vim.api.nvim_create_autocmd('FileType', { + pattern = { '' }, + callback = function() vim.treesitter.start() end, }) diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua index ab28441..206ab6a 100644 --- a/lua/plugins/ui.lua +++ b/lua/plugins/ui.lua @@ -1,18 +1,7 @@ --- Catppuccin Theme -require("catppuccin").setup({ - flavour = "auto", - background = { light = "latte", dark = "mocha" }, - transparent_background = false, - show_end_of_buffer = false, - integrations = { - cmp = true, - gitsigns = true, - nvimtree = true, - treesitter = true, - mini = { enabled = true }, - }, -}) -vim.cmd.colorscheme("catppuccin") +-- Takemi Theme — lives in colors/takemi.lua, shares its palette with +-- ~/.config/quickshell/config/Theme.qml and ~/.config/alacritty/takemi.toml. +vim.o.termguicolors = true +vim.cmd.colorscheme("takemi") -- Git Signs require("gitsigns").setup() @@ -35,7 +24,7 @@ end require("lualine").setup({ options = { - theme = require("catppuccin.utils.lualine")(), + theme = require("takemi").lualine(), component_separators = { left = "|", right = "|" }, section_separators = { left = "", right = "" }, globalstatus = true, diff --git a/lua/takemi.lua b/lua/takemi.lua new file mode 100644 index 0000000..9f00c3a --- /dev/null +++ b/lua/takemi.lua @@ -0,0 +1,482 @@ +-- Takemi — matched to ~/.config/quickshell/config/Theme.qml and +-- ~/.config/alacritty/takemi.toml. +-- +-- Same rules as the shell: near-black ground, white text, crimson as the only +-- saturated colour. Crimson always means one of two things and never anything +-- else — this construct is load-bearing (keyword, type, active), or it is +-- wrong (error, diff-delete). Everything else is white, grey, or a hue pulled +-- so far down it reads as grey with a temperature. +-- +-- Syntax needs more separation than a shell bar does, so the muted ANSI hues +-- from takemi.toml do survive here. They are deliberately dull. If a token +-- catches your eye and it isn't red, the palette has drifted. + +local M = {} + +local p = { + ink = "#000000", + + base = "#0a0a0c", + mantle = "#0d0d10", + surface = "#141418", + surface_alt = "#1c1c22", + overlay = "#26262e", + outline = "#3a3a44", + + text = "#ffffff", + subtext = "#c8c8ce", + muted = "#6b6b70", + faint = "#4a4a52", + + -- THE KNOB. Keep in step with `accent` in Theme.qml and `$accent` in + -- hypr/modules/takemi.conf. + accent = "#ff2d40", + accent_soft = "#ff6b78", + accent_dim = "#8f1826", + accent_bg = "#2a1016", -- crimson washed into the ground, for line/diff fills + + green = "#7f9b6a", + green_br = "#9bb886", + green_bg = "#161c14", + yellow = "#d6a24a", + yellow_br = "#f0c070", + yellow_bg = "#221a10", + blue = "#6f7d99", + blue_br = "#8d9bb8", + blue_bg = "#14181f", + magenta = "#c0566d", + magenta_br = "#e07a8e", + cyan = "#7f9aa0", + cyan_br = "#9db8bd", +} + +M.palette = p + +local function hl(groups) + for name, spec in pairs(groups) do + vim.api.nvim_set_hl(0, name, spec) + end +end + +function M.load(opts) + opts = opts or {} + local transparent = opts.transparent or false + local bg = transparent and "NONE" or p.base + + vim.cmd("hi clear") + if vim.fn.exists("syntax_on") == 1 then + vim.cmd("syntax reset") + end + vim.o.background = "dark" + vim.g.colors_name = "takemi" + + -- :terminal and anything that reads terminal_color_*. Mirrors takemi.toml + -- slot for slot so a shell inside nvim looks like a shell outside it. + local ansi = { + p.surface, p.accent, p.green, p.yellow, p.blue, p.magenta, p.cyan, p.subtext, + p.outline, p.accent_soft, p.green_br, p.yellow_br, p.blue_br, p.magenta_br, + p.cyan_br, p.text, + } + for i, c in ipairs(ansi) do + vim.g["terminal_color_" .. (i - 1)] = c + end + + hl({ + -- ---------------------------------------------------------------- editor + Normal = { fg = p.text, bg = bg }, + NormalNC = { fg = p.subtext, bg = bg }, + NormalFloat = { fg = p.text, bg = p.surface }, + -- Floats get a hard crimson keyline, not a soft border. Same move as the + -- shell's panels. + FloatBorder = { fg = p.accent, bg = p.surface }, + FloatTitle = { fg = p.ink, bg = p.accent, bold = true }, + FloatFooter = { fg = p.muted, bg = p.surface }, + + Cursor = { fg = p.ink, bg = p.accent }, + lCursor = { fg = p.ink, bg = p.accent }, + CursorIM = { fg = p.ink, bg = p.accent }, + TermCursor = { fg = p.ink, bg = p.accent }, + CursorLine = { bg = p.surface }, + CursorColumn = { bg = p.surface }, + ColorColumn = { bg = p.mantle }, + -- The current line number is crimson: it is the one "you are here" signal + -- in the buffer, which is exactly what the accent is for. + CursorLineNr = { fg = p.accent, bold = true }, + LineNr = { fg = p.faint }, + LineNrAbove = { fg = p.faint }, + LineNrBelow = { fg = p.faint }, + SignColumn = { fg = p.muted, bg = bg }, + FoldColumn = { fg = p.faint, bg = bg }, + Folded = { fg = p.muted, bg = p.surface }, + + -- Selection is a solid crimson block with the text punched out, matching + -- [colors.selection] in takemi.toml. + Visual = { fg = p.ink, bg = p.accent }, + VisualNOS = { fg = p.ink, bg = p.accent_dim }, + + Search = { fg = p.ink, bg = p.subtext }, + IncSearch = { fg = p.ink, bg = p.accent }, + CurSearch = { fg = p.ink, bg = p.accent }, + Substitute = { fg = p.ink, bg = p.accent_soft }, + MatchParen = { fg = p.accent, bold = true, underline = true }, + + -- Splits are a black keyline, never a grey gutter. + WinSeparator = { fg = p.ink, bg = bg }, + VertSplit = { fg = p.ink, bg = bg }, + + Pmenu = { fg = p.subtext, bg = p.surface }, + PmenuSel = { fg = p.ink, bg = p.accent, bold = true }, + PmenuKind = { fg = p.blue, bg = p.surface }, + PmenuKindSel = { fg = p.ink, bg = p.accent }, + PmenuExtra = { fg = p.muted, bg = p.surface }, + PmenuExtraSel = { fg = p.ink, bg = p.accent }, + PmenuSbar = { bg = p.surface_alt }, + PmenuThumb = { bg = p.accent }, + PmenuMatch = { fg = p.accent, bold = true }, + PmenuMatchSel = { fg = p.ink, bg = p.accent, bold = true }, + WildMenu = { fg = p.ink, bg = p.accent }, + + StatusLine = { fg = p.subtext, bg = p.surface }, + StatusLineNC = { fg = p.muted, bg = p.mantle }, + TabLine = { fg = p.muted, bg = p.mantle }, + TabLineFill = { bg = p.mantle }, + TabLineSel = { fg = p.ink, bg = p.accent, bold = true }, + WinBar = { fg = p.subtext, bg = bg, bold = true }, + WinBarNC = { fg = p.muted, bg = bg }, + + MsgArea = { fg = p.subtext }, + MsgSeparator = { fg = p.ink, bg = p.surface }, + ModeMsg = { fg = p.accent, bold = true }, + MoreMsg = { fg = p.text, bold = true }, + Question = { fg = p.text }, + ErrorMsg = { fg = p.accent, bold = true }, + WarningMsg = { fg = p.yellow }, + Title = { fg = p.text, bold = true }, + Directory = { fg = p.text, bold = true }, + Conceal = { fg = p.muted }, + NonText = { fg = p.outline }, + EndOfBuffer = { fg = bg == "NONE" and p.outline or bg }, + SpecialKey = { fg = p.outline }, + Whitespace = { fg = p.surface_alt }, + QuickFixLine = { bg = p.surface_alt, bold = true }, + + SpellBad = { sp = p.accent, undercurl = true }, + SpellCap = { sp = p.yellow, undercurl = true }, + SpellLocal = { sp = p.cyan, undercurl = true }, + SpellRare = { sp = p.magenta, undercurl = true }, + + -- ---------------------------------------------------------------- syntax + -- Crimson is spent only on the words that structure the program. + Comment = { fg = p.muted, italic = true }, + Constant = { fg = p.subtext }, + String = { fg = p.green }, + Character = { fg = p.green }, + Number = { fg = p.yellow }, + Boolean = { fg = p.accent_soft }, + Float = { fg = p.yellow }, + + Identifier = { fg = p.text }, + Function = { fg = p.text, bold = true }, + + Statement = { fg = p.accent }, + Conditional = { fg = p.accent }, + Repeat = { fg = p.accent }, + Label = { fg = p.accent }, + Operator = { fg = p.subtext }, + Keyword = { fg = p.accent }, + Exception = { fg = p.accent }, + + PreProc = { fg = p.magenta }, + Include = { fg = p.accent }, + Define = { fg = p.magenta }, + Macro = { fg = p.magenta }, + PreCondit = { fg = p.magenta }, + + Type = { fg = p.accent_soft }, + StorageClass = { fg = p.accent }, + Structure = { fg = p.accent_soft }, + Typedef = { fg = p.accent_soft }, + + Special = { fg = p.cyan }, + SpecialChar = { fg = p.cyan_br }, + Tag = { fg = p.accent }, + Delimiter = { fg = p.muted }, + SpecialComment = { fg = p.subtext, italic = true }, + Debug = { fg = p.accent }, + + Underlined = { underline = true }, + Ignore = { fg = p.faint }, + Error = { fg = p.accent, bold = true }, + Todo = { fg = p.ink, bg = p.accent, bold = true }, + Added = { fg = p.green }, + Changed = { fg = p.yellow }, + Removed = { fg = p.accent }, + + -- ------------------------------------------------------------ treesitter + ["@variable"] = { fg = p.text }, + ["@variable.builtin"] = { fg = p.accent_soft, italic = true }, + ["@variable.parameter"] = { fg = p.subtext, italic = true }, + ["@variable.member"] = { fg = p.blue_br }, + + ["@constant"] = { fg = p.subtext }, + ["@constant.builtin"] = { fg = p.accent_soft }, + ["@constant.macro"] = { fg = p.magenta }, + + ["@module"] = { fg = p.subtext }, + ["@label"] = { fg = p.accent }, + + ["@string"] = { fg = p.green }, + ["@string.escape"] = { fg = p.cyan_br, bold = true }, + ["@string.special"] = { fg = p.cyan }, + ["@string.special.url"] = { fg = p.cyan, underline = true }, + ["@character"] = { fg = p.green }, + ["@number"] = { fg = p.yellow }, + ["@boolean"] = { fg = p.accent_soft }, + ["@float"] = { fg = p.yellow }, + + ["@function"] = { fg = p.text, bold = true }, + ["@function.builtin"] = { fg = p.text, bold = true, italic = true }, + ["@function.macro"] = { fg = p.magenta, bold = true }, + ["@function.method"] = { fg = p.text, bold = true }, + ["@constructor"] = { fg = p.accent_soft }, + + ["@keyword"] = { fg = p.accent }, + ["@keyword.function"] = { fg = p.accent }, + ["@keyword.operator"] = { fg = p.accent }, + ["@keyword.return"] = { fg = p.accent, bold = true }, + ["@keyword.import"] = { fg = p.accent }, + ["@keyword.exception"] = { fg = p.accent }, + ["@keyword.conditional"] = { fg = p.accent }, + ["@keyword.repeat"] = { fg = p.accent }, + + ["@operator"] = { fg = p.subtext }, + ["@punctuation.delimiter"] = { fg = p.muted }, + ["@punctuation.bracket"] = { fg = p.muted }, + ["@punctuation.special"] = { fg = p.accent }, + + ["@type"] = { fg = p.accent_soft }, + ["@type.builtin"] = { fg = p.accent_soft, italic = true }, + ["@type.definition"] = { fg = p.accent_soft }, + ["@attribute"] = { fg = p.magenta }, + ["@property"] = { fg = p.blue_br }, + + ["@comment"] = { fg = p.muted, italic = true }, + ["@comment.todo"] = { fg = p.ink, bg = p.accent, bold = true }, + ["@comment.note"] = { fg = p.ink, bg = p.subtext, bold = true }, + ["@comment.warning"] = { fg = p.ink, bg = p.yellow, bold = true }, + ["@comment.error"] = { fg = p.ink, bg = p.accent, bold = true }, + + ["@tag"] = { fg = p.accent }, + ["@tag.builtin"] = { fg = p.accent }, + ["@tag.attribute"] = { fg = p.blue_br, italic = true }, + ["@tag.delimiter"] = { fg = p.muted }, + + ["@diff.plus"] = { fg = p.green }, + ["@diff.minus"] = { fg = p.accent }, + ["@diff.delta"] = { fg = p.yellow }, + + -- markdown / prose + ["@markup.heading"] = { fg = p.text, bold = true }, + ["@markup.heading.1"] = { fg = p.accent, bold = true }, + ["@markup.heading.2"] = { fg = p.text, bold = true }, + ["@markup.heading.3"] = { fg = p.subtext, bold = true }, + ["@markup.heading.4"] = { fg = p.subtext }, + ["@markup.heading.5"] = { fg = p.muted }, + ["@markup.heading.6"] = { fg = p.muted }, + ["@markup.strong"] = { fg = p.text, bold = true }, + ["@markup.italic"] = { italic = true }, + ["@markup.strikethrough"] = { strikethrough = true }, + ["@markup.underline"] = { underline = true }, + ["@markup.link"] = { fg = p.accent }, + ["@markup.link.url"] = { fg = p.cyan, underline = true }, + ["@markup.link.label"] = { fg = p.accent }, + ["@markup.raw"] = { fg = p.green }, + ["@markup.raw.block"] = { fg = p.subtext, bg = p.surface }, + ["@markup.quote"] = { fg = p.muted, italic = true }, + ["@markup.list"] = { fg = p.accent }, + ["@markup.list.checked"] = { fg = p.green }, + ["@markup.list.unchecked"] = { fg = p.muted }, + + -- ------------------------------------------------------------------- lsp + ["@lsp.type.class"] = { link = "@type" }, + ["@lsp.type.enum"] = { link = "@type" }, + ["@lsp.type.interface"] = { link = "@type" }, + ["@lsp.type.struct"] = { link = "@type" }, + ["@lsp.type.namespace"] = { link = "@module" }, + ["@lsp.type.parameter"] = { link = "@variable.parameter" }, + ["@lsp.type.property"] = { link = "@property" }, + ["@lsp.type.variable"] = { link = "@variable" }, + ["@lsp.type.enumMember"] = { link = "@constant" }, + ["@lsp.type.decorator"] = { link = "@attribute" }, + ["@lsp.type.macro"] = { link = "@function.macro" }, + ["@lsp.mod.deprecated"] = { strikethrough = true }, + ["@lsp.mod.readonly"] = { link = "@constant" }, + + LspReferenceText = { bg = p.surface_alt }, + LspReferenceRead = { bg = p.surface_alt }, + LspReferenceWrite = { bg = p.surface_alt, underline = true }, + LspSignatureActiveParameter = { fg = p.ink, bg = p.accent, bold = true }, + LspInlayHint = { fg = p.faint, bg = p.mantle, italic = true }, + LspCodeLens = { fg = p.faint, italic = true }, + LspInfoBorder = { fg = p.accent, bg = p.surface }, + + -- Diagnostics. Error is crimson because crimson also means "wrong"; warn + -- and hint stay dull so an error is never one of four equal shouts. + DiagnosticError = { fg = p.accent }, + DiagnosticWarn = { fg = p.yellow }, + DiagnosticInfo = { fg = p.blue_br }, + DiagnosticHint = { fg = p.cyan }, + DiagnosticOk = { fg = p.green }, + DiagnosticVirtualTextError = { fg = p.accent, bg = p.accent_bg }, + DiagnosticVirtualTextWarn = { fg = p.yellow, bg = p.yellow_bg }, + DiagnosticVirtualTextInfo = { fg = p.blue_br, bg = p.blue_bg }, + DiagnosticVirtualTextHint = { fg = p.cyan, bg = p.blue_bg }, + DiagnosticVirtualTextOk = { fg = p.green, bg = p.green_bg }, + DiagnosticUnderlineError = { sp = p.accent, undercurl = true }, + DiagnosticUnderlineWarn = { sp = p.yellow, undercurl = true }, + DiagnosticUnderlineInfo = { sp = p.blue_br, undercurl = true }, + DiagnosticUnderlineHint = { sp = p.cyan, undercurl = true }, + DiagnosticUnderlineOk = { sp = p.green, undercurl = true }, + DiagnosticDeprecated = { sp = p.muted, strikethrough = true }, + DiagnosticUnnecessary = { fg = p.faint }, + + -- ------------------------------------------------------------------ diff + DiffAdd = { fg = p.green_br, bg = p.green_bg }, + DiffChange = { bg = p.yellow_bg }, + DiffDelete = { fg = p.accent, bg = p.accent_bg }, + DiffText = { fg = p.yellow_br, bg = p.surface_alt }, + + -- --------------------------------------------------------------- gitsigns + GitSignsAdd = { fg = p.green }, + GitSignsChange = { fg = p.yellow }, + GitSignsDelete = { fg = p.accent }, + GitSignsAddNr = { fg = p.green }, + GitSignsChangeNr = { fg = p.yellow }, + GitSignsDeleteNr = { fg = p.accent }, + GitSignsAddLn = { bg = p.green_bg }, + GitSignsChangeLn = { bg = p.yellow_bg }, + GitSignsDeleteLn = { bg = p.accent_bg }, + GitSignsCurrentLineBlame = { fg = p.faint, italic = true }, + + -- --------------------------------------------------------------- blink.cmp + BlinkCmpMenu = { fg = p.subtext, bg = p.surface }, + BlinkCmpMenuBorder = { fg = p.accent, bg = p.surface }, + BlinkCmpMenuSelection = { fg = p.ink, bg = p.accent, bold = true }, + BlinkCmpScrollBarThumb = { bg = p.accent }, + BlinkCmpScrollBarGutter = { bg = p.surface_alt }, + BlinkCmpLabel = { fg = p.subtext }, + BlinkCmpLabelDeprecated = { fg = p.muted, strikethrough = true }, + BlinkCmpLabelMatch = { fg = p.accent, bold = true }, + BlinkCmpLabelDetail = { fg = p.muted }, + BlinkCmpLabelDescription = { fg = p.muted }, + BlinkCmpKind = { fg = p.blue_br }, + BlinkCmpSource = { fg = p.faint }, + BlinkCmpDoc = { fg = p.subtext, bg = p.surface }, + BlinkCmpDocBorder = { fg = p.accent, bg = p.surface }, + BlinkCmpDocSeparator = { fg = p.outline, bg = p.surface }, + BlinkCmpSignatureHelp = { fg = p.subtext, bg = p.surface }, + BlinkCmpSignatureHelpBorder = { fg = p.accent, bg = p.surface }, + BlinkCmpSignatureHelpActiveParameter = { fg = p.ink, bg = p.accent, bold = true }, + BlinkCmpGhostText = { fg = p.faint, italic = true }, + + -- --------------------------------------------------------------- which-key + WhichKey = { fg = p.accent, bold = true }, + WhichKeyGroup = { fg = p.text, bold = true }, + WhichKeyDesc = { fg = p.subtext }, + WhichKeySeparator = { fg = p.faint }, + WhichKeyFloat = { bg = p.surface }, + WhichKeyBorder = { fg = p.accent, bg = p.surface }, + WhichKeyTitle = { fg = p.ink, bg = p.accent, bold = true }, + WhichKeyValue = { fg = p.muted }, + + -- ------------------------------------------------------------------- mini + MiniIconsRed = { fg = p.accent }, + MiniIconsOrange = { fg = p.accent_soft }, + MiniIconsYellow = { fg = p.yellow }, + MiniIconsGreen = { fg = p.green }, + MiniIconsCyan = { fg = p.cyan }, + MiniIconsBlue = { fg = p.blue_br }, + MiniIconsPurple = { fg = p.magenta }, + MiniIconsGrey = { fg = p.subtext }, + + MiniStatuslineModeNormal = { fg = p.ink, bg = p.text, bold = true }, + MiniStatuslineModeInsert = { fg = p.ink, bg = p.accent, bold = true }, + MiniStatuslineModeVisual = { fg = p.ink, bg = p.accent_soft, bold = true }, + MiniStatuslineModeReplace = { fg = p.ink, bg = p.yellow, bold = true }, + MiniStatuslineModeCommand = { fg = p.ink, bg = p.subtext, bold = true }, + MiniStatuslineModeOther = { fg = p.ink, bg = p.cyan, bold = true }, + MiniStatuslineDevinfo = { fg = p.subtext, bg = p.surface_alt }, + MiniStatuslineFilename = { fg = p.subtext, bg = p.surface }, + MiniStatuslineInactive = { fg = p.muted, bg = p.mantle }, + + MiniPickBorder = { fg = p.accent, bg = p.surface }, + MiniPickMatchCurrent = { fg = p.ink, bg = p.accent }, + MiniPickMatchRanges = { fg = p.accent, bold = true }, + MiniPickPrompt = { fg = p.accent, bg = p.surface, bold = true }, + + -- ------------------------------------------------------- render-markdown + -- Only H1 gets the crimson bar. Deeper headings step down through greys so + -- a document has one focal point, the same way a panel does. + RenderMarkdownH1Bg = { fg = p.ink, bg = p.accent, bold = true }, + RenderMarkdownH2Bg = { fg = p.ink, bg = p.text, bold = true }, + RenderMarkdownH3Bg = { fg = p.text, bg = p.overlay, bold = true }, + RenderMarkdownH4Bg = { fg = p.subtext, bg = p.surface_alt }, + RenderMarkdownH5Bg = { fg = p.subtext, bg = p.surface }, + RenderMarkdownH6Bg = { fg = p.muted, bg = p.surface }, + RenderMarkdownCode = { bg = p.mantle }, + RenderMarkdownCodeInline = { fg = p.green, bg = p.surface }, + RenderMarkdownBullet = { fg = p.accent }, + RenderMarkdownQuote = { fg = p.outline }, + RenderMarkdownDash = { fg = p.outline }, + RenderMarkdownLink = { fg = p.cyan }, + RenderMarkdownTableHead = { fg = p.accent }, + RenderMarkdownTableRow = { fg = p.muted }, + RenderMarkdownSuccess = { fg = p.green }, + RenderMarkdownInfo = { fg = p.blue_br }, + RenderMarkdownHint = { fg = p.cyan }, + RenderMarkdownWarn = { fg = p.yellow }, + RenderMarkdownError = { fg = p.accent }, + + -- --------------------------------------------------------------- misc plugins + ToggleTerm1FloatBorder = { fg = p.accent, bg = p.surface }, + MasonHeader = { fg = p.ink, bg = p.accent, bold = true }, + MasonHighlight = { fg = p.accent }, + MasonHighlightBlock = { fg = p.ink, bg = p.accent }, + MasonHighlightBlockBold = { fg = p.ink, bg = p.accent, bold = true }, + MasonMuted = { fg = p.muted }, + MasonMutedBlock = { fg = p.subtext, bg = p.surface_alt }, + MasonError = { fg = p.accent }, + NvimTreeNormal = { fg = p.subtext, bg = p.mantle }, + NvimTreeRootFolder = { fg = p.accent, bold = true }, + NvimTreeFolderIcon = { fg = p.subtext }, + NvimTreeOpenedFile = { fg = p.text, bold = true }, + NvimTreeGitDirty = { fg = p.yellow }, + NvimTreeGitNew = { fg = p.green }, + NvimTreeGitDeleted = { fg = p.accent }, + NvimTreeIndentMarker = { fg = p.surface_alt }, + NvimTreeWinSeparator = { fg = p.ink, bg = p.mantle }, + }) +end + +-- Lualine theme. Mode is the only place the bar carries hue, and it is the +-- accent in the modes where you can actually change the buffer. +function M.lualine() + local outer = function(c) return { fg = p.ink, bg = c, gui = "bold" } end + local mid = { fg = p.subtext, bg = p.surface_alt } + local inner = { fg = p.muted, bg = p.surface } + return { + normal = { a = outer(p.text), b = mid, c = inner }, + insert = { a = outer(p.accent), b = mid, c = inner }, + visual = { a = outer(p.accent_soft), b = mid, c = inner }, + replace = { a = outer(p.yellow), b = mid, c = inner }, + command = { a = outer(p.subtext), b = mid, c = inner }, + terminal = { a = outer(p.cyan), b = mid, c = inner }, + inactive = { + a = { fg = p.muted, bg = p.mantle }, + b = { fg = p.muted, bg = p.mantle }, + c = { fg = p.faint, bg = p.mantle }, + }, + } +end + +return M