-- Acme colorscheme for Neovim -- Authentic Plan 9 Acme editor aesthetic: monochrome on cream -- No syntax highlighting — true to how Acme actually works -- Based on dookie.nvim by Jose Esparza (pebeto/dookie.nvim) local M = {} local colors = { fg = "#000000", fg_dim = "#b7b19c", bg = "#ffffea", bg_dim = "#ffffca", bg_dark = "#eeee9e", cursor = "#98ce8f", tagbar = "#aeeeee", tagbar_inactive = "#eaffff", error = "#b85c57", warn = "#8f7634", info = "#57864e", hint = "#2a8dc5", git_add = "#57864e", git_change = "#8f7634", git_delete = "#b85c57", diff_add = "#d5ebd0", diff_delete = "#ebd0d0", diff_change = "#ebe8d0", diff_text = "#d8d5b0", } function M.setup() vim.cmd("hi clear") if vim.fn.exists("syntax_on") then vim.cmd("syntax reset") end vim.o.background = "light" vim.g.colors_name = "acme" local hi = function(group, opts) vim.api.nvim_set_hl(0, group, opts) end -- Editor hi("Normal", { fg = colors.fg, bg = colors.bg }) hi("NormalFloat", { fg = colors.fg, bg = colors.bg }) hi("FloatBorder", { fg = colors.fg, bg = colors.bg }) hi("Cursor", { bg = colors.cursor }) hi("CursorLine", { bg = colors.bg_dim }) hi("CursorLineNr", { fg = colors.fg, bg = colors.bg_dim }) hi("CursorColumn", { bg = colors.bg_dim }) hi("LineNr", { fg = colors.fg, bg = colors.bg_dim }) hi("SignColumn", { bg = colors.bg_dim }) hi("ColorColumn", { bg = colors.bg_dim }) hi("VertSplit", { fg = colors.bg_dark, bg = colors.bg }) hi("WinSeparator", { fg = colors.bg_dark, bg = colors.bg }) hi("Folded", { fg = colors.fg, bg = colors.bg_dim }) hi("FoldColumn", { fg = colors.fg, bg = colors.bg_dim }) hi("NonText", { fg = colors.fg_dim }) hi("SpecialKey", { fg = colors.fg_dim }) hi("EndOfBuffer", { fg = colors.bg_dim }) hi("MatchParen", { fg = colors.fg, bg = colors.bg_dark, underline = true }) hi("Directory", { fg = colors.fg, bold = true }) hi("Title", { fg = colors.fg, bold = true }) hi("Conceal", { fg = colors.fg_dim }) -- Selection hi("Visual", { bg = colors.bg_dark }) hi("VisualNOS", { bg = colors.bg_dark }) -- Search hi("Search", { fg = colors.fg, bg = colors.bg_dim, bold = true }) hi("IncSearch", { fg = colors.fg, bg = colors.bg_dark, bold = true }) hi("CurSearch", { fg = colors.fg, bg = colors.bg_dark, bold = true }) -- Spell hi("SpellBad", { undercurl = true, sp = colors.error }) hi("SpellCap", { undercurl = true, sp = colors.info }) hi("SpellRare", { undercurl = true, sp = colors.hint }) hi("SpellLocal", { undercurl = true, sp = colors.warn }) -- Statusline (Acme tag bar cyan) hi("StatusLine", { fg = colors.fg, bg = colors.tagbar, bold = true }) hi("StatusLineNC", { fg = colors.fg, bg = colors.tagbar_inactive }) hi("TabLine", { fg = colors.fg, bg = colors.bg_dim }) hi("TabLineFill", { fg = colors.fg, bg = colors.bg_dim }) hi("TabLineSel", { fg = colors.fg, bg = colors.bg, bold = true }) hi("WinBar", { fg = colors.fg, bg = colors.bg }) hi("WinBarNC", { fg = colors.fg, bg = colors.bg_dim }) -- Popup menu hi("Pmenu", { fg = colors.fg, bg = colors.bg_dim }) hi("PmenuSel", { fg = colors.fg, bg = colors.bg_dim, bold = true }) hi("PmenuSbar", { bg = colors.bg_dim }) hi("PmenuThumb", { bg = colors.fg }) -- Messages hi("ErrorMsg", { fg = colors.error, bold = true }) hi("WarningMsg", { fg = colors.warn, bold = true }) hi("ModeMsg", { fg = colors.fg, bold = true }) hi("MoreMsg", { fg = colors.fg, bold = true }) hi("Question", { fg = colors.fg, bold = true }) -- Diagnostics hi("DiagnosticError", { fg = colors.error }) hi("DiagnosticWarn", { fg = colors.warn }) hi("DiagnosticInfo", { fg = colors.info }) hi("DiagnosticHint", { fg = colors.hint }) hi("DiagnosticUnderlineError", { undercurl = true, sp = colors.error }) hi("DiagnosticUnderlineWarn", { undercurl = true, sp = colors.warn }) hi("DiagnosticUnderlineInfo", { undercurl = true, sp = colors.info }) hi("DiagnosticUnderlineHint", { undercurl = true, sp = colors.hint }) -- Diff hi("DiffAdd", { bg = colors.diff_add }) hi("DiffDelete", { bg = colors.diff_delete }) hi("DiffChange", { bg = colors.diff_change }) hi("DiffText", { bg = colors.diff_text }) -- Syntax (monochrome — the Acme way) hi("Comment", { fg = colors.fg, bold = true }) hi("Constant", { fg = colors.fg }) hi("String", { fg = colors.fg, bold = true }) hi("Character", { fg = colors.fg, bold = true }) hi("Number", { fg = colors.fg }) hi("Boolean", { fg = colors.fg }) hi("Float", { fg = colors.fg }) hi("Identifier", { fg = colors.fg }) hi("Function", { fg = colors.fg }) hi("Statement", { fg = colors.fg }) hi("Conditional", { fg = colors.fg }) hi("Repeat", { fg = colors.fg }) hi("Label", { fg = colors.fg }) hi("Operator", { fg = colors.fg }) hi("Keyword", { fg = colors.fg }) hi("Exception", { fg = colors.fg }) hi("PreProc", { fg = colors.fg }) hi("Include", { fg = colors.fg }) hi("Define", { fg = colors.fg }) hi("Macro", { fg = colors.fg }) hi("PreCondit", { fg = colors.fg }) hi("Type", { fg = colors.fg }) hi("StorageClass", { fg = colors.fg }) hi("Structure", { fg = colors.fg }) hi("Typedef", { fg = colors.fg }) hi("Special", { fg = colors.fg }) hi("SpecialChar", { fg = colors.fg }) hi("Tag", { fg = colors.fg }) hi("Delimiter", { fg = colors.fg }) hi("SpecialComment", { fg = colors.fg, bold = true }) hi("Debug", { fg = colors.fg }) hi("Underlined", { fg = colors.fg, underline = true }) hi("Ignore", { fg = colors.fg_dim }) hi("Error", { fg = colors.error, bold = true }) hi("Todo", { fg = colors.fg, bold = true, underline = true }) -- Treesitter (monochrome) hi("@variable", { fg = colors.fg }) hi("@variable.builtin", { fg = colors.fg }) hi("@variable.parameter", { fg = colors.fg }) hi("@variable.member", { fg = colors.fg }) hi("@constant", { fg = colors.fg }) hi("@constant.builtin", { fg = colors.fg }) hi("@module", { fg = colors.fg }) hi("@label", { fg = colors.fg }) hi("@string", { fg = colors.fg, bold = true }) hi("@string.documentation", { fg = colors.fg, bold = true }) hi("@string.escape", { fg = colors.fg, bold = true }) hi("@string.special", { fg = colors.fg, bold = true }) hi("@character", { fg = colors.fg, bold = true }) hi("@number", { fg = colors.fg }) hi("@boolean", { fg = colors.fg }) hi("@float", { fg = colors.fg }) hi("@function", { fg = colors.fg }) hi("@function.builtin", { fg = colors.fg }) hi("@function.call", { fg = colors.fg }) hi("@function.macro", { fg = colors.fg }) hi("@method", { fg = colors.fg }) hi("@method.call", { fg = colors.fg }) hi("@constructor", { fg = colors.fg }) hi("@parameter", { fg = colors.fg }) hi("@keyword", { fg = colors.fg }) hi("@keyword.function", { fg = colors.fg }) hi("@keyword.operator", { fg = colors.fg }) hi("@keyword.return", { fg = colors.fg }) hi("@conditional", { fg = colors.fg }) hi("@repeat", { fg = colors.fg }) hi("@exception", { fg = colors.fg }) hi("@include", { fg = colors.fg }) hi("@type", { fg = colors.fg }) hi("@type.builtin", { fg = colors.fg }) hi("@type.qualifier", { fg = colors.fg }) hi("@type.definition", { fg = colors.fg }) hi("@storageclass", { fg = colors.fg }) hi("@attribute", { fg = colors.fg }) hi("@field", { fg = colors.fg }) hi("@property", { fg = colors.fg }) hi("@punctuation.bracket", { fg = colors.fg }) hi("@punctuation.delimiter", { fg = colors.fg }) hi("@punctuation.special", { fg = colors.fg }) hi("@comment", { fg = colors.fg, bold = true }) hi("@tag", { fg = colors.fg }) hi("@tag.attribute", { fg = colors.fg }) hi("@tag.delimiter", { fg = colors.fg }) hi("@text", { fg = colors.fg }) hi("@text.strong", { fg = colors.fg, bold = true }) hi("@text.emphasis", { fg = colors.fg, italic = true }) hi("@text.underline", { fg = colors.fg, underline = true }) hi("@text.strike", { fg = colors.fg, strikethrough = true }) hi("@text.title", { fg = colors.fg, bold = true }) hi("@text.literal", { fg = colors.fg, bold = true }) hi("@text.uri", { fg = colors.fg, underline = true }) hi("@text.todo", { fg = colors.fg, bold = true, underline = true }) hi("@text.note", { fg = colors.info, bold = true }) hi("@text.warning", { fg = colors.warn, bold = true }) hi("@text.danger", { fg = colors.error, bold = true }) -- LSP hi("LspReferenceText", { bg = colors.bg_dark }) hi("LspReferenceRead", { bg = colors.bg_dark }) hi("LspReferenceWrite", { bg = colors.bg_dark }) hi("LspSignatureActiveParameter", { fg = colors.fg, bold = true, underline = true }) -- Git signs hi("GitSignsAdd", { fg = colors.git_add }) hi("GitSignsChange", { fg = colors.git_change }) hi("GitSignsDelete", { fg = colors.git_delete }) hi("GitSignsCurrentLineBlame", { fg = colors.fg_dim, italic = true }) -- Telescope hi("TelescopeBorder", { fg = colors.fg }) hi("TelescopePromptBorder", { fg = colors.fg }) hi("TelescopeResultsBorder", { fg = colors.fg }) hi("TelescopePreviewBorder", { fg = colors.fg }) hi("TelescopeSelection", { bg = colors.bg_dark }) hi("TelescopeSelectionCaret", { fg = colors.fg, bg = colors.bg_dark }) hi("TelescopeMatching", { fg = colors.fg, bold = true, underline = true }) -- NeoTree hi("NeoTreeNormal", { fg = colors.fg, bg = colors.bg_dim }) hi("NeoTreeNormalNC", { fg = colors.fg, bg = colors.bg_dim }) hi("NeoTreeDirectoryName", { fg = colors.fg, bold = true }) hi("NeoTreeDirectoryIcon", { fg = colors.fg }) hi("NeoTreeRootName", { fg = colors.fg, bold = true }) hi("NeoTreeFileName", { fg = colors.fg }) hi("NeoTreeGitAdded", { fg = colors.git_add }) hi("NeoTreeGitModified", { fg = colors.git_change }) hi("NeoTreeGitDeleted", { fg = colors.git_delete }) -- Which-key hi("WhichKey", { fg = colors.fg, bold = true }) hi("WhichKeyGroup", { fg = colors.fg, bold = true }) hi("WhichKeyDesc", { fg = colors.fg }) hi("WhichKeySeparator", { fg = colors.fg_dim }) hi("WhichKeyFloat", { bg = colors.bg_dim }) -- Indent blankline hi("IndentBlanklineChar", { fg = colors.bg_dark }) hi("IndentBlanklineContextChar", { fg = colors.fg_dim }) hi("IblIndent", { fg = colors.bg_dark }) hi("IblScope", { fg = colors.fg_dim }) -- Notify hi("NotifyERRORBorder", { fg = colors.error }) hi("NotifyWARNBorder", { fg = colors.warn }) hi("NotifyINFOBorder", { fg = colors.info }) hi("NotifyDEBUGBorder", { fg = colors.fg_dim }) hi("NotifyTRACEBorder", { fg = colors.hint }) hi("NotifyERRORIcon", { fg = colors.error }) hi("NotifyWARNIcon", { fg = colors.warn }) hi("NotifyINFOIcon", { fg = colors.info }) hi("NotifyDEBUGIcon", { fg = colors.fg_dim }) hi("NotifyTRACEIcon", { fg = colors.hint }) hi("NotifyERRORTitle", { fg = colors.error }) hi("NotifyWARNTitle", { fg = colors.warn }) hi("NotifyINFOTitle", { fg = colors.info }) hi("NotifyDEBUGTitle", { fg = colors.fg_dim }) hi("NotifyTRACETitle", { fg = colors.hint }) -- Dashboard hi("DashboardHeader", { fg = colors.fg, bold = true }) hi("DashboardCenter", { fg = colors.fg }) hi("DashboardFooter", { fg = colors.fg_dim }) hi("DashboardShortCut", { fg = colors.fg, bold = true }) -- Lazy hi("LazyButton", { fg = colors.fg, bg = colors.bg_dim }) hi("LazyButtonActive", { fg = colors.fg, bg = colors.bg_dark, bold = true }) hi("LazyH1", { fg = colors.fg, bold = true }) hi("LazySpecial", { fg = colors.fg, bold = true }) -- Mini hi("MiniStatuslineModeNormal", { fg = colors.fg, bg = colors.tagbar, bold = true }) hi("MiniStatuslineModeInsert", { fg = colors.fg, bg = colors.tagbar_inactive, bold = true }) hi("MiniStatuslineModeVisual", { fg = colors.fg, bg = colors.bg_dark, bold = true }) hi("MiniStatuslineModeReplace", { fg = colors.bg, bg = colors.error, bold = true }) hi("MiniStatuslineModeCommand", { fg = colors.fg, bg = colors.bg_dim, bold = true }) -- Bufferline hi("BufferLineFill", { bg = colors.bg_dim }) hi("BufferLineBackground", { fg = colors.fg_dim, bg = colors.bg_dim }) hi("BufferLineBuffer", { fg = colors.fg_dim, bg = colors.bg_dim }) hi("BufferLineBufferSelected", { fg = colors.fg, bg = colors.bg, bold = true }) hi("BufferLineBufferVisible", { fg = colors.fg_dim, bg = colors.bg_dim }) hi("BufferLineCloseButton", { fg = colors.fg_dim, bg = colors.bg_dim }) hi("BufferLineCloseButtonSelected", { fg = colors.error, bg = colors.bg }) hi("BufferLineCloseButtonVisible", { fg = colors.fg_dim, bg = colors.bg_dim }) hi("BufferLineIndicatorSelected", { fg = colors.fg, bg = colors.bg }) hi("BufferLineModified", { fg = colors.fg, bg = colors.bg_dim }) hi("BufferLineModifiedSelected", { fg = colors.fg, bg = colors.bg }) hi("BufferLineSeparator", { fg = colors.bg_dim, bg = colors.bg_dim }) hi("BufferLineSeparatorSelected", { fg = colors.bg_dim, bg = colors.bg }) -- Copilot hi("CopilotSuggestion", { fg = colors.fg_dim }) end M.setup() return M