Skip to content

Neovim

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

  1. Add a user template for neovim
  • Add this to any TOML file under ~/.config/noctalia/ (for example ~/.config/noctalia/nvim.toml). A user template becomes active as soon as its entry exists; there is no separate toggle to enable it. Set enabled = false on the entry to keep it defined but inactive.

    [theme.templates.user.nvim_base16]
    input_path = "~/.config/nvim/lua/matugen-template.lua"
    output_path = "~/.config/nvim/lua/matugen.lua"
    post_hook = 'pkill -SIGUSR1 nvim'
  1. 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,
    }
  2. 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.

  3. Setup base16 in your init.lua

    require('matugen').setup()

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