Compare commits
1
Commits
8d657d0f8d
...
2cbfe6946a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cbfe6946a |
@@ -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()
|
||||||
@@ -2,6 +2,10 @@
|
|||||||
vim.keymap.set("n", "<leader>w", "<cmd>write<cr>", { desc = "Save file" })
|
vim.keymap.set("n", "<leader>w", "<cmd>write<cr>", { desc = "Save file" })
|
||||||
vim.keymap.set("n", "<leader>q", "<cmd>quitall<cr>", { desc = "Exit Neovim" })
|
vim.keymap.set("n", "<leader>q", "<cmd>quitall<cr>", { desc = "Exit Neovim" })
|
||||||
|
|
||||||
|
-- marp configuration
|
||||||
|
vim.keymap.set("n", "<leader>MT", "<cmd>MarpToggle<cr>", { noremap = true, silent = true })
|
||||||
|
vim.keymap.set("n", "<leader>MS", "<cmd>MarpStatus<cr>", { noremap = true, silent = true })
|
||||||
|
|
||||||
-- Window Navigation
|
-- Window Navigation
|
||||||
vim.keymap.set("n", "<leader>h", "<cmd>wincmd h<cr>", { desc = "Move to left split" })
|
vim.keymap.set("n", "<leader>h", "<cmd>wincmd h<cr>", { desc = "Move to left split" })
|
||||||
vim.keymap.set("n", "<leader>l", "<cmd>wincmd l<cr>", { desc = "Move to right split" })
|
vim.keymap.set("n", "<leader>l", "<cmd>wincmd l<cr>", { desc = "Move to right split" })
|
||||||
@@ -24,3 +28,15 @@ end, { desc = "Next error" })
|
|||||||
vim.keymap.set("n", "[e", function()
|
vim.keymap.set("n", "[e", function()
|
||||||
vim.diagnostic.goto_prev({ severity = vim.diagnostic.severity.ERROR })
|
vim.diagnostic.goto_prev({ severity = vim.diagnostic.severity.ERROR })
|
||||||
end, { desc = "Previous 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", "<leader>rn", vim.lsp.buf.rename, opts)
|
||||||
|
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
|
||||||
|
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|||||||
+11
-11
@@ -2,10 +2,11 @@ require("mini.deps").setup()
|
|||||||
local add = MiniDeps.add
|
local add = MiniDeps.add
|
||||||
|
|
||||||
-- UI & Theming
|
-- 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 = "nvim-lualine/lualine.nvim" })
|
||||||
add({ source = "lewis6991/gitsigns.nvim" })
|
add({ source = "lewis6991/gitsigns.nvim" })
|
||||||
add({ source = "folke/which-key.nvim" })
|
add({ source = "folke/which-key.nvim" })
|
||||||
|
add({ source = "mpas/marp-nvim" })
|
||||||
|
|
||||||
-- Utility & Editing
|
-- Utility & Editing
|
||||||
add({ source = "akinsho/toggleterm.nvim" })
|
add({ source = "akinsho/toggleterm.nvim" })
|
||||||
@@ -24,25 +25,24 @@ add({ source = "mfussenegger/nvim-lint" })
|
|||||||
add({ source = "seblyng/roslyn.nvim" })
|
add({ source = "seblyng/roslyn.nvim" })
|
||||||
add({ source = "tris203/rzls.nvim" })
|
add({ source = "tris203/rzls.nvim" })
|
||||||
add({ source = "https://git.narl.io/nvrl/mould-rs", checkout = "main" })
|
add({ source = "https://git.narl.io/nvrl/mould-rs", checkout = "main" })
|
||||||
|
add({ source = "ray-x/go.nvim" })
|
||||||
|
|
||||||
-- Autocompletion
|
-- Autocompletion
|
||||||
add({
|
add({
|
||||||
source = "Saghen/blink.cmp",
|
source = "saghen/blink.cmp",
|
||||||
depends = { "rafamadriz/friendly-snippets" },
|
depends = {'saghen/blink.lib', "rafamadriz/friendly-snippets" },
|
||||||
hooks = {
|
hooks = {
|
||||||
post_install = function(ctx)
|
-- NOTE: v2 also changed how the rust binary is built!
|
||||||
vim.cmd("!cd " .. ctx.path .. " && cargo build --release")
|
-- Replace the old 'cargo build --release' string with the new Lua API:
|
||||||
end,
|
post_install = function() require('blink.cmp').build():pwait(60000) end,
|
||||||
post_checkout = function(ctx)
|
post_checkout = function() require('blink.cmp').build():pwait(60000) end,
|
||||||
vim.cmd("!cd " .. ctx.path .. " && cargo build --release")
|
}
|
||||||
end,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Treesitter
|
-- Treesitter
|
||||||
add({
|
add({
|
||||||
source = "nvim-treesitter/nvim-treesitter",
|
source = "nvim-treesitter/nvim-treesitter",
|
||||||
checkout = "master",
|
checkout = "main",
|
||||||
monitor = "main",
|
monitor = "main",
|
||||||
hooks = {
|
hooks = {
|
||||||
post_checkout = function()
|
post_checkout = function()
|
||||||
|
|||||||
+3
-11
@@ -75,6 +75,9 @@ require("roslyn").setup({
|
|||||||
config = { handlers = require("rzls.roslyn_handlers") },
|
config = { handlers = require("rzls.roslyn_handlers") },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Dedicated go Setup
|
||||||
|
require('go').setup()
|
||||||
|
|
||||||
-- Diagnostics Configuration
|
-- Diagnostics Configuration
|
||||||
local sign = function(opts)
|
local sign = function(opts)
|
||||||
vim.fn.sign_define(opts.name, { texthl = opts.name, text = opts.text, numhl = "" })
|
vim.fn.sign_define(opts.name, { texthl = opts.name, text = opts.text, numhl = "" })
|
||||||
@@ -135,14 +138,3 @@ require("lint").linters_by_ft = {
|
|||||||
python = { "flake8" },
|
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", "<leader>rn", vim.lsp.buf.rename, opts)
|
|
||||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
|
|
||||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -53,11 +53,10 @@ require("typst-preview").setup({
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require("marp").setup({})
|
||||||
|
|
||||||
-- Treesitter
|
-- Treesitter
|
||||||
require("nvim-treesitter.configs").setup({
|
vim.api.nvim_create_autocmd('FileType', {
|
||||||
ensure_installed = { "lua", "rust", "toml", "c_sharp", "python", "typst", "markdown", "markdown_inline" },
|
pattern = { '<filetype>' },
|
||||||
auto_install = true,
|
callback = function() vim.treesitter.start() end,
|
||||||
highlight = { enable = true },
|
|
||||||
ident = { enable = true },
|
|
||||||
rainbow = { enable = true, extended_mode = true },
|
|
||||||
})
|
})
|
||||||
|
|||||||
+5
-16
@@ -1,18 +1,7 @@
|
|||||||
-- Catppuccin Theme
|
-- Takemi Theme — lives in colors/takemi.lua, shares its palette with
|
||||||
require("catppuccin").setup({
|
-- ~/.config/quickshell/config/Theme.qml and ~/.config/alacritty/takemi.toml.
|
||||||
flavour = "auto",
|
vim.o.termguicolors = true
|
||||||
background = { light = "latte", dark = "mocha" },
|
vim.cmd.colorscheme("takemi")
|
||||||
transparent_background = false,
|
|
||||||
show_end_of_buffer = false,
|
|
||||||
integrations = {
|
|
||||||
cmp = true,
|
|
||||||
gitsigns = true,
|
|
||||||
nvimtree = true,
|
|
||||||
treesitter = true,
|
|
||||||
mini = { enabled = true },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
vim.cmd.colorscheme("catppuccin")
|
|
||||||
|
|
||||||
-- Git Signs
|
-- Git Signs
|
||||||
require("gitsigns").setup()
|
require("gitsigns").setup()
|
||||||
@@ -35,7 +24,7 @@ end
|
|||||||
|
|
||||||
require("lualine").setup({
|
require("lualine").setup({
|
||||||
options = {
|
options = {
|
||||||
theme = require("catppuccin.utils.lualine")(),
|
theme = require("takemi").lualine(),
|
||||||
component_separators = { left = "|", right = "|" },
|
component_separators = { left = "|", right = "|" },
|
||||||
section_separators = { left = "", right = "" },
|
section_separators = { left = "", right = "" },
|
||||||
globalstatus = true,
|
globalstatus = true,
|
||||||
|
|||||||
+482
@@ -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
|
||||||
Reference in New Issue
Block a user