54L1M/Oshen.nvim

github github
colorscheme
stars 18
issues 0
subscribers 1
forks 1
CREATED

UPDATED


Oshen.nvim

A Neovim colorscheme inspired by deep ocean water — five colors drawn from the sea's amber bioluminescence, sea foam, midnight navy, and the shifting blues between shallow and abyss. Ships dark (oshen-night) and light (oshen-day) variants, with first-class support for transparent terminals, and built to stay out of the way while you work.

Named after shenfiles, my personal dotfiles.

Code

Oil

Snacks picker


Requirements


Installation

lazy.nvim

{
  "54L1M/Oshen.nvim",
  lazy = false,
  priority = 1000,
  config = function()
    require("oshen").setup({
      transparent = true, -- set false for opaque background
    })
    vim.cmd.colorscheme("oshen-night") -- or "oshen-day" for light
  end,
}

rocks.nvim

[plugins]
"Oshen.nvim" = "scm"

Configuration

require("oshen").setup({
  -- Remove all background colors so your terminal wallpaper shows through.
  -- Pairs well with ghostty's background-opacity setting.
  transparent = false, -- default
})

Light mode

Oshen ships both a dark and a light palette as two colorscheme variants. Each sets Neovim's background option for you, and Oshen re-applies itself automatically whenever background changes. Pick one in your config:

vim.cmd.colorscheme("oshen-night")  -- dark
vim.cmd.colorscheme("oshen-day")    -- light

Toggle at runtime — the colorscheme updates live:

:set background=light
:set background=dark

Both variants (oshen-day, oshen-night) appear as separate, previewable entries in colorscheme pickers like fzf-lua and Telescope.

Note: transparent is a dark-mode feature. The light palette depends on its solid backgrounds, so transparency is automatically disabled when background=light.


Features

  • Transparent background support — your wallpaper shows through everywhere
  • Treesitter semantic highlight groups
  • LSP diagnostics and semantic tokens
  • Modular architecture — groups and integrations are isolated files, easy to extend
  • JetBrainsMono Nerd Font glyph-aware

Plugin support

Plugin
gitsigns.nvim
blink.cmp
oil.nvim
snacks.nvim
lualine.nvim ✓ built-in theme
which-key.nvim
vim-illuminate
nvim-ufo
render-markdown.nvim
todo-comments.nvim
nvim-treesitter-context
nvim-dap
harpoon
mini.nvim
tiny-inline-diagnostic.nvim

Palette

The entire scheme is derived from five source colors. Nothing more.

Role Hex Preview
Keywords / Numbers #ffb703 #ffb703
Foreground #f1faee #f1faee
Functions #abdadc #abdadc
Borders / Accents #457b9d #457b9d
Selection / UI #1d3567 #1d3567

Backgrounds

Name Hex Preview Usage
crust #060810 #060810 Deepest background, extreme fills
mantle #090c12 #090c12 Panels, popups, sidebars
base #0e1117 #0e1117 Main editor background

Surfaces

Name Hex Preview Usage
surface0 #131c2b #131c2b Cursorline, word highlights
surface1 #1e2d42 #1e2d42 Raised UI (TreesitterContext, etc.)
surface2 #2a3f58 #2a3f58 Hover states, picker selections

Overlays

Name Hex Preview Usage
overlay0 #3d5570 #3d5570 Invisible guides, whitespace chars
overlay1 #526d82 #526d82 Comments, inactive line numbers
overlay2 #6a8599 #6a8599 Operators, punctuation, conceal

Text tiers

Name Hex Preview Usage
subtext0 #8899aa #8899aa Secondary info, statusline text
subtext1 #b0c4d8 #b0c4d8 Brighter secondary, parameters
text #f1faee #f1faee Main foreground

Accents

Name Hex Preview Usage
amber #ffb703 #ffb703 Keywords, numbers, cursor
peach #e8944a #e8944a Warnings, orange tokens
green #a8c97f #a8c97f Strings, git added
sky #7ab8d4 #7ab8d4 String escapes, special punctuation
teal #abdadc #abdadc Functions, info diagnostics
steel #457b9d #457b9d Borders, accents
lavender #c3a0d8 #c3a0d8 Types, hints, constructors
red #e05c6e #e05c6e Errors, git deleted
navy #1d3567 #1d3567 Visual selection, deep UI chrome

Lualine

A built-in lualine theme is included. The b and c sections use NONE background so they blend into a transparent terminal.

require("lualine").setup({
  options = {
    theme = require("oshen.integrations.lualine").get(),
    section_separators = "",
    component_separators = "",
  },
})

Mode colors:

Mode Hex Name Preview
NORMAL #abdadc teal #abdadc
INSERT #a8c97f green #a8c97f
VISUAL #c3a0d8 lavender #c3a0d8
COMMAND #ffb703 amber #ffb703
REPLACE #e05c6e red #e05c6e

Plugin structure

lua/oshen/
├── init.lua                   public API (setup / load / get_palette)
├── palette.lua                all color definitions
├── highlights.lua             thin orchestrator — loads groups + integrations
├── groups/
│   ├── editor.lua             core editor UI
│   ├── syntax.lua             legacy vim syntax groups
│   ├── treesitter.lua         @capture groups
│   ├── lsp.lua                LSP diagnostics
│   ├── semantic_tokens.lua    @lsp.type.* and @lsp.mod.*
│   └── terminal.lua           vim.g.terminal_color_N
└── integrations/
    ├── lualine.lua
    ├── gitsigns.lua
    ├── illuminate.lua
    ├── blink.lua
    ├── oil.lua
    ├── snacks.lua
    ├── whichkey.lua
    ├── ufo.lua
    ├── render_markdown.lua
    ├── todo_comments.lua
    ├── treesitter_context.lua
    ├── dap.lua
    ├── harpoon.lua
    ├── mini.lua
    └── tiny_inline_diagnostic.lua

Adding a new integration

Create lua/oshen/integrations/myplugin.lua following this pattern:

local M = {}

local function hi(group, opts)
  vim.api.nvim_set_hl(0, group, opts)
end

function M.apply(p, transparent)
  hi("MyPluginNormal", { fg = p.text, bg = transparent and p.none or p.mantle })
end

return M

Then add "oshen.integrations.myplugin" to the integrations list in highlights.lua.


Accessing the palette

Other plugins or your own config can read the full color table:

local p = require("oshen").get_palette()

-- Example: custom indent-blankline colors
vim.api.nvim_set_hl(0, "IblIndent", { fg = p.overlay0 })
vim.api.nvim_set_hl(0, "IblScope",  { fg = p.overlay2 })

Ghostty + tmux

A matching Ghostty config and tmux palette are included in shenfiles.

Ghostty settings used with this theme:

background-opacity = 0.65
font-family = "JetBrainsMono Nerd Font Mono"

Contributing

Issues and PRs are welcome — especially for plugin integrations not listed above.

See CONTRIBUTING.md for setup instructions, the integration pattern, commit style, and PR guidelines.


License

MIT