An open API service indexing awesome lists of open source software.

https://github.com/vedang/alabaster-themes

Minimal light and dark themes for GNU Emacs based on the original Sublime Text Alabaster color scheme.
https://github.com/vedang/alabaster-themes

Last synced: 21 days ago
JSON representation

Minimal light and dark themes for GNU Emacs based on the original Sublime Text Alabaster color scheme.

Awesome Lists containing this project

README

          

#+TITLE: Alabaster Themes for Emacs
#+AUTHOR: Vedang Manerikar
#+EMAIL: ved.manerikar@gmail.com

* Alabaster Themes for Emacs

A collection of minimal light and dark themes for GNU Emacs based on the original Sublime Text Alabaster color scheme.

- [[https://github.com/tonsky/sublime-scheme-alabaster][tonsky/sublime-scheme-alabaster]]
- [[https://tonsky.me/blog/syntax-highlighting/][I am sorry, but everyone is getting syntax highlighting wrong @ tonsky.me]]

* Screenshots

alabaster-themes-light - Light theme with foreground highlighting
[[file:images/alabaster.png]]

alabaster-themes-light-bg - Light theme with background highlighting
[[file:images/alabaster-bg.png]]

alabaster-themes-dark - Dark theme with foreground highlighting
[[file:images/alabaster-dark.png]]

alabaster-themes-light-mono - Light monochromatic theme
[[file:images/alabaster-mono.png]]

alabaster-themes-dark-mono - Dark monochromatic theme
[[file:images/alabaster-dark-mono.png]]

* Overview

The Alabaster themes follow a minimal highlighting philosophy. Unlike most color schemes that highlight everything they can (ending up looking like a fireworks show), Alabaster uses minimal highlighting with just a few carefully chosen color classes.

** Design Principles

1. *Minimal Highlighting*: Only four main syntax classes are highlighted:
- Strings
- Constants (numbers, symbols, keywords, boolean values)
- Comments
- Global definitions

2. *No Keyword Highlighting*: Standard language keywords (if, else, function, etc.) are not highlighted. They are usually the least important and most obvious part of any program.

3. *Comment Highlighting*: Comments are highlighted prominently. If code was complex enough to deserve an explanation, then it's that explanation we should see and read first.

4. *No Font Variations*: The themes avoid mixing normal, bold, and italic text, making code easier to scan. Not all fonts provide bold/italic variants.

5. *Reliable Parsing*: Only highlights things that the parser can identify reliably. Unreliable highlighting does more harm than good.

6. *Conscious Color Usage*: With minimal rules, you can consciously use colors to look for specific information. All strings pop out because there aren't many other highlighted elements competing for attention.

* Philosophy and Design Evolution

** Relationship to Original Alabaster

This Emacs implementation is *inspired by* the original Sublime Text Alabaster color scheme, but has evolved to balance minimalism with modern Emacs user expectations.

** Adherence to Original Philosophy

We maintain these core principles:
- ✓ Only 4 syntax classes highlighted (strings, constants, comments, global definitions)
- ✓ Comments highlighted prominently in red (not dimmed)
- ✓ Keywords, types, and builtins use default text color (not highlighted)
- ✓ Conscious, restrained color usage
- ✓ Reliable parser-based highlighting

** Divergences from Original Philosophy

To support modern Emacs workflows, we made pragmatic compromises:

1. *Font Variations*: The original avoids bold/italic entirely. We use them sparingly for UI emphasis (headings, errors, Magit headers) - 95 of 506 faces inherit bold/italic.

2. *Package Support*: We provide 506 faces supporting 30+ packages (Magit, Org, Dired, etc.) for a consistent UI experience.

3. *Keywords in Some Variants*:
- =alabaster-themes-light= and =alabaster-themes-dark=: Keywords use =fg-main= (black/white) - compliant
- =alabaster-themes-light-bg=: Comments use yellow instead of red - partially divergent
- =alabaster-themes-light-mono= and =alabaster-themes-dark-mono=: Everything monochrome except errors - most compliant

** Which Variant Should You Use?

- For *pure minimalism* closest to original: Use =alabaster-themes-light-mono= or =alabaster-themes-dark-mono=
- For *balanced minimalism* with rich UI theming: Use =alabaster-themes-light= or =alabaster-themes-dark=
- For *background highlighting* instead of text: Use =alabaster-themes-light-bg= (My Favourite!)

*** For Sublime Alabaster Purists

If you want the closest experience to the original:
- Use =alabaster-themes-light-mono= or =alabaster-themes-dark-mono=
- Set =(setq alabaster-themes-no-bold t)=
- These variants have minimal highlighting

For the full modern Emacs experience:
- Use =alabaster-themes-light= or =alabaster-themes-dark=
- Enjoy comprehensive package support

* Theme Variants

The package includes five theme variants:

| Theme | Description | Background Mode |
|------------------------------+------------------------------------------+-----------------|
| =alabaster-themes-light= | Light theme with foreground highlighting | light |
| =alabaster-themes-light-bg= | Light theme with background highlighting | light |
| =alabaster-themes-dark= | Dark theme with foreground highlighting | dark |
| =alabaster-themes-light-mono= | Light monochromatic theme | light |
| =alabaster-themes-dark-mono= | Dark monochromatic theme | dark |

* Installation

** Requirements

- Emacs 28.1 or later

** Installation via package.el (TBD)

The themes will be available on MELPA. Install with:

#+begin_src emacs-lisp
M-x package-install RET alabaster-themes RET
#+end_src

** Manual Installation

1. Clone this repository or download the package
2. Add the directory to your =load-path=
3. Load the main file: =(require 'alabaster-themes)=

** Using use-package

If you use [[https://github.com/jwiegley/use-package][use-package]], you can install and load the theme as follows:

#+begin_src emacs-lisp
(use-package alabaster-themes
:ensure t
:config
;; Load the light theme
(load-theme 'alabaster-themes-light t)
;; Interactively select a theme
:commands (alabaster-themes-select))
#+end_src

* Usage

** Post-Load Hook

Run code after loading a theme:

#+begin_src emacs-lisp
(add-hook 'alabaster-themes-post-load-hook
(lambda ()
(message "Alabaster theme loaded!")))
#+end_src

* Package Support

The themes provide face coverage for popular packages:

- *Version Control*: Magit, diff-hl, git-gutter
- *Completion*: Company, Corfu, Vertico, Orderless, Consult, Embark, Marginalia
- *Navigation*: Avy, Which-key
- *Programming*: Flycheck, Flymake, Eglot, LSP Mode
- *Documentation*: Org, Elfeed, EWW, Info, Man
- *Mail*: Message, Gnus
- *Editing*: Yasnippet, Smartparens, Show-paren, Rainbow-delimiters
- *UI*: All-the-icons, Custom
- *Search*: Isearch, Consult
- *Dired*: Dired, Diredfl, Image-dired

* Contributing

Contributions are welcome! Please:

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

* Changelog

See [[CHANGELOG.org][CHANGELOG.org]] for version history.

* License

MIT License - same as the original Alabaster theme by Nikita Prokopov.

* Credits

- Original Alabaster theme by [[https://mastodon.online/@nikitonsky][Tonsky]].
- Theme Framework based on [[https://github.com/protesilaos/ef-themes][Ef Themes]] by Prot

* See Also

- [[https://github.com/tonsky/vscode-theme-alabaster][VSCode Theme Alabaster]]
- [[https://github.com/tonsky/intellij-alabaster][IntelliJ Alabaster]]