An open API service indexing awesome lists of open source software.

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

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.