README.md

June 13, 2026 ยท View on GitHub

A high-contrast, futuristic & vibrant theme for neovim

Issues License stars


๐Ÿš€ Features

  • Transparency-first design - all design decisions are made with transparency in mind.
  • High contrast - Colours have been carefully chosen to be cohesive and easy on the eyes while still being easy to distinguish.
  • Terminal Support - Several included terminal themes to enhance your cyberdream experience.
  • Extensions - Support for a variety of popular plugins out of the box. Can be toggled on or off to maximise performance.
Supported Plugins/Extensions
PluginHighlights
alpha-nvimalpha
blink.cmpblinkcmp
dashboard-nvimdashboard
nvim-dap-uidapui
fzf-luafzflua
gitsigns.nvimgitsigns
gitpad.nvimgitpad
grapple.nvimgrapple
grug-far.nvimgrugfar
heirline-components.nvimheirline
helpview.nvimhelpview
hop.nvimhop
indent-blankline.nvimindentblankline
kubectl.nvimkubectl
lazy.nvimlazy
leap.nvimleap
lualine.nvimlualine
markview.nvimmarkview
mini.nvimmini
noice.nvimnoice
nvim-cmpcmp
nvim-notifynotify
nvim-treesittertreesitter
nvim-treesitter-contexttreesittercontext
rainbow-delimiters.nvimrainbow_delimiters
render-markdown.nvimmarkdown
telescope.nvimtelescope
trouble.nvimtrouble
which-key.nvimwhichkey

๐Ÿ“ฆ Installation

Lazy1:

{
    "scottmckendry/cyberdream.nvim",
    lazy = false,
    priority = 1000,
}

Packer:

use { "scottmckendry/cyberdream.nvim" }

Lualine (optional):

{
    require("lualine").setup({
        -- ... other config
        options = {
            theme = "auto", -- "auto" will set the theme dynamically based on the colorscheme
        },
        -- ... other config
    })
}

See my personal lualine config here for an example.

๐Ÿš€ Usage

vim.cmd("colorscheme cyberdream")

โš™๏ธ Configuring

Calling setup is optional, but allows you to configure the theme to your liking. Below is an example of all the available configuration options with their default values:

require("cyberdream").setup({
    -- Set light or dark variant
    variant = "default", -- use "light" for the light variant. Also accepts "auto" to set dark or light colors based on the current value of `vim.o.background`

    -- Enable transparent background
    transparent = false,

    -- Reduce the overall saturation of colours for a more muted look
    saturation = 1, -- accepts a value between 0 and 1. 0 will be fully desaturated (greyscale) and 1 will be the full color (default)

    -- Enable italics comments
    italic_comments = false,

    -- Replace all fillchars with ' ' for the ultimate clean look
    hide_fillchars = false,

    -- Apply a modern borderless look to pickers like Telescope, Snacks Picker & Fzf-Lua
    borderless_pickers = false,

    -- Set terminal colors used in `:terminal`
    terminal_colors = true,

    -- Improve start up time by caching highlights. Generate cache with :CyberdreamBuildCache and clear with :CyberdreamClearCache
    cache = false,

    -- Override highlight groups with your own colour values
    highlights = {
        -- Highlight groups to override, adding new groups is also possible
        -- See `:h highlight-groups` for a list of highlight groups or run `:hi` to see all groups and their current values

        -- Example:
        Comment = { fg = "#696969", bg = "NONE", italic = true },

        -- More examples can be found in `lua/cyberdream/extensions/*.lua`
    },

    -- Override a highlight group entirely using the built-in colour palette
    overrides = function(colors) -- NOTE: This function nullifies the `highlights` option
        -- Example:
        return {
            Comment = { fg = colors.green, bg = "NONE", italic = true },
            ["@property"] = { fg = colors.magenta, bold = true },
        }
    end,

    -- Override colors
    colors = {
        -- For a list of colors see `lua/cyberdream/colours.lua`

        -- Override colors for both light and dark variants
        bg = "#000000",
        green = "#00ff00",

        -- If you want to override colors for light or dark variants only, use the following format:
        dark = {
            magenta = "#ff00ff",
            fg = "#eeeeee",
        },
        light = {
            red = "#ff5c57",
            cyan = "#5ef1ff",
        },
    },

    -- Disable or enable colorscheme extensions
    extensions = {
        telescope = true,
        notify = true,
        mini = true,
        ...
    },

    -- Alternatively, you can use 'default' to set all extensions at once
    -- cache = true, -- Use cache for fastest loads
    -- extensions = {
    --     default = false, -- Disable all by default
    --     base = true, -- Enable all built-in hl groups (you probably want this)
    --
    --     -- Now enable only what you want to use
    --     telescope = true,
    --     cmp = true,
    --     gitsigns = true,
    -- },
})

Note

For a complete list of extensions, see the table in config.lua.

๐ŸŽ Extras

We've cooked up some wonderful extras to enhance your cyberdream experience. Mostly terminal themes and a few other goodies!

terminal

Using the Nix Flake

For Nix users, this repository includes a flake.nix that exposes all extra themes through the extras output. This makes it easy to integrate cyberdream themes into your NixOS or home-manager configuration.

How it works

The flake automatically discovers all directories in the extras/ folder and makes them available as outputs. You can reference any extra theme directly in your Nix configuration.

Setup

Add cyberdream to your flake inputs:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    cyberdream.url = "github:scottmckendry/cyberdream.nvim";
  };
}

Example Usage with Home Manager

There are several approaches you can use depending on the program:

Using extraConfig for programs with custom config options

{ inputs, ... }:
{
  # Alacritty - parse TOML and merge with settings
  programs.alacritty = {
    enable = true;
    settings = builtins.fromTOML (builtins.readFile "${inputs.cyberdream.extras.alacritty}/alacritty.toml");
  };

  # Kitty - append theme config
  programs.kitty = {
    enable = true;
    extraConfig = builtins.readFile "${inputs.cyberdream.extras.kitty}/kitty.conf";
  };

  # Tmux - append theme config
  programs.tmux = {
    enable = true;
    extraConfig = builtins.readFile "${inputs.cyberdream.extras.tmux}/tmux.conf";
  };
}

Using xdg.configFile for direct file placement

{ inputs, ... }:
{
  # Yazi - link theme file directly
  xdg.configFile."yazi/theme.toml".source = "${inputs.cyberdream.extras.yazi}/cyberdream.toml";

  # Zellij - link theme file directly
  xdg.configFile."zellij/themes/cyberdream.kdl".source = "${inputs.cyberdream.extras.zellij}/cyberdream.kdl";
}

Using program-specific theme options

{ inputs, ... }:
{
  # Bat - register as a custom theme
  programs.bat = {
    enable = true;
    config = {
      theme = "cyberdream";
    };
    themes = {
      cyberdream = {
        src = inputs.cyberdream;
        file = "extras/textmate/cyberdream.tmTheme";
      };
    };
  };
}

Available extras

All directories in the extras/ folder are available through inputs.cyberdream.extras.<name>. See the list above for all available themes.

๐Ÿง‘โ€๐Ÿณ Recipes

Include these alongside the setup function to add additional functionality to the theme.

Map a key to toggle between light and dark mode

-- Add a custom keybinding to toggle the colorscheme
vim.api.nvim_set_keymap("n", "<leader>tt", ":CyberdreamToggleMode<CR>", { noremap = true, silent = true })

Create an autocmd to hook into the toggle event and run custom code

-- The event data property will contain a string with either "default" or "light" respectively
vim.api.nvim_create_autocmd("User", {
    pattern = "CyberdreamToggleMode",
    callback = function(event)
        -- Your custom code here!
        -- For example, notify the user that the colorscheme has been toggled
        print("Switched to " .. event.data .. " mode!")
    end,
})

image

๐ŸŽจ Palette

Dark
๐Ÿ–ŒHexColor
#16181a#16181abg
#1e2124#1e2124bg_alt
#3c4048#3c4048bg_highlight
#ffffff#fffffffg
#7b8496#7b8496grey
#5ea1ff#5ea1ffblue
#5eff6c#5eff6cgreen
#5ef1ff#5ef1ffcyan
#ff6e5e#ff6e5ered
#f1ff5e#f1ff5eyellow
#ff5ef1#ff5ef1magenta
#ff5ea0#ff5ea0pink
#ffbd5e#ffbd5eorange
#bd5eff#bd5effpurple
Light
๐Ÿ–ŒHexColor
#ffffff#ffffffbg
#eaeaea#eaeaeabg_alt
#acacac#acacacbg_highlight
#16181a#16181afg
#7b8496#7b8496grey
#0057d1#0057d1blue
#008b0c#008b0cgreen
#008c99#008c99cyan
#d11500#d11500red
#997b00#997b00yellow
#d100bf#d100bfmagenta
#f40064#f40064pink
#d17c00#d17c00orange
#a018ff#a018ffpurple

๐Ÿค Contributing

Contributions are welcome! Please read the contributing guidelines to get started.


1. For Lazyvim users, refer to the LazyVim docs for specific instructions.