Skip to content

54L1M/Oshen.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Oil

Snacks picker

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

Source colors

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
Full palette

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

About

A dark Neovim colorscheme inspired by deep ocean water at night

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors