···11# Themes
2233-slides.rs provides a theme system for customizing the appearance of your presentations. Themes control colors and styling for headings, body text, code blocks, and UI elements.
33+slides.rs uses the [Base16](https://github.com/chriskempson/base16) theming system for customizing the appearance of your presentations. Base16 provides a standardized way to define color schemes that work consistently across dark and light backgrounds.
44+55+## Base16 Color System
66+77+Base16 defines 16 semantic colors (base00 through base0F) that serve specific purposes:
88+99+### Background Shades
1010+1111+- **base00-03**: Background colors from darkest to lighter (or lightest to darker in light themes)
1212+1313+### Foreground Shades
1414+1515+- **base04-07**: Foreground colors from darker to lightest (or lightest to darker in light themes)
1616+1717+### Accent Colors
1818+1919+- **base08**: Red (variables, deletion)
2020+- **base09**: Orange (integers, constants, emphasis)
2121+- **base0A**: Yellow (classes, list markers)
2222+- **base0B**: Green (strings, code blocks)
2323+- **base0C**: Cyan (links, support functions)
2424+- **base0D**: Blue (functions, headings)
2525+- **base0E**: Magenta (keywords, strong emphasis)
2626+- **base0F**: Brown (deprecated, special)
2727+2828+## Color Mapping
2929+3030+slides.rs maps base16 colors to semantic roles:
3131+3232+### Content Colors
3333+3434+- **Headings** (base0D): Blue accent for slide titles
3535+- **Body text** (base05): Main foreground color
3636+- **Strong/Bold** (base0E): Magenta for emphasis
3737+- **Emphasis/Italic** (base09): Orange for subtle emphasis
3838+- **Code blocks** (base0B): Green for fenced code
3939+- **Inline code background** (base02): Selection background
4040+- **Links** (base0C): Cyan for hyperlinks
4141+- **Accents** (base08): Red for highlights
4242+- **List markers** (base0A): Yellow for bullets/numbers
4343+- **Dimmed elements** (base03): Comments, borders, rules
44455-## Automatic Light/Dark Detection
4545+### UI Chrome Colors
64677-Each theme automatically detects your terminal background and selects the appropriate light or dark variant. This ensures optimal contrast and readability regardless of your terminal settings.
4747+- **UI background** (base00): Status bar and UI backgrounds
4848+- **UI borders** (base04): Window and panel borders
4949+- **UI titles** (base06): Bright text for UI elements
5050+- **UI text** (base07): Brightest text for status bars
85199-## Available Theme Schemes
5252+## Available Themes
10531111-The following color schemes are built-in:
5454+slides.rs includes 10 prebuilt base16 themes, embedded at compile time:
12551313-**basic** (default) - IBM's Oxocarbon color palette with clean, modern styling
5656+### Catppuccin
14571515-- Dark variant: Light text on dark background with vibrant accents
1616-- Light variant: Dark text on light background with adjusted colors
5858+- **catppuccin-mocha** - Dark theme with pastel colors
5959+- **catppuccin-latte** - Light theme with warm tones
17601818-**monokai** - Inspired by the popular Monokai editor theme
6161+### Gruvbox Material
19622020-- Dark variant: Classic Monokai with pink headings and green code
2121-- Light variant: Adjusted colors for light backgrounds
6363+- **gruvbox-material-dark** - Retro dark theme with warm colors
6464+- **gruvbox-material-light** - Retro light theme
22652323-**dracula** - Based on the Dracula color scheme
6666+### Nord
24672525-- Dark variant: Purple and cyan tones optimized for dark backgrounds
2626-- Light variant: Darker variants of Dracula colors for light backgrounds
6868+- **nord** - Arctic-inspired dark theme with cool blues
6969+- **nord-light** - Nord palette adapted for light backgrounds
27702828-**solarized** - Ethan Schoonover's Solarized palette
7171+### Oxocarbon
29723030-- Dark variant: Solarized Dark with blue headings
3131-- Light variant: Solarized Light with adjusted foreground colors
7373+- **oxocarbon-dark** - IBM's modern dark theme (default)
7474+- **oxocarbon-light** - IBM's modern light theme
32753333-**nord** - Arctic-inspired theme with cool tones
7676+### Solarized
34773535-- Dark variant: Subtle blues and greens on dark background
3636-- Light variant: Nord colors adjusted for light backgrounds
7878+- **solarized-dark** - Ethan Schoonover's precision dark palette
7979+- **solarized-light** - Solarized adapted for light backgrounds
37803881## Using Themes
3982···41844285Specify a theme in your slide deck's YAML frontmatter:
43864444-````markdown
8787+```markdown
4588---
4646-theme: monokai
8989+theme: catppuccin-mocha
4790---
48914992# Your First Slide
···5194Content here
5295```
53965454-The terminal background will be automatically detected. To force a specific variant:
5555-5656-```markdown
5757----
5858-theme: solarized:light
5959----
6060-```
6161-6297Or with TOML frontmatter:
63986499```markdown
65100+++
6666-theme = "dracula:dark"
101101+theme = "nord"
67102+++
6810369104# Your First Slide
7070-7171-Content here
7272-````
105105+```
7310674107### Via Command Line
7510876109Override the theme with the `--theme` flag:
7711078111```bash
7979-# Auto-detect terminal background
80112slides present slides.md --theme nord
8181-slides print slides.md --theme solarized
8282-8383-# Force a specific variant
8484-slides present slides.md --theme monokai:light
8585-slides print slides.md --theme nord:dark
113113+slides print slides.md --theme catppuccin-latte
86114```
8711588116### Via Environment Variable
···90118Set a default theme using the `SLIDES_THEME` environment variable:
9111992120```bash
9393-# Auto-detect variant
9494-export SLIDES_THEME=basic
9595-slides present slides.md
9696-9797-# Force specific variant
9898-export SLIDES_THEME=dracula:dark
121121+export SLIDES_THEME=gruvbox-material-dark
99122slides present slides.md
100123```
101124···1061291. Command line flag (`--theme`)
1071302. Frontmatter metadata (`theme:` field)
1081313. Environment variable (`SLIDES_THEME`)
109109-4. Default theme
132132+4. Default theme (nord for dark terminals, nord-light for light terminals)
110133111111-## Theme Components
134134+## Custom Themes (Coming Soon)
112135113113-Each theme defines colors for:
136136+Future versions will support loading custom base16 YAML themes from:
137137+138138+- `~/.config/slides/themes/` directory
139139+- `--theme-file` command line flag
140140+141141+Base16 YAML format:
142142+143143+```yaml
144144+system: "base16"
145145+name: "My Custom Theme"
146146+author: "Your Name"
147147+variant: "dark" # or "light"
148148+palette:
149149+ base00: "#1a1b26"
150150+ base01: "#16161e"
151151+ base02: "#2f3549"
152152+ base03: "#444b6a"
153153+ base04: "#787c99"
154154+ base05: "#a9b1d6"
155155+ base06: "#cbccd1"
156156+ base07: "#d5d6db"
157157+ base08: "#c0caf5"
158158+ base09: "#a9b1d6"
159159+ base0A: "#0db9d7"
160160+ base0B: "#9ece6a"
161161+ base0C: "#b4f9f8"
162162+ base0D: "#2ac3de"
163163+ base0E: "#bb9af7"
164164+ base0F: "#f7768e"
165165+```
114166115115-- Headings (level 1-6)
116116-- Body text
117117-- Accent colors
118118-- Code blocks and inline code
119119-- Code fence markers
120120-- Horizontal rules
121121-- List markers (bullets and numbers)
122122-- Blockquote borders
123123-- Table borders
167167+You can find thousands of base16 themes at the [Base16 Gallery](https://tinted-theming.github.io/tinted-gallery/).
124168125169## Rendering Features
126170127171The printer uses Unicode box-drawing characters for clean visual output:
128172129129-- `─` and `═` for horizontal lines
130130-- `│` for vertical borders
131131-- `┼` for table intersections
173173+- `▉ ▓ ▒ ░ ▌` for heading levels (h1-h6)
174174+- `─` and `═` for horizontal rules
175175+- `│` for blockquote borders and table dividers
132176- `•` for unordered list markers
133177134178Tables automatically calculate column widths based on content and available terminal width.
135179136136-## Default Theme
137137-138138-The application's default slide theme is based on Oxocarbon
139139-140140-### Dark
141141-142142-```yml
143143-- scheme: "Oxocarbon Dark"
144144- author: "shaunsingh/IBM"
145145- palette:
146146- base00: "#161616"
147147- base01: "#262626"
148148- base02: "#393939"
149149- base03: "#525252"
150150- base04: "#dde1e6"
151151- base05: "#f2f4f8"
152152- base06: "#ffffff"
153153- base07: "#08bdba"
154154- base08: "#3ddbd9"
155155- base09: "#78a9ff"
156156- base0A: "#ee5396"
157157- base0B: "#33b1ff"
158158- base0C: "#ff7eb6"
159159- base0D: "#42be65"
160160- base0E: "#be95ff"
161161- base0F: "#82cfff"
162162-```
163163-164164-### Light
165165-166166-```yml
167167-- scheme: "Oxocarbon Light"
168168- author: "shaunsingh/IBM"
169169- palette:
170170- base00: "#f2f4f8"
171171- base01: "#dde1e6"
172172- base02: "#525252"
173173- base03: "#161616"
174174- base04: "#262626"
175175- base05: "#393939"
176176- base06: "#525252"
177177- base07: "#08bdba"
178178- base08: "#ff7eb6"
179179- base09: "#ee5396"
180180- base0A: "#FF6F00"
181181- base0B: "#0f62fe"
182182- base0C: "#673AB7"
183183- base0D: "#42be65"
184184- base0E: "#be95ff"
185185- base0F: "#37474F"
186186-```
180180+Code blocks support syntax highlighting through [Syntect](https://github.com/trishume/syntect), which automatically adapts to your selected theme's light/dark variant.