# CargDev-Cyberpunk.nvim > A vibrant Neovim colorscheme with cyberpunk aesthetics ## Project Overview This is a Neovim colorscheme plugin written in Lua. It provides syntax highlighting with a cyberpunk-inspired color palette featuring neon colors on a deep blue background. ## Tech Stack - Language: Lua 5.1 (Neovim Lua) - Target: Neovim 0.8.0+ - Linting: Selene - Formatting: StyLua ## Project Structure ``` cargdev-cyberpunk.nvim/ ├── colors/ │ └── cargdev-cyberpunk.lua # Enables :colorscheme command ├── lua/cargdev-cyberpunk/ │ ├── init.lua # Main entry point (setup, load, apply) │ ├── colors.lua # Color palette definitions │ ├── config.lua # Configuration options │ ├── highlights.lua # All highlight group definitions │ └── plugin.lua # Plugin metadata ├── test/ │ └── test_colors.lua # Test suite ├── examples/ │ └── sample.ts # TypeScript sample for testing ├── assets/ # Screenshot images ├── CHANGELOG.md ├── CONTRIBUTING.md ├── INSTALL.md ├── README.md ├── LICENSE # MIT ├── selene.toml # Lua linter config ├── stylua.toml # Lua formatter config └── vim.toml # Neovim globals for selene ``` ## Key Files ### lua/cargdev-cyberpunk/init.lua Main module exposing: - `setup(opts)` - Initialize with configuration options - `load()` - Load/reload the colorscheme - `apply_highlights()` - Apply all highlight groups - `apply_terminal_colors()` - Set terminal colors - `get_colors()` - Return the color palette ### lua/cargdev-cyberpunk/colors.lua Color palette with categories: - `bg` - Background colors (primary, secondary, tertiary, float, highlight, selection) - `fg` - Foreground colors (primary, secondary, muted, accent) - `syntax` - Syntax colors (keyword, function, string, number, comment, type, etc.) - `special` - Diagnostic colors (error, warning, info, hint, success, diff_*) - `terminal` - 16-color terminal palette Functions: - `override(custom_colors)` - Override palette colors - `get_palette()` - Get a copy of the palette ### lua/cargdev-cyberpunk/config.lua Configuration options: - `transparent` (boolean, default: false) - Transparent background - `italic_comments` (boolean, default: true) - Italic comments - `bold_keywords` (boolean, default: true) - Bold keywords - `bold_functions` (boolean, default: true) - Bold functions - `bold_types` (boolean, default: true) - Bold types - `terminal_colors` (boolean, default: true) - Set terminal colors - `colors` (table, default: {}) - Custom color overrides ### lua/cargdev-cyberpunk/highlights.lua Contains `get_groups(colors, config)` function returning a table of 500+ highlight groups: - Editor UI (Normal, Cursor, Visual, Search, StatusLine, etc.) - Syntax (Comment, String, Function, Keyword, Type, etc.) - Treesitter (@comment, @function, @keyword, @type, etc.) - LSP semantic tokens (@lsp.type.*, @lsp.mod.*) - Diagnostics (DiagnosticError, DiagnosticWarn, etc.) - Plugin support (Telescope, NvimTree, GitSigns, nvim-cmp, etc.) ## Color Palette Primary colors: - Background: #002B36 (deep blue) - Foreground: #E0E0E0 (light gray) - Accent: #8BE9FD (cyan) Syntax colors: - Keywords: #FF79C6 (hot pink) - Functions: #50FA7B (neon green) - Strings: #FFFFFF (white) - Numbers: #FFB86C (orange) - Types: #BD93F9 (purple) - Comments: #666666 (gray) ## Usage ```lua -- Basic require("cargdev-cyberpunk").setup() -- With options require("cargdev-cyberpunk").setup({ transparent = true, italic_comments = true, colors = { bg = { primary = "#000000" }, }, }) -- Or via command vim.cmd("colorscheme cargdev-cyberpunk") ``` ## Development Commands ```bash # Run tests nvim --headless -c "lua dofile('test/test_colors.lua')" # Format code stylua lua/ # Lint code selene lua/ ``` ## Neovim API Used - `vim.api.nvim_set_hl(0, group, settings)` - Set highlight groups - `vim.g.colors_name` - Set colorscheme name - `vim.g.terminal_color_*` - Set terminal colors - `vim.o.termguicolors` - Enable true color - `vim.cmd("hi clear")` - Clear existing highlights - `vim.tbl_deep_extend()` - Merge tables - `vim.deepcopy()` - Copy tables ## Adding New Highlight Groups 1. Edit `lua/cargdev-cyberpunk/highlights.lua` 2. Add groups to the table returned by `get_groups()` 3. Use colors from `colors` parameter (e.g., `c.syntax.keyword`) 4. Use config from `config` parameter for style toggles 5. Run tests to verify ## Adding New Configuration Options 1. Add default value in `lua/cargdev-cyberpunk/config.lua` defaults table 2. Use the option in `lua/cargdev-cyberpunk/highlights.lua` 3. Document in README.md 4. Update CHANGELOG.md ## Plugin Highlights Supported Telescope, NvimTree, Neo-tree, GitSigns, nvim-cmp, indent-blankline, which-key, Lazy.nvim, Mason, bufferline, lualine, nvim-notify, noice.nvim, trouble.nvim, dashboard-nvim, alpha-nvim, Copilot