Warm earthy tones meet modern pastels. One IntelliJ theme, 33 variants.
data class Theme(
val name: String,
val dark: Boolean = true,
val accents: List<Color> = emptyList(),
) {
fun blend(other: Theme, ratio: Double): Theme {
val mixed = accents.zip(other.accents) { a, b ->
a.lerp(b, ratio)
}
return copy(name = "$name x ${other.name}", accents = mixed)
}
companion object {
const val VERSION = 33
}
}
It started with Notepad 2 and Dreamweaver. The default colors were never quite right, so I changed them.
Through Sublime Text's elegance, Vim's austerity, and the glow of VS Code at 2am — I never once accepted what I was given.
Decades of tweaking hex codes. Decades of "almost right."
Gruvbox gave me warmth. Catppuccin gave me clarity. I needed both.
Gruvbox's earthy tones. Catppuccin's modern precision. One blend.
data class Theme(
val name: String,
val accents: List<Color>,
) {
fun blend(other: Theme): Theme {
val mixed = accents.zip(other.accents)
{ a, b -> a.lerp(b, 0.6) }
return copy(accents = mixed)
}
}
Warm. Familiar.
data class Theme(
val name: String,
val accents: List<Color>,
) {
fun blend(other: Theme): Theme {
val mixed = accents.zip(other.accents)
{ a, b -> a.lerp(b, 0.6) }
return copy(accents = mixed)
}
}
The best of both.
data class Theme(
val name: String,
val accents: List<Color>,
) {
fun blend(other: Theme): Theme {
val mixed = accents.zip(other.accents)
{ a, b -> a.lerp(b, 0.6) }
return copy(accents = mixed)
}
}
Modern. Crisp.
Real code. Real warmth. The colors you'll live in.
data class Theme(
val name: String,
val dark: Boolean = true,
val accents: List<Color> = emptyList(),
) {
fun blend(other: Theme, ratio: Double): Theme {
val mixed = accents.zip(other.accents) { a, b ->
a.lerp(b, ratio)
}
return copy(name = "$name x ${other.name}", accents = mixed)
}
companion object {
const val VERSION = 33
}
}
Three families. 11 color palettes. Each available in Classic, Island, and Soft Island.
The original blend. Warm earthy tones meet modern pastels.
Earthy warmth meets cosmic synth-wave at 30-70% blend ratios.
The best of three worlds. Gruvppuccin accents on Embark's deep bases.
Change accent colors, toggle bold keywords, adjust corner radii — all in real time.
Choose your accent
Sapphire — Functions, links, active tabs
Per-element accent overrides — tabs, checkboxes, caret, breadcrumbs
4 built-in presets + save your own custom configurations
Bold keywords across 12 keyword types in all languages
Corner radius — component (0-20) and Island arc (0-30)
Compact mode for maximized viewport density
fun createTheme(config: ThemeConfig): Theme {
val palette = blendColors(
config.primary,
config.secondary,
0.6
)
val icons = loadIconPack(config.dark)
val accents = resolveAccents(config.accent)
return Theme(palette, icons, accents)
}
Features that respect how you work.
Auto-detects theme darkness. Accent-customizable.
fun create
fun create
12 keyword types across all languages.
Tighter padding for more visible code.
Island arc (0-30) and component arc (0-20).
One click. Save your own, too.
Gruvppuccin blends Gruvbox and Catppuccin. Gruvbark adds Embark. Gruvppuccin Embark takes it even further — earthy warmth meets cosmic synth-wave.