Skip to content

Neovim

Neovim can be themed using the Noctalia via the base16 colorscheme.

  1. Enable User Templates in Noctalia:

    • Open Settings → Color Scheme → Templates → Advanced → Enable User Templates
  2. Add a user template for neovim

    • Copy this into /.config/noctalia/user-templates.toml
    [templates.nvim-base16]
    input_path = "~/.config/nvim/lua/matugen-template.lua"
    output_path = "~/.config/nvim/lua/matugen.lua"
    post_hook = 'pkill -SIGUSR1 nvim'
  3. Install the base16 colorscheme by RRethy, using your package manager of choice. e.g. with Lazy:

    return { 'RRethy/base16-nvim',
    config = function()
    require('matugen').setup()
    end,
    }
  4. Add the template to your neovim configuration: Add the following file to you neovim configuration (in ~/.config/nvim/lua/matugen-template.lua, as above):

    local M = {}
    function M.setup()
    require('base16-colorscheme').setup {
    -- Background tones
    base00 = '{{colors.surface.default.hex}}', -- Default Background
    base01 = '{{colors.surface_container.default.hex}}', -- Lighter Background (status bars)
    base02 = '{{colors.surface_container_high.default.hex}}', -- Selection Background
    base03 = '{{colors.outline.default.hex}}', -- Comments, Invisibles
    -- Foreground tones
    base04 = '{{colors.on_surface_variant.default.hex}}', -- Dark Foreground (status bars)
    base05 = '{{colors.on_surface.default.hex}}', -- Default Foreground
    base06 = '{{colors.on_surface.default.hex}}', -- Light Foreground
    base07 = '{{colors.on_background.default.hex}}', -- Lightest Foreground
    -- Accent colors
    base08 = '{{colors.error.default.hex}}', -- Variables, XML Tags, Errors
    base09 = '{{colors.tertiary.default.hex}}', -- Integers, Constants
    base0A = '{{colors.secondary.default.hex}}', -- Classes, Search Background
    base0B = '{{colors.primary.default.hex}}', -- Strings, Diff Inserted
    base0C = '{{colors.tertiary_fixed_dim.default.hex}}', -- Regex, Escape Chars
    base0D = '{{colors.primary_fixed_dim.default.hex}}', -- Functions, Methods
    base0E = '{{colors.secondary_fixed_dim.default.hex}}', -- Keywords, Storage
    base0F = '{{colors.error_container.default.hex}}', -- Deprecated, Embedded Tags
    }
    end
    -- Register a signal handler for SIGUSR1 (matugen updates)
    local signal = vim.uv.new_signal()
    signal:start(
    'sigusr1',
    vim.schedule_wrap(function()
    package.loaded['matugen'] = nil
    require('matugen').setup()
    end)
    )
    return M

    The setup function applies the theme, while the signal handler clears the old theme module out of the lua cache, then applies the new theme, whenever nvim is signalled with SIGUSR1.

  5. Setup base16 in your init.lua

    require('matugen').setup()

When you restart neovim, it should use your noctalia theme.