1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00

support for custom themes

This commit is contained in:
bbedward
2025-08-20 21:20:33 -04:00
parent 0a846fd1ee
commit 0e513185e0
10 changed files with 554 additions and 105 deletions

127
docs/CUSTOM_THEMES.md Normal file
View File

@@ -0,0 +1,127 @@
# Custom Themes
This guide covers creating custom themes for DankMaterialShell. You can define your own color schemes by creating theme files that the shell can load.
## Theme Structure
Themes are defined using the same structure as the built-in themes. Each theme must specify a complete set of Material Design 3 colors that work together harmoniously.
### Required Core Colors
These are the essential colors that define your theme's appearance:
```json
{
"dark": {
"name": "Cyberpunk Electric Dark",
"primary": "#00FFCC",
"primaryText": "#000000",
"primaryContainer": "#00CC99",
"secondary": "#FF4DFF",
"surface": "#0F0F0F",
"surfaceText": "#E0FFE0",
"surfaceVariant": "#1F2F1F",
"surfaceVariantText": "#CCFFCC",
"surfaceTint": "#00FFCC",
"background": "#000000",
"backgroundText": "#F0FFF0",
"outline": "#80FF80",
"surfaceContainer": "#1A2B1A",
"surfaceContainerHigh": "#264026",
"error": "#FF0066",
"warning": "#CCFF00",
"info": "#00FFCC"
},
"light": {
"name": "Cyberpunk Electric Light",
"primary": "#00B899",
"primaryText": "#FFFFFF",
"primaryContainer": "#66FFDD",
"secondary": "#CC00CC",
"surface": "#F0FFF0",
"surfaceText": "#1F2F1F",
"surfaceVariant": "#E6FFE6",
"surfaceVariantText": "#2D4D2D",
"surfaceTint": "#00B899",
"background": "#FFFFFF",
"backgroundText": "#000000",
"outline": "#4DCC4D",
"surfaceContainer": "#F5FFF5",
"surfaceContainerHigh": "#EBFFEB",
"error": "#B3004D",
"warning": "#99CC00",
"info": "#00B899"
}
}
```
You can the colors at the top level if you do not want "dark" and "light" variants.
## Example Themes
There are example themes you can start from:
- [Cyberpunk Electric](theme_cyberpunk_electric.json) - Neon green and magenta cyberpunk aesthetic
- [Hotline Miami](theme_hotline_miami.json) - Retro 80s inspired hot pink and blue
- [Miami Vice](theme_miami_vice.json) - Classic teal and pink vice aesthetic
- [Synthwave Electric](theme_synthwave_electric.json) - Electric purple and cyan synthwave vibes
### Color Definitions
**Primary Colors**
- `primary` - Main accent color used for buttons, highlights, and active states
- `primaryText` - Text color that contrasts well with primary background
- `primaryContainer` - Darker/lighter variant of primary for containers
**Secondary Colors**
- `secondary` - Supporting accent color for variety and hierarchy
- `surfaceTint` - Tint color applied to surfaces, usually derived from primary
**Surface Colors**
- `surface` - Default surface color for cards, panels, etc.
- `surfaceText` - Primary text color on surface backgrounds
- `surfaceVariant` - Alternate surface color for subtle differentiation
- `surfaceVariantText` - Text color for surfaceVariant backgrounds
- `surfaceContainer` - Container surface color, slightly different from surface
- `surfaceContainerHigh` - Elevated container color for layered interfaces
**Background Colors**
- `background` - Main background color for the entire interface
- `backgroundText` - Text color for background areas
**Outline Colors**
- `outline` - Border and divider color for subtle boundaries
## Optional Properties
While the core colors above are required, you can also customize these optional properties:
### Semantic Colors
```json
{
"error": "#f44336",
"warning": "#ff9800",
"info": "#2196f3"
}
```
- `error` - Used for error states, delete buttons, and critical warnings
- `warning` - Used for warning states and caution indicators
- `info` - Used for informational states and neutral indicators
## Setting Custom Theme
In settings -> Theme & Colors you can choose "Custom" to choose a path to your theme.
You can also edit `~/.config/DankMaterialShell/settings.json` manually
```json
{
"currentThemeName": "custom",
"customThemeFile": "/path/to/mytheme.json"
}
```
### Reactivity
Editing the custom theme file will auto-update the shell if it's the current theme.

View File

@@ -0,0 +1,42 @@
{
"dark": {
"name": "Cyberpunk Electric Dark",
"primary": "#00FFCC",
"primaryText": "#000000",
"primaryContainer": "#00CC99",
"secondary": "#FF4DFF",
"surface": "#0F0F0F",
"surfaceText": "#E0FFE0",
"surfaceVariant": "#1F2F1F",
"surfaceVariantText": "#CCFFCC",
"surfaceTint": "#00FFCC",
"background": "#000000",
"backgroundText": "#F0FFF0",
"outline": "#80FF80",
"surfaceContainer": "#1A2B1A",
"surfaceContainerHigh": "#264026",
"error": "#FF0066",
"warning": "#CCFF00",
"info": "#00FFCC"
},
"light": {
"name": "Cyberpunk Electric Light",
"primary": "#00B899",
"primaryText": "#FFFFFF",
"primaryContainer": "#66FFDD",
"secondary": "#CC00CC",
"surface": "#F0FFF0",
"surfaceText": "#1F2F1F",
"surfaceVariant": "#E6FFE6",
"surfaceVariantText": "#2D4D2D",
"surfaceTint": "#00B899",
"background": "#FFFFFF",
"backgroundText": "#000000",
"outline": "#4DCC4D",
"surfaceContainer": "#F5FFF5",
"surfaceContainerHigh": "#EBFFEB",
"error": "#B3004D",
"warning": "#99CC00",
"info": "#00B899"
}
}

View File

@@ -0,0 +1,42 @@
{
"dark": {
"name": "Hotline Miami Dark",
"primary": "#FF0080",
"primaryText": "#FFFFFF",
"primaryContainer": "#CC0066",
"secondary": "#00FF80",
"surface": "#0D0D0D",
"surfaceText": "#F0F0F0",
"surfaceVariant": "#1A0F1A",
"surfaceVariantText": "#E0E0E0",
"surfaceTint": "#FF0080",
"background": "#000000",
"backgroundText": "#FFFFFF",
"outline": "#8000FF",
"surfaceContainer": "#1A0D1A",
"surfaceContainerHigh": "#260F26",
"error": "#FF4080",
"warning": "#FFFF00",
"info": "#00FF80"
},
"light": {
"name": "Hotline Miami Light",
"primary": "#CC0066",
"primaryText": "#FFFFFF",
"primaryContainer": "#FF80B3",
"secondary": "#00CC66",
"surface": "#FFF0FF",
"surfaceText": "#1A0F1A",
"surfaceVariant": "#F0E6F0",
"surfaceVariantText": "#2D1A2D",
"surfaceTint": "#CC0066",
"background": "#FFFFFF",
"backgroundText": "#0D0D0D",
"outline": "#6600CC",
"surfaceContainer": "#F5F0F5",
"surfaceContainerHigh": "#EBE0EB",
"error": "#B30040",
"warning": "#B3B300",
"info": "#00B359"
}
}

View File

@@ -0,0 +1,42 @@
{
"dark": {
"name": "Miami Vice Dark",
"primary": "#00FFFF",
"primaryText": "#000000",
"primaryContainer": "#00CCCC",
"secondary": "#FF1493",
"surface": "#0A0A0F",
"surfaceText": "#E0E0FF",
"surfaceVariant": "#1A1A2E",
"surfaceVariantText": "#C0C0FF",
"surfaceTint": "#00FFFF",
"background": "#000008",
"backgroundText": "#F0F0FF",
"outline": "#4040FF",
"surfaceContainer": "#131325",
"surfaceContainerHigh": "#1F1F40",
"error": "#FF0080",
"warning": "#FFFF00",
"info": "#00FFFF"
},
"light": {
"name": "Miami Vice Light",
"primary": "#0099CC",
"primaryText": "#FFFFFF",
"primaryContainer": "#00CCFF",
"secondary": "#CC0066",
"surface": "#F8F8FF",
"surfaceText": "#1A1A2E",
"surfaceVariant": "#E8E8FF",
"surfaceVariantText": "#2A2A4E",
"surfaceTint": "#0099CC",
"background": "#FFFFFF",
"backgroundText": "#0A0A2E",
"outline": "#6666CC",
"surfaceContainer": "#F0F0FF",
"surfaceContainerHigh": "#E0E0FF",
"error": "#CC0055",
"warning": "#CC9900",
"info": "#0099CC"
}
}

View File

@@ -0,0 +1,42 @@
{
"dark": {
"name": "Synthwave Electric Dark",
"primary": "#FF6600",
"primaryText": "#000000",
"primaryContainer": "#CC5200",
"secondary": "#0080FF",
"surface": "#0A0A15",
"surfaceText": "#E6F0FF",
"surfaceVariant": "#1A1A33",
"surfaceVariantText": "#CCE0FF",
"surfaceTint": "#FF6600",
"background": "#000008",
"backgroundText": "#F0F8FF",
"outline": "#4D80FF",
"surfaceContainer": "#151529",
"surfaceContainerHigh": "#212147",
"error": "#FF3366",
"warning": "#FFCC00",
"info": "#0080FF"
},
"light": {
"name": "Synthwave Electric Light",
"primary": "#CC5200",
"primaryText": "#FFFFFF",
"primaryContainer": "#FF9966",
"secondary": "#0066CC",
"surface": "#FFF8F0",
"surfaceText": "#1A1A33",
"surfaceVariant": "#F0F0FF",
"surfaceVariantText": "#333366",
"surfaceTint": "#CC5200",
"background": "#FFFFFF",
"backgroundText": "#000008",
"outline": "#3366CC",
"surfaceContainer": "#F5F5FF",
"surfaceContainerHigh": "#EBEBFF",
"error": "#CC1A40",
"warning": "#CC9900",
"info": "#0066CC"
}
}