🎨 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.
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 },
}
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.
Popular Colorschemes
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
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 = {
alpha = true,
cmp = true,
gitsigns = true,
illuminate = true,
indent_blankline = { enabled = true },
mason = true,
native_lsp = { enabled = true },
neotree = true,
notify = true,
treesitter = true,
which_key = true,
},
},
},
}