Skip to content

ChuYanLon/chad46

Repository files navigation

chad46

sync license Lua

Daily sync — themes, integrations, type definitions, and colorscheme files are automatically synced from NvChad/base46 and NvChad/ui every day at midnight UTC via GitHub Actions. A sync.log is maintained with each run. Always up to date with upstream.

94 themes · 48 plugin highlight integrations · 15 auto-applied plugin configs · Complete coc.nvim support (160+ highlights, completion icons, diagnostic config) · Lualine, Heirline, Bufferline, Airline & Lightline adapters · Native NvChad statusline (4 styles) · base_30 / base_16 color system · base46/nvconfig compatibility layer

Works with any plugin manager. Auto-config patching for lazy.nvim included; non-lazy users can call apply_configs().

Preview

bearded-arc ⬅️ tokyonight catppuccin
bearded-arc tokyonight catppuccin
nord onedark gruvbox
nord onedark gruvbox

All 94 themes are visually identical to their NvChad/base46 counterparts.
See the NvChad theme gallery for all themes.

Requirements

  • Neovim >= 0.9.0

Features

  • Daily auto-sync from NvChad/base46 — themes + integrations pulled every 24h
  • Auto-detected integrations — install a plugin, its highlights + config apply automatically
  • 94 themes
  • 48 plugin integrations (highlights) — including native St_* statusline groups
  • 15 auto-applied plugin configs (icons, layout, appearance) — lazy.nvim auto, others via apply_configs()
  • base_30 / base_16 dual color system
  • NvChad native statusline — 4 themes (default, minimal, vscode, vscode_colored), auto-synced from NvChad/ui
  • Lualine, Heirline, Bufferline, Airline & Lightline adapters with NvChad styling
  • base46/nvconfig compatibility layer

Installation

lazy.nvim

Integrations are auto-detected — highlights for installed plugins load automatically:

{
  "ChuYanLon/chad46",
  opts = {
    -- cmp = { style = "atom_colored" },
  },
  config = function(_, opts)
    require("chad46").setup(opts)
    vim.cmd.colorscheme("chad46_bearded-arc")
  end,
}

To explicitly disable or enable a specific integration:

opts = {
  integrations = {
    telescope = false,   -- disable even if installed
    blink = true,        -- force enable even if not auto-detected
  },
},

vim.pack / packer.nvim / vim-plug / any

require("chad46").setup()
vim.cmd.colorscheme("chad46_bearded-arc")

Optional: apply NvChad-style plugin configs for non-lazy managers:

-- Apply all enabled
vim.schedule(function()
  require("chad46").apply_configs()
end)

-- Or apply per-plugin when it loads
require("chad46").apply_configs("telescope")
require("chad46").apply_configs({ "lualine", "bufferline" })

Integrations

Plugin highlights and configs are auto-detected via lazy.nvim. No manual setup needed — install a plugin and its highlight loads automatically.

Seven integrations are local additions not present in upstream NvChad/base46: Snacks, Noice, Gitsigns, Coc (160+ highlights, auto-config), CocLoader (TUI highlights), and NERDTree.

Highlights (47 plugins)

Alpha, Avante, Blankline, Blink, Blink-pair, Bufferline, Cmp, Coc (160+ groups), CodeActionMenu, Dap, Devicons, Diffview, Edgy, Flash, Git, Git-conflict, Gitsigns*, Grug-far, Hop, Leap, Lsp, Lspsaga, Markview, Mason, Mini-tabline, Navic, NERDTree*, Neogit, Noice*, Notify, Nvimtree, Nvshades, Orgmode, Rainbow-delimiters, Render-markdown, Semantic-tokens, Snacks*, Syntax, Telescope, Tiny-inline-diagnostic, Todo, Treesitter, Trouble, Vim-illuminate, Whichkey

Auto-applied Configs (lazy.nvim only)

Also auto-detected — when the plugin is installed, chad46 injects its defaults:

Plugin What it does
Telescope search prompt icon, layout, dropdown theme
Nvim-tree Nerd Font file/folder icons, git status glyphs
Gitsigns add/change/delete signs in signcolumn — local config
Mason package pending/installed/uninstalled icons
Indent-blankline indent guide character
Which-key modern preset, group labels
Nvim-cmp 30+ kind icons, menu formatting
Blink-cmp rounded borders, kind icon column
Devicons filetype icon color overrides
Lualine NvChad statusline color theme
Bufferline NvChad buffer tab color theme
Dap breakpoint signs
Trouble right-side layout
Snacks notifier icons, picker icons/keymaps/layout/explorer, indent style
Coc diagnostics, completion kind icons (Nerd Font), format items order, signature/hover/floating borders, inlayHint, codeLens — respects cmp.style

Options

Full reference of available setup() options:

Option Type Default Description
transparency boolean false Disable background color for transparent terminals
cmp.style string "default" Completion UI style — affects nvim-cmp, blink.cmp, and coc.nvim PUM: "default", "atom", "atom_colored", "flat_light", "flat_dark"
statusline.nvchad_stl boolean false Enable NvChad native statusline
statusline.theme string "default" Themes: "default", "minimal", "vscode", "vscode_colored"
statusline.separator_style string "default" nvchad_stl separator: "default", "round", "block", "arrow"
statusline.ignore_focus table {} Filetypes to hide statusline
statusline.order table nil Custom nvchad_stl component order
statusline.modules table nil Custom nvchad_stl component modules
statusline.refresh_interval number 1000 nvchad_stl periodic refresh in ms; 0 = disable
statusline.styles table {} Lualine/heirline theme style overrides
integrations table {} Explicit enable/disable overrides for auto-detection
changed_themes table {} Per-theme color overrides (see below)
hl_override table {} Override highlight groups per integration (nested: { telescope = { TelescopeBorder = { ... } } })
hl_add table {} Add custom highlight groups

Default config for reference:

{
  transparency = false,
  changed_themes = {},
  hl_override = {},
  hl_add = {},
  statusline = { nvchad_stl = false, theme = "default", styles = {} },
  cmp = { style = "default" },  -- also controls coc.nvim PUM
  integrations = {},
}

Customization

require("chad46").setup({
  transparency = true,
  changed_themes = {
    all = { base_30 = { blue = "#ff0000" } },
    onedark = { base_30 = { red = "#00ff00" } },
  },
  hl_override = {
    defaults = {
      NormalFloat = { bg = "NONE" },
      FloatBorder = { fg = "blue" },
    },
    treesitter = {
      ["@variable"] = { fg = "blue", italic = true },
    },
  },
  hl_add = {
    MyCustomGroup = { fg = "green", bg = "black", bold = true },
  },
  statusline = {
    nvchad_stl = true,
    theme = "flat_dark",
    separator_style = "round",
    styles = {
      my_style = function()
        local c = require("chad46").get_theme_tb("base_30")
        return {
          normal = { a = { bg = c.blue, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.white }, c = { bg = "NONE", fg = c.white } },
          insert = { a = { bg = c.green, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.green }, c = { bg = "NONE", fg = c.white } },
          visual = { a = { bg = c.purple, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.purple }, c = { bg = "NONE", fg = c.white } },
          replace = { a = { bg = c.orange, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.orange }, c = { bg = "NONE", fg = c.white } },
          command = { a = { bg = c.yellow, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.yellow }, c = { bg = "NONE", fg = c.white } },
          terminal = { a = { bg = c.green, fg = c.black, gui = "bold" }, b = { bg = c.one_bg2, fg = c.green }, c = { bg = "NONE", fg = c.white } },
        }
      end,
      -- override a built-in style:
      -- default = function() ... end,
    },
  },
})

API

-- Load/setup
require("chad46").setup(opts)              -- configure and enable auto-config patching
vim.cmd.colorscheme("chad46_tokyonight")   -- switch theme at runtime
require("chad46").load("tokyonight")       -- switch theme at runtime (same as above)

-- Query colors
local c = require("chad46").get_theme_tb("base_30")  -- { blue = "#...", red = "#...", ... }
local c16 = require("chad46").get_theme_tb("base_16") -- { base00 = "#...", base01 = "#...", ... }

-- Apply plugin configs (non-lazy managers)
require("chad46").apply_configs()                     -- all enabled
require("chad46").apply_configs("telescope")          -- single plugin
require("chad46").apply_configs({"lualine","bufferline"}) -- multiple

Adapters

NvChad Native Statusline (nvchad_stl)

Built-in NvChad-style statusline with 4 themes. No external dependency required. Lualine-style refresh architecture: 16ms event coalescing + 1000ms periodic fallback.

Simple — enable via setup():

require("chad46").setup({
  statusline = {
    nvchad_stl = true,
    theme = "minimal",
    separator_style = "round",
    ignore_focus = { "list" },
    order = { "mode", "file", "git", "%=", "lsp_msg", "diagnostics", "lsp", "cwd", "cursor" },
    modules = {
      clock = function() return os.date(" %H:%M:%S ") end,
    },
    refresh_interval = 1000,
  },
})

All fields except nvchad_stl and styles are passed to nvchad_stl.enable(). Or call it directly for full control:

require("chad46.adapters.nvchad_stl").enable({
  theme = "minimal",
  separator_style = "round",
  ignore_focus = { "list" },
  order = { "mode", "file", "git", "%=", "lsp_msg", "diagnostics", "lsp", "cwd", "cursor" },
  modules = {
    clock = function() return os.date(" %H:%M:%S ") end,
  },
  refresh_interval = 1000,
})

Custom components:

require("chad46.adapters.nvchad_stl").enable({
  modules = {
    clock = function() return os.date(" %H:%M:%S ") end,
    battery = function() return "   85% " end,
  },
  order = { "mode", "file", "git", "%=", "clock", "battery", "lsp", "cwd", "cursor" },
})

Sync from upstream via bash sync.sh --stl.

Lualine / Heirline / Bufferline

-- Shared statusline API (all styles, respects statusline.theme)
local st = require("chad46.adapters.statusline")
local theme = st.get_theme()        -- mode-based theme (normal/insert/etc)
local colors = st.get_colors()      -- raw color palette from current theme
local mode_colors = st.get_mode_colors()  -- mode indicator colors

-- lualine
require("lualine").setup({
  options = { theme = require("chad46.adapters.lualine").get_theme() },
})

-- bufferline
require("bufferline").setup({
  highlights = require("chad46.adapters.bufferline").get_theme(),
})

-- heirline
local h = require("chad46.adapters.heirline")
local c = h.get_colors()       -- includes .section, .mode_a, .mode_b, .mode_c
local m = h.get_mode_colors()  -- .normal, .insert, .visual, ...

local colors = {
  bright_bg = c.section.bg,
  bright_fg = c.section.fg,
  red = c.red, blue = c.blue, green = c.green,
  purple = c.purple, orange = c.orange, yellow = c.yellow,
  gray = c.gray, gray_fg = c.gray_fg, light_grey = c.light_grey,
  white = c.white, black = c.black, bg = c.bg, bg_alt = c.one_bg2,
  -- mode colors
  normal   = m.normal.bg,
  insert   = m.insert.bg,
  visual   = m.visual.bg,
  replace  = m.replace.bg,
  command  = m.command.bg,
}

-- Then use `colors` in your heirline components
local ViMode = {
  provider = function()
    return { " NORMAL ", " INSERT ", " VISUAL ", " REPLACE ", " COMMAND ", " TERMINAL " }
  end,
  hl = function()
    local mode_colors = { normal = colors.normal, insert = colors.insert,
      visual = colors.visual, replace = colors.replace,
      command = colors.command, terminal = colors.insert }
    return { bg = mode_colors[vim.fn.mode()], fg = colors.black, bold = true }
  end,
}

local FileName = {
  provider = function() return " " .. vim.fn.expand "%:t" end,
  hl = { bg = colors.bg_alt, fg = colors.white },
}

require("heirline").setup({
  statusline = {
    ViMode,
    FileName,
  },
})

Themes

:colorscheme chad46_tokyonight   " switch theme — standard :colorscheme command
:colorscheme chad46_catppuccin
:colorscheme chad46_nord

Or via Lua (Neovim only):

require("chad46").load("tokyonight")
require("chad46").load("catppuccin")
require("chad46").load("nord")

vim-airline themes

94 airline themes match the colorschemes. Airline theme names use underscores instead of hyphens:

:let g:airline_theme = 'chad46_bearded_arc'   " note: bearded_arc (underscore)
:AirlineRefresh
View all 94 themes

aquarium, ashes, aylin, ayu_dark, ayu_light, bearded-arc, blossom_light, carbonfox, catppuccin-latte, catppuccin, chadracula-evondev, chadracula, chadtain, chocolate, darcula-dark, dark_horizon, decay, default-dark, default-light, doomchad, eldritch, embark, everblush, everforest_light, everforest, falcon, flex-light, flexoki-light, flexoki, flouromachine, gatekeeper, github_dark, github_light, gruvbox_light, gruvbox, gruvchad, hiberbee, horizon, jabuti, jellybeans, kanagawa-dragon, kanagawa, material-darker, material-deep-ocean, material-lighter, melange, midnight_breeze, mito-laser, monekai, monochrome, mountain, nano-light, neofusion, nightfox, nightlamp, nightowl, nord, obsidian-ember, oceanic-light, oceanic-next, one_light, onedark, onenord_light, onenord, oxocarbon, palenight, pastelbeans, pastelDark, penumbra_dark, penumbra_light, poimandres, radium, rosepine-dawn, rosepine, rxyhn, scaryforest, seoul256_dark, seoul256_light, solarized_dark, solarized_light, solarized_osaka, starlight, sunrise_breeze, sweetpastel, tokyodark, tokyonight, tomorrow_night, tundra, vesper, vscode_dark, vscode_light, wombat, yoru, zenburn

Color System

local c = require("chad46").get_theme_tb("base_30")
-- c.blue, c.red, c.green, c.black, c.white, c.one_bg, c.nord_blue, ...

base_30 — semantic color names (used by integrations).
base_16 — base16 canonical palette (used by treesitter/syntax).

Vim usage (pre-generated colorscheme files)

Pre-generated .vim files with full hi commands — no Neovim needed.

" vim-plug
Plug 'ChuYanLon/chad46'

" ~/.vimrc
syntax on
colorscheme chad46_bearded-arc   " or chad46_nord, chad46_catppuccin, etc.

vim-airline (94 themes, underscores instead of hyphens):

Plug 'ChuYanLon/chad46'
Plug 'vim-airline/vim-airline'
let g:airline_theme = 'chad46_bearded_arc'

lightline (94 themes):

Plug 'ChuYanLon/chad46'
Plug 'itchyny/lightline.vim'
let g:lightline = { 'colorscheme': 'chad46_bearded_arc' }

coc.nvim — full support (160+ highlights + auto-config):

Plug 'ChuYanLon/chad46'
Plug 'neoclide/coc.nvim', {'branch': 'release'}

All diagnostic highlights, completion menu icons (kind column), signature/hover/floating styling, and tree view are themed automatically.
Completion item kind icons reuse the same Nerd Font set as nvim-cmp and blink.cmp, and respect the cmp.style option.

NERDTree highlights are included — no extra config:

Plug 'ChuYanLon/chad46'
Plug 'preservim/nerdtree'

Sync

# Sync themes and integrations from NvChad/base46
bash sync.sh

# Sync types from NvChad/ui
bash sync.sh --types

# Sync native statusline modules from NvChad/ui (with chad46 compatibility fixup)
bash sync.sh --stl

Related

  • NvChad/base46 — upstream source for themes and integrations
  • NvChad/ui — upstream source for type definitions and statusline
  • tokyonight.nvim — inspired the auto-detect integration system

License

MIT © ChuYanLon

Acknowledgments: This project contains code derived from NvChad/base46 and NvChad/ui. Themes, integrations, type definitions, and statusline modules are synced from those upstream projects. All upstream code remains copyright © NvChad contributors and is used under the terms of the MIT License.

About

94 NvChad themes & 44 plugin highlight integrations — daily synced from NvChad/base46

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors