Best Practices: Themes


Now that there are a lot of people working on various packages and we’ve had a couple months to (mostly :laughing:) figure things out, I wanted to encourage people to start collecting best practices together on various subjects. We can use this series of topics to collect “common wisdom”, “best practices”, “tips and tricks”, whatever we end up calling them … with the eventual goal of creating a series of documents for the Atom Core project.

I wanted to get the ball rolling with a discussion of Themes. Do you follow certain rules when deciding whether to put various items in the UI Theme, the Syntax Theme or your styles.less? If you have something that might be generally applicable, like the white cursor in my White Cursor package, do you think that should be a separate package? Or should it be up to the UI or Syntax Theme to include that sort of thing?

Atom theme and package writers, what do you think?


I haven’t made a theme yet, but I am certainly always happy to see easy-on-the-eyes and minimalist theme combinations. Simplicity in the front-end, a mountain of features in the back-end, that’s what works for me.

As a general rule, I think it’s important to always have a syntax and a UI theme match up. I know some people don’t care about that or have the tree view intentionally look very different to separate it more from the editor… but I don’t understand that approach.


I haven’t made a theme yet, but this seems like an appropriate place to voice one small complaint about many of the excellent dark background themes out there - almost all the ones I’ve tried use a highlight-selection color that is so dark that in all but ideal lighting, I can’t see it. One notable exception is the Birds of Paradise theme (which is why I am currently using it).


Can you give an example @rcrooks? Have you filed bugs on the themes?


One thing that I am finding a little confusing is comparing:

Obviously there are broad similarities, but there are also a lot of differences. There are many styles defined in one but not in the others. As such it is a little difficult to know what one should be attempting to cover when creating a theme.


The last one is the easiest to answer. The TextMate theme is converted as faithfully as possible, so it may or may not be as comprehensive as any of the other three examples you give.

I’d say that you should be attempting to cover what is generated when you execute “Generate Syntax Theme”. This will give you a theme that will work reliably across all the built-in languages, at the very least.


@leedohm some examples: all the ports of Railscast (my favorite theme in general), Dark Base16. Zenburn. Haven’t filed bugs, but will.


@rcrooks I just did an apm init --theme with the railscasts-extended theme and it’s working pretty awesome so far.

I’m lacking in time at the moment but it would be great to see a proper port available.