Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

synthwave3000.nvim

synthwave3000.nvim

Neon dreams. Real contrast ratios.


synthwave3000 dark mode preview


✨ Features

  • WCAG AAA on dark, AA on light — every accent verified against its background
  • 🌗 First-class light mode — not an afterthought; same hue families, recalibrated lightness
  • One-line install, zero required configcolorscheme synthwave3000 and you're done
  • 🎛 Override anything — palette, highlights, per-variant, via on_colors / on_highlights
  • 🪟 Transparent background support — Normal, sidebars, floats, statusline section C
  • 🖥 Neovim 0.10 / 0.11 / 0.12 compatible
  • 🎨 Lualine theme ships at standard lua/lualine/themes/ path for auto-discovery

📸 Gallery — dark, light, transparent (click to expand)
Variant Preview
Dark — the canonical sunset dark
Light — the violet hour light
Transparent — float on your wallpaper transparent

📦 Installation

lazy.nvim:

{
  "Web-Dev-Codi/synthwave3000.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
  config = function(_, opts)
    require("synthwave3000").setup(opts)
    vim.cmd.colorscheme("synthwave3000")
  end,
}
Other plugin managers

packer.nvim:

use {
  "Web-Dev-Codi/synthwave3000.nvim",
  config = function()
    require("synthwave3000").setup({})
    vim.cmd.colorscheme("synthwave3000")
  end,
}

vim-plug:

Plug 'Web-Dev-Codi/synthwave3000.nvim'
" After plug#end():
lua require("synthwave3000").setup({}); vim.cmd.colorscheme("synthwave3000")

🚀 Usage

require("synthwave3000").setup({
  style = "auto",     -- "dark" | "light" | "auto" (follows vim.o.background)
  transparent = false, -- transparent backgrounds for Normal, sidebars, floats
})
vim.cmd.colorscheme("synthwave3000")

Lualine

The theme ships a lualine theme file at lua/lualine/themes/synthwave3000.lua. Lualine auto-discovers it:

require("lualine").setup({
  options = { theme = "synthwave3000" },
})

The lualine theme respects transparent and background from your colorscheme config.


⚙️ Configuration

You don't need to call setup() unless you want to change something. The defaults are:

require("synthwave3000").setup({
  -- Mode ----------------------------------------------------------
  style = "auto",         -- "dark" | "light" | "auto" (follows vim.o.background)
  transparent = false,     -- transparent bg for Normal, sidebars, floats, lualine section C
  background = nil,        -- override the Normal background (nil = palette default)
  terminal_colors = true,  -- set terminal ANSI color palette

  -- Styles --------------------------------------------------------
  styles = {
    comments  = { italic = true },
    keywords  = { bold = true },
    functions = { bold = true },
    variables = {},
    strings   = {},
    types     = { bold = true },
    operators = {},
  },

  -- Plugin toggles (all enabled by default) -----------------------
  -- These exist for opt-out, not opt-in. synthwave3000 already looks
  -- Disable a toggle only if you want to override with your own setup.
  plugins = {
    telescope        = true,   nvim_tree        = true,
    neo_tree         = true,   bufferline       = true,
    gitsigns         = true,   diffview         = true,
    cmp              = true,   blink_cmp        = true,
    mini             = true,   indent_blankline = true,
    which_key        = true,   noice            = true,
    notify           = true,   trouble          = true,
    flash            = true,   snacks           = true,
    dashboard        = true,   aerial           = true,
    dap              = true,   neogit           = true,
    render_markdown  = true,
  },

  -- Customization -------------------------------------------------
  on_colors = nil,         -- function(palette) — mutate palette before highlight gen
  on_highlights = nil,     -- function(groups, palette) — override highlight groups
})

Customization examples

on_colors = function(c)
  c.pink = "#ff69b4"
end

on_highlights = function(hl, c)
  hl.Comment = { fg = c.comment, italic = false }
end

🔌 Compatible Plugins

These plugins have been visually verified.

Plugin Highlights
telescope.nvim 40+ groups — picker borders, results, prompt
nvim-tree.lua 40+ groups — file tree, git icons
neo-tree.nvim Float border, normal, indent markers
bufferline.nvim 40+ groups — tabs, separators, diagnostics, modified
gitsigns.nvim Sign column, diff hunks
diffview.nvim Diff panel backgrounds
nvim-cmp Completion menu, documentation
blink.cmp 40+ groups — menu, docs, signature help
mini.nvim 80+ groups — pickers, statusline, files, diff, starter
indent-blankline.nvim Indent guides, scope
which-key.nvim Popup, groups, descriptions
noice.nvim Cmdline popup, confirm, lsp progress
nvim-notify Notification borders (severity-colored)
trouble.nvim Diagnostic list backgrounds
flash.nvim Uses theme defaults (hub groups)
snacks.nvim 100+ groups — picker, dashboard, indent, notifier
dashboard-nvim Dashboard text, keys, footer
aerial.nvim Symbol outline, float border
nvim-dap / nvim-dap-ui Debugger UI float border
neogit Git status buffer
render-markdown.nvim Headings, code blocks, links, checkboxes

🎨 Palette

Dark mode

Key Swatch Hex Description
bg #262335 #262335 Main background
bg_dark #0D0221 #0D0221 Sidebar / float / statusline
bg_darker #171520 #171520 Statusline inactive / tabline fill
bg_panel #2a2139 #2a2139 Popup menu background
fg #ffffff #ffffff Primary foreground
fg_dim #b6b1b1 #b6b1b1 Dimmed / inactive text
comment #848bbd #848bbd Comments
pink #FF00FF #FF00FF Accent — borders, titles, selection
cyan #00FFFF #00FFFF Functions, special values, links
green #33FF33 #33FF33 Added / success / git staged
yellow #fede5d #fede5d Warnings / changed / keywords
orange #f97e72 #f97e72 Unsaved changes / operators
red #fe4450 #fe4450 Errors / deleted / types
purple #8C1EFF #8C1EFF Special identifiers / modules

Light mode

Key Swatch Hex Description
bg #f5f0ff #f5f0ff Main background
bg_dark #e8e0f0 #e8e0f0 Sidebar / float / statusline
bg_darker #ddd4e8 #ddd4e8 Statusline inactive / tabline fill
bg_panel #f0ebf8 #f0ebf8 Popup menu background
fg #1a1a2e #1a1a2e Primary foreground
fg_dim #5a5a7a #5a5a7a Dimmed / inactive text
comment #7c7fa0 #7c7fa0 Comments
pink #c445a3 #c445a3 Accent — borders, titles, selection
cyan #007777 #007777 Functions, special values, links
green #2d8f5e #2d8f5e Added / success / git staged
yellow #b0901f #b0901f Warnings / changed / keywords
orange #c0552a #c0552a Unsaved changes / operators
red #c62828 #c62828 Errors / deleted / types
purple #7c5295 #7c5295 Special identifiers / modules

♿ Accessibility

synthwave3000 takes accessibility seriously — uncommon for neon themes.

  • Dark mode: all accents ≥ 7:1 against backgrounds (WCAG AAA)
  • Light mode: all accents ≥ 4.5:1 against backgrounds (WCAG AA)
  • Border colors and UI chrome pass WCAG 2.1 SC 1.4.11 (3:1 non-text contrast)
  • No information is conveyed by color alone — error highlights pair with icons/signs

🪟 Transparency

When transparent = true:

Element Behavior
Normal, NormalNC bg = "NONE"
NormalFloat, sidebars (SignColumn, FoldColumn) bg = "NONE"
StatusLine, WinBar, TabLine section C bg = "NONE"
Lualine section C bg = "NONE"
Pmenu, floating windows Use palette bg_panel (keeps readability)
Bufferline section A, B Keep colored backgrounds
Statusline section A (mode indicator) Keep colored background
Lualine sections A, B Keep colored backgrounds

Border colors are not affected by transparency — they remain pink regardless.


🧪 Testing

nvim --headless -u tests/minimal_init.lua -c "PlenaryBustedFile tests/synthwave3000_spec.lua"

📄 License

MIT


Made with neon and Lua. If it made your editor a little more electric, .
If a plugin still looks off, that's a bug we want to know about — open an issue.


footer gradient

About

A Neovim colorscheme inspired by Robb Owen's Synthwave '84 VS Code theme.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages