Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

384 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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
Plugin Highlights
alpha-nvim alpha
blink.cmp blinkcmp
dashboard-nvim dashboard
nvim-dap-ui dapui
fzf-lua fzflua
gitsigns.nvim gitsigns
gitpad.nvim gitpad
grapple.nvim grapple
grug-far.nvim grugfar
heirline-components.nvim heirline
helpview.nvim helpview
hop.nvim hop
indent-blankline.nvim indentblankline
kubectl.nvim kubectl
lazy.nvim lazy
leap.nvim leap
lualine.nvim lualine
markview.nvim markview
mini.nvim mini
noice.nvim noice
nvim-cmp cmp
nvim-notify notify
nvim-treesitter treesitter
nvim-treesitter-context treesittercontext
rainbow-delimiters.nvim rainbow_delimiters
render-markdown.nvim markdown
telescope.nvim telescope
trouble.nvim trouble
which-key.nvim whichkey

πŸ“¦ 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, "muted" for a softer dark 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
πŸ–Œ Hex Color
#16181a #16181a bg
#1e2124 #1e2124 bg_alt
#3c4048 #3c4048 bg_highlight
#ffffff #ffffff fg
#7b8496 #7b8496 grey
#5ea1ff #5ea1ff blue
#5eff6c #5eff6c green
#5ef1ff #5ef1ff cyan
#ff6e5e #ff6e5e red
#f1ff5e #f1ff5e yellow
#ff5ef1 #ff5ef1 magenta
#ff5ea0 #ff5ea0 pink
#ffbd5e #ffbd5e orange
#bd5eff #bd5eff purple
Muted
πŸ–Œ Hex Color
#16181a #16181a bg
#1e2124 #1e2124 bg_alt
#3c4048 #3c4048 bg_highlight
#ffffff #ffffff fg
#7b8496 #7b8496 grey
#78a8e8 #78a8e8 blue
#7ee088 #7ee088 green
#7ed8e8 #7ed8e8 cyan
#e8796f #e8796f red
#e3c875 #e3c875 yellow
#e878d8 #e878d8 magenta
#e878a8 #e878a8 pink
#e3a875 #e3a875 orange
#b07ee8 #b07ee8 purple
Light
πŸ–Œ Hex Color
#ffffff #ffffff bg
#eaeaea #eaeaea bg_alt
#acacac #acacac bg_highlight
#16181a #16181a fg
#7b8496 #7b8496 grey
#0057d1 #0057d1 blue
#008b0c #008b0c green
#008c99 #008c99 cyan
#d11500 #d11500 red
#997b00 #997b00 yellow
#d100bf #d100bf magenta
#f40064 #f40064 pink
#d17c00 #d17c00 orange
#a018ff #a018ff purple

🀝 Contributing

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


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

Releases

Sponsor this project

Used by

Contributors

Languages