| 1 |
# Themes |
| 2 |
|
| 3 |
16 TOML color themes shared across GoingsOn, Balanced Breakfast, and audiofiles. |
| 4 |
|
| 5 |
## Bundled Themes |
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
| `ayu-light.toml` | Ayu Light | light | [ayu-theme](https://github.com/ayu-theme) | |
| 10 |
| `catppuccin-latte.toml` | Catppuccin Latte | light | [Catppuccin](https://github.com/catppuccin/catppuccin) | |
| 11 |
| `catppuccin-mocha.toml` | Catppuccin Mocha | dark | [Catppuccin](https://github.com/catppuccin/catppuccin) | |
| 12 |
| `dracula.toml` | Dracula | dark | [Dracula](https://github.com/dracula/dracula-theme) | |
| 13 |
| `everforest.toml` | Everforest | dark | [Everforest](https://github.com/sainnhe/everforest) | |
| 14 |
| `flatwhite.toml` | Flatwhite | light | [Flatwhite](https://github.com/biletskyy/flatwhite-syntax) | |
| 15 |
| `gruvbox-dark.toml` | Gruvbox Dark | dark | [Gruvbox](https://github.com/morhetz/gruvbox) | |
| 16 |
| `gruvbox-light.toml` | Gruvbox Light | light | [Gruvbox](https://github.com/morhetz/gruvbox) | |
| 17 |
| `high-contrast.toml` | High Contrast | high-contrast | Original | |
| 18 |
| `kanagawa.toml` | Kanagawa | dark | [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | |
| 19 |
| `neobrute.toml` | Neobrute | dark | Original | |
| 20 |
| `nord.toml` | Nord | dark | [Nord](https://github.com/nordtheme/nord) | |
| 21 |
| `rosepine-dawn.toml` | Rose Pine Dawn | light | [Rose Pine](https://github.com/rose-pine/rose-pine-theme) | |
| 22 |
| `rosepine.toml` | Rose Pine | dark | [Rose Pine](https://github.com/rose-pine/rose-pine-theme) | |
| 23 |
| `solarized-dark.toml` | Solarized Dark | dark | [Solarized](https://github.com/altercation/solarized) | |
| 24 |
| `tokyonight.toml` | Tokyo Night | dark | [Tokyo Night](https://github.com/folke/tokyonight.nvim) | |
| 25 |
|
| 26 |
## File Format |
| 27 |
|
| 28 |
Each theme is a TOML file with four color sections: |
| 29 |
|
| 30 |
```toml |
| 31 |
# Attribution (optional) |
| 32 |
# Based on Catppuccin by Catppuccin Org -- MIT License |
| 33 |
|
| 34 |
[meta] |
| 35 |
name = "Theme Name" # Display name (required) |
| 36 |
variant = "dark" # "dark", "light", or "high-contrast" |
| 37 |
|
| 38 |
[background] |
| 39 |
primary = "#181825" # Main background |
| 40 |
secondary = "#11111b" # Sidebar / panel background |
| 41 |
tertiary = "#313244" # Hover / selection background |
| 42 |
surface = "#1e1e2e" # Card / elevated surface |
| 43 |
|
| 44 |
[foreground] |
| 45 |
primary = "#cdd6f4" # Main text |
| 46 |
secondary = "#bac2de" # Secondary text |
| 47 |
muted = "#9399b2" # Placeholder / disabled text |
| 48 |
|
| 49 |
[accent] |
| 50 |
red = "#f38ba8" # Error, destructive actions |
| 51 |
green = "#a6e3a1" # Success, positive actions |
| 52 |
blue = "#89b4fa" # Links, primary accent |
| 53 |
yellow = "#f9e2af" # Warnings |
| 54 |
purple = "#cba6f7" # Tags, special elements |
| 55 |
cyan = "#89dceb" # Info, secondary accent |
| 56 |
|
| 57 |
[border] |
| 58 |
default = "#45475a" # Default border color |
| 59 |
``` |
| 60 |
|
| 61 |
### Required Fields |
| 62 |
|
| 63 |
- `[meta].name` -- falls back to the filename if missing |
| 64 |
- `[meta].variant` -- falls back to `"dark"` if missing |
| 65 |
- At least `[background].primary` and `[foreground].primary` for a usable theme |
| 66 |
|
| 67 |
All other fields are optional. Apps should fall back gracefully when a color key is missing. |
| 68 |
|
| 69 |
### Theme ID |
| 70 |
|
| 71 |
The filename without `.toml` is the theme ID. IDs must contain only alphanumeric characters, hyphens, and underscores. Examples: `catppuccin-mocha`, `gruvbox-light`, `high-contrast`. |
| 72 |
|
| 73 |
## How Apps Load Themes |
| 74 |
|
| 75 |
|
| 76 |
|
| 77 |
| GoingsOn | Runtime from disk via Tauri resource glob | `theme-common` | |
| 78 |
| Balanced Breakfast | Runtime from disk via Tauri resource glob | `theme-common` | |
| 79 |
| audiofiles | Compile-time embed via `include_str!` | Direct TOML parsing | |
| 80 |
|
| 81 |
GoingsOn and Balanced Breakfast include this directory as a Tauri resource (`../../../MNW/shared/themes/*.toml` in `tauri.conf.json`). The `theme-common` crate handles parsing and color extraction at runtime. |
| 82 |
|
| 83 |
audiofiles embeds theme files at compile time and parses TOML directly without the `theme-common` crate. |
| 84 |
|
| 85 |
## Adding a New Theme |
| 86 |
|
| 87 |
1. Create `your-theme-name.toml` in this directory |
| 88 |
2. Add an attribution comment at the top if based on an existing theme |
| 89 |
3. Fill in all sections (`meta`, `background`, `foreground`, `accent`, `border`) |
| 90 |
4. The theme will be available automatically on next build (GO/BB pick it up via the resource glob, AF picks it up via compile-time include) |
| 91 |
|
| 92 |
## License |
| 93 |
|
| 94 |
Individual theme color palettes are attributed to their original creators. The TOML files themselves are part of this project under PolyForm Noncommercial 1.0.0. |
| 95 |
|