README.md

July 27, 2026 · View on GitHub

Flume

Organic synthesis. Soft contrast. Resonant code.

Opal, Mesa, Mira, and Dusk in a cascading palette showcase

Flume is a Neovim colorscheme with four carefully tuned appearances and matching themes for ten terminal and developer tools. It favors neutral identifiers, semantic color, soft surfaces, and enough contrast for long sessions.

PaletteAppearanceCharacter
DuskDarkOriginal quiet violet Flume
OpalLightVivid inks on cool opalescent paper
MiraDarkTechnical plum with cyan, teal, and magenta
MesaLightWarm rose-mineral paper

Why Flume

  • Four named palettes with consistent semantic roles across dark and light.
  • Tree-sitter, LSP semantic tokens, diagnostics, terminal colors, and popular Neovim plugin highlights.
  • Matching generated themes for Ghostty, Kitty, Tmux, LSD, OpenCode, Lazygit, fzf, Delta, Pi, and Tuxedo.
  • Exact role overrides, transparent mode, and optional syntax styles.
  • Tested palette contrast, generated-format contracts, and atomic integration switching.

Flume takes its visual direction from Jonathan Zawada's artwork for Flume: organic forms meeting synthetic surfaces, spectral color, and digital interruption. See the color contract and generated palette manifest.

Install

Requires Neovim 0.9+ and true-color support.

lazy.nvim

{
    "mitander/flume.nvim",
    lazy = false,
    priority = 1000,
    config = function()
        vim.opt.termguicolors = true
        require("flume").setup({ schema = "dusk" })
    end,
}

setup() configures and applies Flume once. Do not follow it with another :colorscheme call.

If no Lua options are needed, use a colorscheme entry point instead:

colorscheme flume-dusk
" Also available: flume-opal, flume-mira, flume-mesa

Configure

require("flume").setup({
    schema = "dusk", -- dusk, opal, mira, or mesa
    transparent = false,
    terminal_colors = true,
    overrides = {},
    highlights = {},
    styles = {
        comments = {},
        functions = {},
        keywords = {},
        strings = {},
        types = {},
        variables = {},
    },
})

Follow system appearance

Flume does not install an OS watcher. Select a light or dark palette from your existing appearance hook:

require("flume").setup({
    schema = vim.o.background == "light" and "opal" or "dusk",
})

Override colors and highlights

require("flume").setup({
    schema = "opal",
    overrides = {
        syntax_comment = "#7a747a",
        accent = "#5f9cab",
    },
    styles = { comments = { italic = true } },
    highlights = {
        CursorLineNr = { fg = "#ffffff", bold = true },
    },
})

Use :Inspect or :highlight GroupName to identify an exact highlight group. Runtime saturation transforms are intentionally excluded: exact overrides keep Neovim and external integrations predictable.

Integrations

Every palette has a committed artifact for each supported tool. Dusk examples:

AppArtifact
Ghosttyextras/ghostty/flume-dusk
Kittyextras/kitty/flume-dusk.conf
Tmuxextras/tmux/colors-dusk.conf
LSDextras/lsd/colors-dusk.yaml
OpenCodeextras/opencode/flume-dusk.json
Lazygitextras/lazygit/flume-dusk.yml
fzfextras/fzf/flume-dusk.opts
Deltaextras/delta/flume-dusk.gitconfig
Piextras/pi/flume-dusk.json
Tuxedoextras/tuxedo/flume-dusk.toml

Switch the editor and active external set together:

:FlumeSync mira

Flume can safely install active links for Ghostty, Kitty, OpenCode, Tmux, and LSD:

:FlumeInstallExtras

The remaining tools have user-specific include locations, so Flume provides canonical artifacts without guessing destinations. Add the listed artifact through that tool's own theme or include mechanism. :FlumeExtras prints refusal-safe link instructions only for the five tools with standard paths.

Commands

CommandAction
:FlumeReloadReload the editor-local palette
:FlumeCompileRegenerate all forty integration artifacts
:FlumeSync [schema]Apply a palette and activate its integration set
:FlumeInstallExtras [app]Link integrations with safe standard destinations
:FlumeExtrasShow safe-path link instructions for the installable five
:checkhealth flumeCheck the selected palette and generated files
:help flumeOpen the reference manual

Development and release evidence

./scripts/check
nvim --headless --clean -c "lua dofile('scripts/generate-palette-manifest.lua')"
./scripts/screenshot-window.sh dusk
./scripts/screenshot-window.sh opal
./scripts/screenshot-window.sh mira
./scripts/screenshot-window.sh mesa
python3 scripts/preflight-screenshots.py
python3 scripts/compose_showcase.py

The deterministic marketing fixture renders valid Zig with representative syntax and comments, without diagnostics, notifications, Git state, or a language server. Format contracts and native contact sheets cover integration and state-heavy surfaces separately. See showcase production for canonical captures and the contact-sheet production recipe.

Wallpaper

background.png is available at its original 1376×768 resolution.

License

MIT. See LICENSE.