Some checks failed
ci/someci/tag/woodpecker/5 Pipeline is pending
ci/someci/tag/woodpecker/6 Pipeline is pending
ci/someci/tag/woodpecker/7 Pipeline is pending
ci/someci/tag/woodpecker/1 Pipeline failed
ci/someci/tag/woodpecker/2 Pipeline failed
ci/someci/tag/woodpecker/3 Pipeline failed
ci/someci/tag/woodpecker/4 Pipeline failed
- Introduce multiple built-in themes (`default_dark`, `default_light`, `gruvbox`, `dracula`, `solarized`, `midnight-ocean`, `rose-pine`, `monokai`, `material-dark`, `material-light`). - Implement theming system with customizable color schemes for all UI components in the TUI. - Include documentation for themes in `themes/README.md`. - Add fallback mechanisms for default themes in case of parsing errors. - Support custom themes with overrides via configuration.
90 lines
3.0 KiB
Markdown
90 lines
3.0 KiB
Markdown
# OWLEN Built-in Themes
|
|
|
|
This directory contains the built-in themes that are embedded into the OWLEN binary.
|
|
|
|
## Available Themes
|
|
|
|
- **default_dark** - High-contrast dark theme (default)
|
|
- **default_light** - Clean light theme
|
|
- **gruvbox** - Popular retro color scheme with warm tones
|
|
- **dracula** - Dark theme with vibrant purple and cyan colors
|
|
- **solarized** - Precision colors for optimal readability
|
|
- **midnight-ocean** - Deep blue oceanic theme
|
|
- **rose-pine** - Soho vibes with muted pastels
|
|
- **monokai** - Classic code editor theme
|
|
- **material-dark** - Google's Material Design dark variant
|
|
- **material-light** - Google's Material Design light variant
|
|
|
|
## Theme File Format
|
|
|
|
Each theme is defined in TOML format with the following structure:
|
|
|
|
```toml
|
|
name = "theme-name"
|
|
|
|
# Text colors
|
|
text = "#ffffff" # Main text color
|
|
placeholder = "#808080" # Placeholder/muted text
|
|
|
|
# Background colors
|
|
background = "#000000" # Main background
|
|
command_bar_background = "#111111"
|
|
status_background = "#111111"
|
|
|
|
# Border colors
|
|
focused_panel_border = "#ff00ff" # Active panel border
|
|
unfocused_panel_border = "#800080" # Inactive panel border
|
|
|
|
# Message role colors
|
|
user_message_role = "#00ffff" # User messages
|
|
assistant_message_role = "#ffff00" # Assistant messages
|
|
thinking_panel_title = "#ff00ff" # Thinking panel title
|
|
|
|
# Mode indicator colors (status bar)
|
|
mode_normal = "#00ffff"
|
|
mode_editing = "#00ff00"
|
|
mode_model_selection = "#ffff00"
|
|
mode_provider_selection = "#00ffff"
|
|
mode_help = "#ff00ff"
|
|
mode_visual = "#ff0080"
|
|
mode_command = "#ffff00"
|
|
|
|
# Selection and cursor
|
|
selection_bg = "#0000ff" # Selection background
|
|
selection_fg = "#ffffff" # Selection foreground
|
|
cursor = "#ff0080" # Cursor color
|
|
|
|
# Status colors
|
|
error = "#ff0000" # Error messages
|
|
info = "#00ff00" # Info/success messages
|
|
```
|
|
|
|
## Color Format
|
|
|
|
Colors can be specified in two formats:
|
|
|
|
1. **Hex RGB**: `#rrggbb` (e.g., `#ff0000` for red, `#ff8800` for orange)
|
|
2. **Named colors** (case-insensitive):
|
|
- **Basic**: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`
|
|
- **Gray variants**: `gray`, `grey`, `darkgray`, `darkgrey`
|
|
- **Light variants**: `lightred`, `lightgreen`, `lightyellow`, `lightblue`, `lightmagenta`, `lightcyan`
|
|
|
|
**Note**: For colors not in the named list (like orange, purple, brown), use hex RGB format.
|
|
|
|
OWLEN will display an error message on startup if a custom theme has invalid colors.
|
|
|
|
## Creating Custom Themes
|
|
|
|
To create your own theme:
|
|
|
|
1. Copy one of these files to `~/.config/owlen/themes/`
|
|
2. Rename and modify the colors
|
|
3. Set `theme = "your-theme-name"` in `~/.config/owlen/config.toml`
|
|
4. Or use `:theme your-theme-name` in OWLEN to switch
|
|
|
|
## Embedding in Binary
|
|
|
|
These theme files are embedded into the OWLEN binary at compile time using Rust's `include_str!()` macro. This ensures they're always available, even if the files are deleted from disk.
|
|
|
|
Custom themes placed in `~/.config/owlen/themes/` will override built-in themes with the same name.
|