I forked popular syntax highlighting themes to make Roc look as beautiful and readable as possible! https://gitlab.com/JanCVanB/rocwise-editor-themes
With @Eli Dowling's help, Roc now looks okay in most themes, including popular defaults. However, I don't like the varied and semi-arbitrary token groupings used by even the best themes - some try very hard to be logical for most programming languages, some seem to try to use as many palette colors as possible, and no two themes group tokens the same way. I want to switch color themes based on my mood, surroundings, or presentation audience... without my code randomly reading differently as a result.
Therefore, I decided on a simple set of coloring rules, based on Roc's semantic concepts (because Roc is my primary language today). I'm now 99% delighted with how Roc looks in my editor (Helix)! :tada:
Unlike almost every online discussion thread, I welcome bikeshedding on my color choices! See the repo's screenshot gallery and coloring rules doc. In your favorite theme that I've implemented so far, what would you change?
basic-cli examples in Helix colored with rocwise's Solarized Dark
basic-cli examples in Helix colored with rocwise's Catppuccin Mocha
basic-cli examples in Helix colored with rocwise's Catppuccin Latte
The repo has "before and after" screenshots for each theme - here's one example, where the default choices (for where & how to apply the palette colors) feels arbitrary before and clear after:
helix.dracula.before.png
helix.dracula.after.png
Anthony Bullard said:
Oh, and of course, see it in Catppuccin Mocha
:check:
More theme requests welcome! :blush:
I'm currently planning to at least implement these, because they're the ones with first-party support in Helix+Zellij+Wezterm (my stack).
Oh, and I'll also support NeoVim soon.
Sweet, they look really good!
these look beautiful, Jan!!! :heart_eyes:
Catppuccin Mocha is my favorite :)
@JanCVanB Very nice!
I love the idea, but I think we have very different ideas about the visual importance of different syntactic elements. Which in itself is actually quite interesting.
In my own slightly customised scheme it goes:
Keywords > types> syntax/brackets functions> literals/operators > namespaces > strings> variables > comments.
I certainly don't think that's ideal and if I sat down to remake it I'd shuffle it just a little. But I find the low importance places on keywords and high importance on namespaces doesn't read as well for me
Interesting! When you say "I find the low importance places on keywords and high importance on namespaces does read as well for me" are you referring to rocwise, and do you mean "importance placed* on ... doesn't* read as well"?
Here's an approximation of the visual importance/pop/contrast I'm aiming for:
strings/tags == numbers
>= def names == func names == type/module names
>= keywords/operators
> punctuation/comments
I'm not sure which of your >
s are more/less significant, but two differences in priority stand out regardless:
I'm skeptical of those priorities, but I'm curious to hear why you/others prioritize things differently!
Also, I've decided to make some sacrifices to my "visual importance" priorities because I'm more-highly prioritizing the consistency of color hues across themes - purple for keywords/operators, pink for types/namespaces, etc.
I'm curious if hue consistency won't scale well to color palettes that don't feature one or more of those hues, but I'll keep pushing it until it fails, because so far I really like forming associations between those hues and their semantic meaning (blue functions transform like water... pink types are the brain's mental model... haha)
I'll definitely have to set this up at some point with dusk-fox. I now use ghostty with dusk-fox and helix set to terminal colors with transparent background.
Oh no! I did mean doesn't @JanCVanB
Cool, that's what I assumed in my comparison & questions above :)
Brendan Hansknecht said:
I'll definitely have to set this up at some point with dusk-fox. I now use ghostty with dusk-fox and helix set to terminal colors with transparent background.
I'm happy to try adding those color palettes! I'm curious to use them as guides for what "supporting NeoVim" actually entails, for higher-complexity themes.
These look amazing, Jan! Awesome work! :rainbow::star_struck:
JanCVanB said:
If I get some time sometime I'll try creating my ideal theme, it might be a fun exercise. And should clarify some of my points
I think I generally like to be able to get a feel for the structure of code as the highest priority which is why keywords and scoping syntactical elements are important in my eyes.
Ooh, that makes sense! Intriguing perspective - I'll keep an eye out for wanting that too.
Last updated: Jul 06 2025 at 12:14 UTC