https://github.com/binbandit/achroma.nvim
A minimalist grayscale colorscheme for Neovim with no color distractions.
https://github.com/binbandit/achroma.nvim
a11y accessible achroma color-blind color-blind-accessible color-scheme colorscheme gray-scale grey-scale mono-chrome neovim neovim-colorscheme neovim-lua neovim-plugin neovim-theme nvim nvim-plugin nvim-theme
Last synced: 6 months ago
JSON representation
A minimalist grayscale colorscheme for Neovim with no color distractions.
- Host: GitHub
- URL: https://github.com/binbandit/achroma.nvim
- Owner: binbandit
- Created: 2025-07-28T23:27:39.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-07-29T05:42:28.000Z (7 months ago)
- Last Synced: 2025-08-07T05:45:24.319Z (6 months ago)
- Topics: a11y, accessible, achroma, color-blind, color-blind-accessible, color-scheme, colorscheme, gray-scale, grey-scale, mono-chrome, neovim, neovim-colorscheme, neovim-lua, neovim-plugin, neovim-theme, nvim, nvim-plugin, nvim-theme
- Language: Lua
- Homepage:
- Size: 33.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# achroma.nvim
A minimalist grayscale colorscheme for Neovim with no color distractions.
## Overview
Achroma is a purely grayscale theme designed for focused coding. It supports both light and dark modes, includes a pure black variant for OLED displays, and ensures all colors meet WCAG accessibility standards.
## Installation
Using [lazy.nvim](https://github.com/folke/lazy.nvim):
```lua
{
"binbandit/achroma.nvim",
lazy = false,
priority = 1000,
config = function()
vim.cmd.colorscheme "achroma"
end,
}
```
Using [packer.nvim](https://github.com/wbthomason/packer.nvim):
```lua
use {
"binbandit/achroma.nvim",
config = function()
vim.cmd.colorscheme "achroma"
end
}
```
## Usage
Basic usage:
```vim
colorscheme achroma
```
Or with Lua configuration:
```lua
require('achroma').setup({
mode = 'dark', -- 'dark' or 'light'
variant = 'default', -- 'default' or 'black' (dark mode only)
transparent = false, -- true for transparent background
pop = false, -- true for subtle color accents
inverse_popup = false, -- true for high contrast popup menus
auto_dark_light = false, -- true to follow system dark/light mode
adaptive_contrast = false, -- true to adjust contrast based on time of day
git_gutter_colors = false, -- true for colored git gutter symbols
highlight_scope = false -- true to highlight current scope
})
```
### Commands
```vim
:Achroma dark " Dark mode
:Achroma light " Light mode
:Achroma black " Pure black background (dark mode)
:Achroma transparent " Transparent background
:Achroma dark black " Dark mode with black background
:Achroma dark transparent " Dark mode with transparent background
```
### Configuration
```lua
require('achroma').setup({
mode = 'dark', -- 'dark' or 'light'
variant = 'black', -- 'default' or 'black' (dark mode only)
transparent = false, -- true for transparent background
inverse_popup = false, -- true for high contrast popup menus
auto_dark_light = false, -- true to follow system dark/light mode
adaptive_contrast = false, -- true to adjust contrast based on time
contrast_schedule = { -- customize time-based contrast
morning = "normal", -- 6am-12pm
afternoon = "high", -- 12pm-6pm
evening = "soft", -- 6pm-10pm
night = "ultra_soft" -- 10pm-6am
},
git_gutter_colors = false, -- true for colored git symbols
highlight_scope = false -- true to highlight current scope
})
```
#### Configuration Options
**`inverse_popup`**: Provides high contrast selection in completion menus
- **Dark mode**: White background with black text for selected items
- **Light mode**: Black background with white text for selected items
**`auto_dark_light`**: Automatically switches between dark and light modes
- Follows Neovim's `background` option
- Works with plugins that detect system theme (e.g., [auto-dark-mode.nvim](https://github.com/f-person/auto-dark-mode.nvim))
- Preserves other settings when switching modes
**`adaptive_contrast`**: Smart contrast that adjusts based on time of day
- Reduces eye strain by matching ambient light conditions
- High contrast during bright afternoons
- Softer contrast for evening and late-night coding
- Fully customizable schedule
**`git_gutter_colors`**: Adds color to git gutter symbols
- Green for additions, blue for changes, red for deletions
- Helps quickly identify git changes while maintaining grayscale theme
**`highlight_scope`**: Subtly highlights current scope
- Shows current function/block context
- Helps maintain code location awareness
- Works with vim-illuminate and treesitter-context
The theme respects your existing `background` setting:
```vim
set background=dark " Use dark mode
set background=light " Use light mode
```
### Lualine Integration
```lua
require('lualine').setup {
options = {
theme = 'achroma'
}
}
```
## Features
### Core
- Pure grayscale palette - no color distractions
- Dark and light mode support
- Pure black variant for OLED displays
- Transparent background support
- WCAG compliant contrast ratios
- Full Tree-sitter support
- LSP diagnostics styling
### Plugin Support
The theme includes highlight groups for:
**File Management**: NvimTree, NeoTree, aerial.nvim
**Completion**: nvim-cmp, blink.cmp, mini.completion
**Search**: Telescope
**Git Integration**: GitSigns, Diffview
**UI Enhancement**: Bufferline, barbar.nvim, lualine, Noice, Notify, WhichKey, mini.statusline, mini.tabline
**Development Tools**: Lazy, Mason, Trouble, TodoComments, nvim-dap, nvim-dap-ui
**Navigation**: Flash, Hop, leap.nvim, mini.jump, vim-illuminate, vim-matchup
**Startup**: Alpha, Dashboard, mini.starter
**Indentation**: IndentBlankline, indent-blankline.nvim v3, mini.indentscope
**Breadcrumbs**: nvim-navic
**Syntax**: rainbow-delimiters.nvim, headlines.nvim
**LSP Enhancement**: LspSaga
**Testing**: mini.test
## Philosophy
Achroma removes color as a distraction, using only shades of gray to create visual hierarchy. This approach reduces cognitive load and helps maintain focus on the code structure rather than syntax highlighting.
## Colorblind-Friendly Design
Achroma is the first truly colorblind-friendly Neovim theme. By using only grayscale:
- **100% accessible** to all types of color vision deficiency
- **No color confusion** between error, warning, and info highlights
- **Consistent experience** for all developers regardless of color perception
- **Pattern-based differentiation** using underlines, bold, and italic styles
Perfect for teams with diverse visual needs or developers who want to ensure their code is readable by everyone.
## Accessibility
All color combinations in achroma.nvim are designed to meet WCAG AA standards for contrast ratios:
- Normal text: 7:1 minimum contrast ratio
- Large text: 4.5:1 minimum contrast ratio
- The lightest gray used for comments (#8f8f8f) against dark backgrounds meets AA standards
- Error highlighting has been adjusted to #8f8f8f for improved visibility while maintaining the grayscale aesthetic
## Contributing
Issues and pull requests are welcome. When contributing, please ensure all color combinations maintain WCAG AA compliance for accessibility.
## Terminal Themes
Achroma includes matching terminal color schemes for popular terminal emulators. Find them in the `terminals/` directory:
### iTerm2
1. Download `terminals/achroma-dark.itermcolors`
2. Open iTerm2 Preferences → Profiles → Colors
3. Click "Color Presets" → "Import" and select the file
### WezTerm
Add to your `wezterm.lua`:
```lua
local achroma = require("path/to/achroma.nvim/terminals/achroma")
config.color_scheme = achroma.dark -- or achroma.black or achroma.light
```
### Ghostty
Copy `terminals/achroma` to `~/.config/ghostty/themes/` and add to your config:
```
theme = achroma
```
### Alacritty
Add the contents of `terminals/achroma.toml` to your `alacritty.toml` configuration.
### Kitty
Include in your `kitty.conf`:
```
include path/to/achroma.nvim/terminals/achroma.conf
```
### Windows Terminal
1. Copy the contents of `terminals/achroma.json` (or `achroma-black.json`, `achroma-light.json`)
2. Add to the `schemes` array in Windows Terminal settings
## License
MIT