Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

micdzu/aalto.vim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1 Commit

Repository files navigation

aalto.vim

"Colour is an integral element of Aalto's architecture... an inseparable part of his effort to harness rationalism in the service of better living." — Harald Arnkil, The Colours of Alvar Aalto (2018)

Live Showroom

A browser-based preview of the aalto palette across multiple languages and UI contexts:

aalto showroom →

The showroom demonstrates the Neovim implementation, but the underlying OKLCH engine, material palette, and perceptual hierarchy are identical in the Vim port. Both versions compute the same colors from the same mathematical foundations.


aalto-dark aalto-light


The Villa Mairea Thesis

This is not a "theme." It is a material palette borrowed from the late work of Alvar Aalto (1898–1976) and translated into perceptual color space.

Aalto's mature interiors — Villa Mairea (1938–39), the Experimental House in Muuratsalo (1952–53), the National Pensions Institute Headquarters (1952–57) — abandoned the bright primary polychromy of his early functionalist period (the canary yellows and crimsons of Paimio and Turun Sanomat) in favor of what Harald Arnkil calls "nature-inspired textures and muted colours of wood, stone, brick and ceramic tiling." Strong chromatic accents were reserved for furniture and detail. The walls became birch, linen, and off-white; the atmosphere became haptic, light, and psychological.

aalto.vim takes that same material chord and renders it as syntax highlighting.

Material Role Hex
Deep violet-black (midnight ceramic) Background (dark) #18122E
Birch plywood, warm off-white Foreground #EAE1D8
Unbleached linen Comments #706873
Patinated copper Constants #B87333
Deep moss / reindeer lichen Strings #7D8F6E
Distant winter sky / slate blue Definitions #6B7FD4
Terracotta brick Errors #C46B6B
Brass lamp shade Warnings #D4A373
Wet Nordic slate Info / hints #6B9A92

The light variant inverts the logic: birch plywood walls become the background, and the accents darken into forest moss, aged brass, and deep slate — the same materials viewed in summer daylight rather than winter lamplight.


Why OKLCH?

Aalto did not choose colors by eye alone. In his early functionalist work he employed Le Corbusier's Claviers de couleurs, a systematic architectural polychromy. In his mature work he replaced that system with another: the logic of natural materials under natural light. Both approaches were rational and human-centered at once.

This colorscheme continues that tradition in a different medium.

Instead of curating hex codes and hoping they look correct, aalto.vim computes them in the OKLCH perceptual color space:

  • Uniform lightness: A definition is provably more prominent than a constant, which outranks a string, which outranks a comment. The hierarchy is enforced by iterative nudging against WCAG contrast ratios, not by guesswork.
  • Gamut fitting: Every computed color is binary-searched back into the sRGB boundary so nothing clips silently.
  • Perceptual surfaces: The selection background, cursor line, and float backgrounds are not hand-picked grays. They are generated by walking the background color in OKLab space until a target perceptual distance (ΔE ≈ 0.10) is reached — a raised eyebrow, not a shout.

The result is a syntax highlighting environment that behaves like Aalto's architecture: systematic in its construction, but comfortable and atmospheric in its effect.


Requirements

  • Vim 9.0+ with +float
  • set termguicolors in your vimrc

A 256-color fallback is provided for older terminals, but the full experience requires true color. This is a hard requirement: without termguicolors, the OKLCH engine cannot run.


Installation

vim-plug

Plug 'micdzu/aalto.vim'

Native package (Vim 8+)

git clone https://github.com/micdzu/aalto.vim.git \
 ~/.vim/pack/colors/start/aalto.vim

Manual

Copy colors/aalto.vim to ~/.vim/colors/.


Configuration

Set before colorscheme aalto:

Variable Type Default Description
g:aalto_variant string &background "dark" or "light"
g:aalto_italic_comments bool 0 Italicise comments
g:aalto_italic_keywords bool 0 Italicise keywords
g:aalto_transparent bool 0 Transparent background
g:aalto_learner_mode bool 0 Emphasise grammatical structures

Example:

set termguicolors
let g:aalto_variant = 'dark'
let g:aalto_italic_comments = 1
colorscheme aalto

Learner Mode

By default, aalto.vim uses semantic highlighting: keywords, operators, and identifiers fade into the neutral birch foreground, while definitions, constants, strings, and comments carry color. This is the "experienced programmer" view — you read by meaning, not by grammar.

When learning a new language, you read by pattern-matching syntax instead. You need to know "this is a keyword," "this is a type," "this is control flow."

Set g:aalto_learner_mode = 1 to reassign the same material palette to grammatical categories:

Grammatical role Semantic color Rationale
Type, Structure definition (blue) Types define the shape of the program
Keyword, Statement, Conditional, Repeat constant (copper) Control flow is fixed vocabulary
String, Character string (moss) Unchanged
Comment comment (linen) Unchanged
Identifier, Operator, Delimiter fg (birch) The background grammar

No new colors are introduced. The same OKLCH weights and hierarchy enforcement apply. Once you read by meaning rather than syntax, return to semantic mode.


Terminal Integration

A colorscheme is only half a system. If your terminal still uses Solarized while Vim uses Aalto, htop, lazygit, and fzf will live in a different world.

Run :AaltoExportAnsi after loading the colorscheme to print ANSI palette blocks for Alacritty, WezTerm, and iTerm2, generated live from your current variant:

colorscheme aalto
AaltoExportAnsi

Copy the output into your terminal config. The bright variants are derived by perceptually nudging the base accents toward the foreground color, keeping the same material identity under higher intensity.


Differences from aalto.nvim

Kept Dropped
Full OKLCH engine with gamut fitting LSP semantic tokens
Perceptual hierarchy enforcement Tree-sitter captures
Editor / UI highlight groups Plugin-specific highlight groups
Learner mode Lualine / statusline integration
256-color + ANSI fallback :checkhealth, :AaltoReload, etc.

This is a Vim-native port. It does not attempt to emulate Neovim's LSP or tree-sitter ecosystems. It provides a solid, mathematically grounded foundation for core Vim editing.

The Neovim version is the modernist aalto — integrated, extensible, ecosystem-aware. The Vim version is the mature aalto — stripped, self-contained, and philosophically consistent with the editor it runs in. Both are valid. This one is smaller.


Acknowledgements

The color philosophy and material references are drawn from Harald Arnkil, The Colours of Alvar Aalto (Proceedings of the AIC Interim Meeting, Lisbon 2018), and from the ongoing colour research of the Alvar Aalto Foundation (Elina Riksman et al.).

The OKLCH mathematics follow Björn Ottosson's reference implementation of the Oklab color space (2020).

The original Neovim implementation is aalto.nvim by micdzu.


License

MIT — same as aalto.nvim.

About

A Vim 9 colorscheme where structure becomes visible — and everything else fades away.

Resources

License

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /