Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

marko-cerovac/material.nvim

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

447 Commits
447 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

material.nvim

Neovim Lua

NeoVim colorscheme based on Material theme colors.


🔱 Info

A colorscheme for NeoVim that takes inspiration from the original Material theme.

Material.nvim is meant to be a fast and modern colorscheme written in Lua that supports a lot of the new features added to NeoVim like built-in LSP and TreeSitter

🌊 Features

  • 5 styles to choose from

    • Oceanic 2022-04-18-01:21:38-screenshot

    • Deep ocean 2022-04-18-01:21:16-screenshot

    • Palenight 2022-04-18-01:21:33-screenshot

    • Lighter 2022-04-18-01:21:28-screenshot

    • Darker 2022-04-18-01:21:22-screenshot

  • Many supported plugins

  • Ability to change background on sidebar-like windows like Nvim-Tree, Packer, terminal etc.

  • Asynchronous highlight loading which makes the theme blazingly fast

  • Ability to select styles using telescope.nvim

  • Added functions for live theme switching without the need to restart NeoVim

  • Two Lualine themes

    • Default: default-oceanic default-darker default-deep-ocean default-palenight default-lighter

    • Stealth stealth-oceanic stealth-darker stealth-deep-ocean stealth-palenight stealth-lighter

⚡️ Requirements

  • Neovim >= 0.7.0

⚓ Installation

Install via your favourite package manager:

-- If you are using Lazy
require('lazy').setup({
    'marko-cerovac/material.nvim'
}, opts)

-- If you are using Pckr
require('pckr').add({
    'marko-cerovac/material.nvim'
})

🐬 Usage

Enable the colorscheme:

--Lua:
vim.cmd 'colorscheme material'

For a complete guide on usage and configuration of the theme, see :help material.nvim.

⚙️ Configuration

  • There are 5 different styles available:
    • darker
    • lighter
    • oceanic
    • palenight
    • deep ocean

Set the desired style using:

--Lua:
vim.g.material_style = "deep ocean"

The configuration of different options is done trough a setup function

This is an example of the function with the default values

require('material').setup({

    contrast = {
        terminal = false, -- Enable contrast for the built-in terminal
        sidebars = false, -- Enable contrast for sidebar-like windows ( for example Nvim-Tree )
        floating_windows = false, -- Enable contrast for floating windows
        cursor_line = false, -- Enable darker background for the cursor line
        lsp_virtual_text = false, -- Enable contrasted background for lsp virtual text
        non_current_windows = false, -- Enable contrasted background for non-current windows
        filetypes = {}, -- Specify which filetypes get the contrasted (darker) background
    },

    styles = { -- Give comments style such as bold, italic, underline etc.
        comments = { --[[ italic = true ]] },
        strings = { --[[ bold = true ]] },
        keywords = { --[[ underline = true ]] },
        functions = { --[[ bold = true, undercurl = true ]] },
        variables = {},
        operators = {},
        types = {},
    },

    plugins = { -- Uncomment the plugins that you use to highlight them
        -- Available plugins:
        -- "blink",
        -- "coc",
        -- "colorful-winsep",
        -- "dap",
        -- "dashboard",
        -- "eyeliner",
        -- "fidget",
        -- "flash",
        -- "gitsigns",
        -- "harpoon",
        -- "hop",
        -- "illuminate",
        -- "indent-blankline",
        -- "lspsaga",
        -- "mini",
        -- "neo-tree",
        -- "neogit",
        -- "neorg",
        -- "neotest",
        -- "noice",
        -- "nvim-cmp",
        -- "nvim-navic",
        -- "nvim-notify",
        -- "nvim-tree",
        -- "nvim-web-devicons",
        -- "rainbow-delimiters",
        -- "sneak",
        -- "telescope",
        -- "trouble",
        -- "which-key",
    },

    disable = {
        colored_cursor = false, -- Disable the colored cursor
        borders = false, -- Disable borders between vertically split windows
        background = false, -- Prevent the theme from setting the background (NeoVim then uses your terminal background)
        term_colors = false, -- Prevent the theme from setting terminal colors
        eob_lines = false -- Hide the end-of-buffer lines
    },

    high_visibility = {
        lighter = false, -- Enable higher contrast text for lighter style
        darker = false -- Enable higher contrast text for darker style
    },

    lualine_style = "default", -- Lualine style ( can be 'stealth' or 'default' )

    async_loading = true, -- Load parts of the theme asynchronously for faster startup (turned on by default)

    custom_colors = nil, -- If you want to override the default colors, set this to a function

    custom_highlights = {}, -- Overwrite highlights with your own
})

After passing the configuration to a setup function, make sure to enable the colorscheme:

vim.cmd 'colorscheme material'

This is an example of overwriting the default highlights and colors (most users will never need to do this)

local material = require 'material'
local colors = require 'material.colors'

material.setup{
    custom_highlights = {
        LineNr = { bg = '#FF0000' },
        CursorLine = { fg = colors.editor.constrast , underline = true },

        -- Dynamically override highlight groups with functions to ensure colors are
        -- updated when changing styles at runtime
        TabLine = function(colors, _)
            return {
                fg = colors.main.gray,
                italic = true,
            }
        end,
        TabLineSel = function(_, highlights)
            return vim.tbl_extend(
                "force",
                highlights.main_highlights.editor()["TabLineSel"],
                { bold = true }
            )
        end,

        -- This is a list of possible values
        YourHighlightGroup = {
            fg = "#SOME_COLOR", -- foreground color
            bg = "#SOME_COLOR", -- background color
            sp = "#SOME_COLOR", -- special color (for colored underlines, undercurls...)
            bold = false, -- make group bold
            italic = false, -- make group italic
            underline = false, -- make group underlined
            undercurl = false, -- make group undercurled
            underdot = false, -- make group underdotted
            underdash = false, -- make group underslashed
            striketrough = false, -- make group striked trough
            reverse = false, -- reverse the fg and bg colors
            link = "SomeOtherGroup" -- link to some other highlight group
        }
    },

    -- Custom colors must be a function that takes in the default colors table as
    -- a parameter, and then modifies them.
    -- To see the available colors, see lua/material/colors/init.lua
    custom_colors = function(colors)
        colors.editor.bg = "#SOME_COLOR"
        colors.main.purple = "#SOME_COLOR"
        colors.lsp.error = "#SOME_COLOR"
    end
}

To enable transparency, it is suggested you disable the theme background from the settings above. That way, your terminal's background will be used instead.

require('material').setup({
    -- ... other settings
    disable = {
        -- ... other settings
        background = true, 
    },
})

To enable the lualine themes, first set the theme in your lualine settings to auto or material

require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'auto'
    or
    theme = 'material'
    -- ... your lualine config
  }
}

Then, choose the style trough a variable called lualine_style in the theme setup function

require('material').setup({
    lualine_style = 'default' -- the default style
    or
    lualine_style = 'stealth' -- the stealth style
})

If the theme, doesn't look right, it's probably because material.nvim is being loaded before lualine, causing the other material theme that comes built-in to lualine to be used. To fix this, either load material.nvim after lualine (preferred way) or set the lualine theme to one of these two values in your lualine settings

require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'material-nvim' -- the default style
    or
    theme = 'material-stealth' -- the stealth style
    -- ... your lualine config
  }
}

⛵ Functions

  • Use Telescope.nvim to switch styles

telescope_finder

:lua require("material.functions").find_style()
  • Cycle trough styles
:lua require('material.functions').toggle_style()
  • Toggle the end of buffer lines ( ~ )
:lua require('material.functions').toggle_eob()
  • Change the style to a desired one using the function change_style("desired style")
:lua require('material.functions').change_style("palenight")

About

🔱 Material colorscheme for NeoVim written in Lua with built-in support for native LSP, TreeSitter and many more plugins

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.