Skip to content

binhtran432k/dracula.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧛 Dracula

A dark and light Neovim theme written in Lua ported from the Visual Studio Code Dracula theme.

Default

image

Soft

image

Day

image

✨ Features

  • Supports the latest Neovim 0.9.0 features.
  • Enhances terminal colors.
  • Introduces a darker background option for sidebar-like windows.
  • Supports all major plugins.

⚡️ Requirements

📦 Installation

Install the theme with your preferred package manager, such as folke/lazy.nvim:

{
  "binhtran432k/dracula.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
}

🚀 Usage

Vim Script

colorscheme dracula

" There are also colorschemes for the different styles.
colorscheme dracula-soft
colorscheme dracula-day
vim.cmd[[colorscheme dracula]]

External Plugins

-- Lua
require('barbecue').setup {
  -- ... your barbecue config
  theme = 'dracula',
  -- ... your barbecue config
}
-- Lua
require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'dracula'
    -- ... your lualine config
  }
}
" Vim Script
let g:lightline = {'colorscheme': 'dracula'}

⚙️ Configuration

❗️ Set the configuration BEFORE loading the color scheme with colorscheme dracula.

The theme offers four styles: default, soft and day.

The day style is used when { style = "day" } is passed to setup(options) or when vim.o.background = "light".

Dracula uses the default options, unless setup is explicitly called.

require("dracula").setup({
  -- your configuration comes here
  -- or leave it empty to use the default settings
  style = "default", -- The theme comes in three styles, `default`, a darker variant `soft` and `day`
  light_style = "day", -- The theme is used when the background is set to light
  transparent = false, -- Enable this to disable setting the background color
  terminal_colors = true, -- Configure the colors used when opening a `:terminal` in Neovim
  styles = {
    -- Style to be applied to different syntax groups
    -- Value is any valid attr-list value for `:help nvim_set_hl`
    comments = { italic = true },
    keywords = { italic = true },
    functions = {},
    variables = {},
    -- Background styles. Can be "dark", "transparent" or "normal"
    sidebars = "dark", -- style for sidebars, see below
    floats = "dark", -- style for floating windows
  },
  sidebars = { "qf", "help" }, -- Set a darker background on sidebar-like windows. For example: `["qf", "vista_kind", "terminal", "packer"]`
  day_brightness = 0.3, -- Adjusts the brightness of the colors of the **Day** style. Number between 0 and 1, from dull to vibrant colors
  hide_inactive_statusline = false, -- Enabling this option, will hide inactive statuslines and replace them with a thin border instead. Should work with the standard **StatusLine** and **LuaLine**.
  dim_inactive = false, -- dims inactive windows
  lualine_bold = false, -- When `true`, section headers in the lualine theme will be bold

  --- You can override specific color groups to use other groups or a hex color
  --- function will be called with a ColorScheme table
  on_colors = function() end,

  --- You can override specific highlights to use other groups or a hex color
  --- function will be called with a Highlights and ColorScheme table
  on_highlights = function() end,
  use_background = true, -- can be light/dark/auto. When auto, background will be set to vim.o.background
})

🪓 Overriding Colors & Highlight Groups

How the highlight groups are calculated:

  1. colors are determined based on your configuration, with the ability to override them using config.on_colors(colors).
  2. These colors are utilized to generate the highlight groups.
  3. config.on_highlights(highlights, colors) can be used to override highlight groups.

Settings and color alteration demonstration

require("dracula").setup({
  -- use the night style
  style = "soft",
  -- disable italic for functions
  styles = {
    functions = {}
  },
  sidebars = { "qf", "vista_kind", "terminal", "packer" },
  -- Change the "hint" color to the "orange" color, and make the "error" color bright red
  on_colors = function(colors)
    colors.hint = colors.orange
    colors.error = "#ff0000"
  end
})
require("dracula").setup({
  on_highlights = function(hl, c)
    local prompt = c.darker_bg
    hl.TelescopeNormal = {
      bg = c.dark_bg,
      fg = c.dark_fg,
    }
    hl.TelescopeBorder = {
      bg = c.dark_bg,
      fg = c.dark_bg,
    }
    hl.TelescopePromptNormal = {
      bg = prompt,
    }
    hl.TelescopePromptBorder = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePromptTitle = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePreviewTitle = {
      bg = c.dark_bg,
      fg = c.dark_bg,
    }
    hl.TelescopeResultsTitle = {
      bg = c.dark_bg,
      fg = c.dark_bg,
    }
  end,
})

Fix undercurls in Tmux

To have undercurls show up and in color, add the following to your Tmux configuration file:

# Undercurl
set -g default-terminal "${TERM}"
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'  # undercurl support
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'  # underscore colours - needs tmux-3.0

🔥 Contributing

Pull requests are welcome.

About

Dracula theme for Neovim

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages