https://github.com/szymonwilczek/arete.nvim
Protesilaos GNU Emacs themes for Neovim
https://github.com/szymonwilczek/arete.nvim
colorscheme doric-themes ef-themes emacs lua modus-themes neovim neovim-plugin nvim prot prot16 protesilaos tempus-themes theme themes
Last synced: 16 days ago
JSON representation
Protesilaos GNU Emacs themes for Neovim
- Host: GitHub
- URL: https://github.com/szymonwilczek/arete.nvim
- Owner: szymonwilczek
- License: gpl-2.0
- Created: 2026-05-22T16:06:22.000Z (27 days ago)
- Default Branch: main
- Last Pushed: 2026-05-23T14:01:49.000Z (26 days ago)
- Last Synced: 2026-05-23T15:21:30.945Z (26 days ago)
- Topics: colorscheme, doric-themes, ef-themes, emacs, lua, modus-themes, neovim, neovim-plugin, nvim, prot, prot16, protesilaos, tempus-themes, theme, themes
- Language: Lua
- Homepage:
- Size: 31.2 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
arete.nvim
Collection of all protesilaos GNU Emacs themes ported for Neovim.
`arete.nvim` is built on a **custom, highly optimized bytecode compiler and caching engine**. It statically compiles your customization overrides and theme data into pure Lua bytecode. *Yeah, it's fast.*
## Motivation & Philosophy
I've been using GNU Emacs for a very long time, and Prot's themes (especially the *modus* and *ef* families) were my daily drivers. When I started spending more time in Neovim, I genuinely felt like I was missing my right hand. The editor itself was fantastic, but none of the existing colorschemes could replicate that perfect balance of contrast, readability, and visual calm that Prot spent years perfecting.
I created `arete.nvim` because I wanted *us* (*the Neovimers*) to also have nice things, without having to compromise on color accuracy or settle for partial ports.
The name *arete* (ἀρετή) is the ancient Greek word for excellence. I'm trying to continue the legacy with the naming convention. This plugin is my attempt to bring that standard of visual excellence from the Emacs world to Neovim, without sacrificing the
speed we expect from our editor.
## Installation
### lazy.nvim
```lua
{
"szymonwilczek/arete.nvim",
lazy = false,
priority = 1000,
}
```
### mini.deps
```lua
add("szymonwilczek/arete.nvim")
```
### packer.nvim
```lua
use { "szymonwilczek/arete.nvim" }
```
### vim-plug
```vim
Plug 'szymonwilczek/arete.nvim'
```
## Configuration
```lua
local arete = require("arete")
arete.setup({
-- Enable transparent background for the editor
transparent = false,
-- Use the bytecode cache engine (highly recommended for performance)
cache = true,
-- Set specific styles for specific syntax highlight groups
-- Can be any valid attr-list value. See `:h nvim_set_hl`
styles = {
comments = { italic = true },
keywords = { bold = true },
types = { bold = true },
functions = {},
variables = {},
},
-- Direct, unconditional group overrides
-- Can be a table or a function returning a table
groups = {
-- CustomHighlight = { fg = "#ff0000", bg = "NONE" },
},
-- Programmatic highlight overrides based on the loaded theme
---@param highlights table
---@param name string
---@return table
on_highlights = function(highlights, name)
-- return {
-- NormalFloat = { fg = highlights.Normal.fg, bg = "NONE" },
-- }
end,
})
-- To apply a theme, simply use the standard Neovim colorscheme command
vim.cmd.colorscheme("ef-bio")
```
## Customizing
`arete.nvim` exposes a small Lua API for loading themes, reading the current options, and inspecting the raw theme table used by the compiler.
### API
```lua
local arete = require("arete")
-- Configure arete.nvim. Passing `theme` also loads it immediately.
arete.setup({
theme = "ef-bio",
transparent = false,
cache = true,
})
-- Load a theme programmatically.
arete.load("ef-dream")
-- Read the raw theme table for integrations or custom tooling.
local ef_dream = arete.get_theme("ef-dream")
-- Inspect the active arete.nvim options.
local options = arete.options()
```
### Overwriting Highlights
You can provide a callback to `on_highlights` inside your `setup` function. The function will be executed during the theme compilation phase and injected directly into the cache.
```lua
require("arete").setup({
on_highlights = function(hls, name)
local normal = hls.Normal or {}
local comment = hls.Comment or normal
local overrides = {
NormalFloat = { fg = normal.fg, bg = "NONE" },
MyObscurePluginHighlight = { fg = (hls.DiffAdd or normal).fg },
}
-- You can adjust behavior based on the theme name
if name:find("dark") then
overrides.FloatBorder = { fg = comment.fg, bg = "NONE" }
else
overrides.FloatBorder = { fg = normal.fg, bg = "NONE" }
end
return overrides
end,
})
```
## Themes Showcase
Ef Family
Light Themes
ef-arbutus
ef-arcadia
ef-cyprus
ef-day
ef-deuteranopia-light
ef-duo-light
ef-eagle
ef-elea-light
ef-frost
ef-kassio
ef-light
ef-maris-light
ef-melissa-light
ef-orange
ef-reverie
ef-spring
ef-summer
ef-trio-light
ef-tritanopia-light
Dark Themes
ef-atlantis
ef-autumn
ef-bio
ef-cherie
ef-dark
ef-deuteranopia-dark
ef-dream
ef-duo-dark
ef-elea-dark
ef-false
ef-fig
ef-maris-dark
ef-melissa-dark
ef-night
ef-owl
ef-rosa
ef-symbiosis
ef-tint
ef-trio-dark
ef-tritanopia-dark
ef-winter
Modus Family
Light Themes
modus-operandi
modus-operandi-deuteranopia
modus-operandi-tinted
modus-operandi-tritanopia
Dark Themes
modus-vivendi
modus-vivendi-deuteranopia
modus-vivendi-tinted
modus-vivendi-tritanopia
Tempus Family
Light Themes
tempus_dawn
tempus_day
tempus_fugit
tempus_past
tempus_totus
Dark Themes
tempus_autumn
tempus_classic
tempus_dusk
tempus_future
tempus_night
tempus_rift
tempus_spring
tempus_summer
tempus_tempest
tempus_warp
tempus_winter
Doric Family
Light Themes
doric-almond
doric-beach
doric-cherry
doric-coral
doric-earth
doric-jade
doric-light
doric-marble
doric-oak
doric-siren
doric-wind
Dark Themes
doric-copper
doric-dark
doric-fire
doric-magma
doric-mermaid
doric-obsidian
doric-pine
doric-plum
doric-valley
doric-walnut
doric-water
Standard Family
Light Themes
standard-adwaita
standard-light
standard-light-tinted
Dark Themes
standard-dark
standard-dark-tinted
standard-wombat
Prot16 Family
Light Themes
prot16-alto-light
prot16-archaic-light
prot16-bionis-light
prot16-blau-light
prot16-camo-light
prot16-caprice-light
prot16-cyprium-light
prot16-equinox-light
prot16-ficus-light
prot16-flowerbed-light
prot16-fortuna-light
prot16-gaia-light
prot16-hinterland-light
prot16-hyperion-light
prot16-magus-light
prot16-nefelio-light
prot16-neptune-light
prot16-ocarina-light
prot16-oliveira-light
prot16-orionis-light
prot16-overgrowth-light
prot16-playa-light
prot16-sonho-light
prot16-symbiosis-light
prot16-termina-light
prot16-vin-light
Dark Themes
prot16-alto-dark
prot16-archaic-dark
prot16-bionis-dark
prot16-blau-dark
prot16-camo-dark
prot16-caprice-dark
prot16-cyprium-dark
prot16-equinox-dark
prot16-ficus-dark
prot16-flowerbed-dark
prot16-fortuna-dark
prot16-gaia-dark
prot16-hinterland-dark
prot16-hyperion-dark
prot16-magus-dark
prot16-nefelio-dark
prot16-neptune-dark
prot16-noir-light
prot16-noir-dark
prot16-ocarina-dark
prot16-oliveira-dark
prot16-orionis-dark
prot16-overgrowth-dark
prot16-playa-dark
prot16-seabed-light
prot16-seabed-dark
prot16-sonho-dark
prot16-symbiosis-dark
prot16-termina-dark
prot16-vin-dark
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. It documents the required commit format, sign-off policy, theme documentation rules, and validation checks.
## Acknowledgements
- Massive thanks to [**Protesilaos Stavrou (Prot)**](https://github.com/protesilaos) for the original color palette research and Emacs themes.
- Special thanks to [**oonamo/ef-themes.nvim**](https://github.com/oonamo/ef-themes.nvim) for the Neovim Ef-themes implementation and inspiration.
## License
This project is licensed under the **GNU General Public License v2.0** - see the `LICENSE` file for details.