Skip to main content

🎨 Colorscheme

FtVim uses Catppuccin as the default colorscheme. This guide shows you how to customize or change it.

Using a Different Colorscheme​

The simplest way to change the colorscheme is in your ~/.config/nvim/lua/config/lazy.lua. Just add the opts key to the FtVim spec:

spec = {
{
"FtVim/FtVim",
import = "ftvim.plugins",
opts = {
colorscheme = "tokyonight", -- any installed colorscheme
},
},
{ import = "plugins" },
},

That's it! FtVim handles loading the colorscheme for you.

tip

Tokyo Night and Kanagawa are already bundled with FtVim, so just setting colorscheme in opts is enough. For other colorschemes, you also need to add the plugin (see examples below).

Adding a New Colorscheme Plugin​

If the colorscheme you want isn't bundled with FtVim, add its plugin in ~/.config/nvim/lua/plugins/colorscheme.lua:

return {
{
"rose-pine/neovim",
name = "rose-pine",
lazy = false,
priority = 1000,
opts = {
variant = "main", -- main, moon, dawn
},
},

-- Optionally disable catppuccin if you don't need it
-- { "catppuccin/nvim", enabled = false },
}

And set it in your lazy.lua:

opts = {
colorscheme = "rose-pine",
},

Changing Catppuccin Flavor​

Catppuccin has four flavors: latte (light), frappe, macchiato, and mocha (darkest).

Create ~/.config/nvim/lua/plugins/colorscheme.lua:

return {
{
"catppuccin/nvim",
name = "catppuccin",
opts = {
flavour = "frappe", -- latte, frappe, macchiato, mocha
},
},
}

Alternative: Set Colorscheme in Plugin Config​

You can also set the colorscheme directly in a plugin's config function. FtVim will detect the change and won't overwrite it:

-- ~/.config/nvim/lua/plugins/colorscheme.lua
return {
{
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
vim.cmd.colorscheme("tokyonight")
end,
},

-- Optionally disable catppuccin
{ "catppuccin/nvim", enabled = false },
}
note

The recommended approach is setting colorscheme in opts in your lazy.lua (shown above). It's simpler and keeps all your FtVim configuration in one place.

Here are some popular colorschemes. For each one, set colorscheme in your lazy.lua opts and add the plugin spec in ~/.config/nvim/lua/plugins/colorscheme.lua.

Tokyo Night​

Already bundled — just set it in lazy.lua:

opts = { colorscheme = "tokyonight" }

To customize, create lua/plugins/colorscheme.lua:

return {
{
"folke/tokyonight.nvim",
opts = {
style = "night", -- night, storm, day, moon
},
},
}

Kanagawa​

Already bundled — just set it in lazy.lua:

opts = { colorscheme = "kanagawa" }

To customize, create lua/plugins/colorscheme.lua:

return {
{
"rebelot/kanagawa.nvim",
opts = {
theme = "wave", -- wave, dragon, lotus
},
},
}

Rose Pine​

In lazy.lua:

opts = { colorscheme = "rose-pine" }

In lua/plugins/colorscheme.lua:

return {
{
"rose-pine/neovim",
name = "rose-pine",
lazy = false,
priority = 1000,
opts = {
variant = "main", -- main, moon, dawn
},
},
}

Gruvbox Material​

In lazy.lua:

opts = { colorscheme = "gruvbox-material" }

In lua/plugins/colorscheme.lua:

return {
{
"sainnhe/gruvbox-material",
lazy = false,
priority = 1000,
config = function()
vim.g.gruvbox_material_background = "medium" -- hard, medium, soft
end,
},
}

Nord​

In lazy.lua:

opts = { colorscheme = "nord" }

In lua/plugins/colorscheme.lua:

return {
{
"shaunsingh/nord.nvim",
lazy = false,
priority = 1000,
},
}

One Dark​

In lazy.lua:

opts = { colorscheme = "onedark" }

In lua/plugins/colorscheme.lua:

return {
{
"navarasu/onedark.nvim",
lazy = false,
priority = 1000,
opts = {
style = "dark", -- dark, darker, cool, deep, warm, warmer
},
config = function(_, opts)
require("onedark").setup(opts)
require("onedark").load()
end,
},
}

Temporary Change​

To change the colorscheme temporarily (current session only):

:colorscheme <name>

For example:

:colorscheme tokyonight
note

Temporary changes are lost when you restart Neovim. For permanent changes, follow the steps above.

Customizing Colors​

Most colorschemes support customization. Check the colorscheme's documentation for available options.

Example with Catppuccin in lua/plugins/colorscheme.lua:

return {
{
"catppuccin/nvim",
name = "catppuccin",
opts = {
flavour = "mocha",
transparent_background = true,
integrations = {
blink_cmp = true,
gitsigns = true,
illuminate = true,
mason = true,
native_lsp = { enabled = true },
neotree = true,
snacks = true,
treesitter = true,
which_key = true,
},
},
},
}