NibrasShell can automatically generate a full color palette from your wallpaper using Material You (M3). When dynamic coloring is enabled, every time the wallpaper changes the shell extracts the dominant colors, builds a complete tonal palette, and applies it to the top bar, sidebar, OSD, and Hyprland window borders — with no manual intervention required. You can still override any individual color after generation through the Settings App.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/AhmedSaadi0/NibrasShell/llms.txt
Use this file to discover all available pages before exploring further.
How it works
The dynamic color pipeline runs through three components:WallpaperController signals a new image
When a wallpaper is loaded — either on startup or after a rotation —
WallpaperController emits a wallpaperReady signal with the full file path of the new wallpaper.ThemeManager checks for dynamic coloring
ThemeManager listens for wallpaperReady. If the active theme has enableDynamicColoring set to true, it calls SystemBridge.applyM3() with the wallpaper path and the current scheme parameters.SystemBridge runs the M3 script
SystemBridge dispatches a command to the m3/dynamic-m3.py Python script, passing the wallpaper path, theme mode (dark or light), scheme variant, chroma multiplier, and tone multiplier. The script uses the material-color-utilities library to extract seed colors and generate a full M3 tonal palette.Plasma color scheme is updated
The generated palette is written to a KDE Plasma color scheme file and applied immediately via
plasma-apply-colorscheme. This updates all Qt/KDE application colors in real time.Dynamic coloring only activates when
enableDynamicColoring is true in the active theme. The Material / Material You themes (M3Dark, M3Light) have this enabled by default. Other preset themes do not.Enabling dynamic coloring
You can turn on dynamic coloring for any theme from the Settings App:- Open the Settings App and go to Appearance.
- Select the Material You theme (dark or light).
- Dynamic coloring activates automatically once the theme loads and a wallpaper is present.
~/.cache/nibrasshell/themes/<ThemeName>.json and set:
Configuration parameters
Three parameters control how the M3 algorithm shapes the generated palette. You can adjust them in the Settings App under Material You options, or set them inBaseTheme.qml for a custom theme.
scheme_variant (dynamicColoringSchemeVariant)
scheme_variant (dynamicColoringSchemeVariant)
Selects the M3 tone-mapping scheme. Each variant interprets the seed color differently:
The default in NibrasShell is
| Value | Scheme |
|---|---|
0 | Tonal Spot (default Material You) |
1 | Vibrant |
2 | Expressive (NibrasShell default) |
3 | Fidelity |
4 | Monochrome |
5 | Neutral |
6 | Content |
2 (Expressive), which produces a palette with good contrast and variety from most wallpapers.dynamicColoringChromaMult
dynamicColoringChromaMult
A multiplier applied to the chroma (saturation) of the generated colors. The default is
2.5.- Values above
1.0make the palette more vivid and saturated. - Values below
1.0pull the palette toward grey. - A value of
3.0–4.0works well for wallpapers with muted or low-saturation tones.
dynamicColoringToneMult
dynamicColoringToneMult
A multiplier applied to the overall tone (lightness) of the generated palette. The default is
1.0.- Increase above
1.0to lighten the palette. - Decrease below
1.0to darken it. - Useful for fine-tuning dark vs. light mode contrast without switching theme mode.
Automatic updates on wallpaper rotation
When dynamic wallpapers are enabled (enableDynamicWallpapers: true) and a folder of wallpapers is configured, WallpaperController rotates through the playlist on a timer. Each rotation emits wallpaperReady, which triggers the full color pipeline automatically.
This means your entire color scheme — shell UI, Hyprland borders, Qt apps, and terminal — updates in sync with every wallpaper change.
Overriding colors after generation
Dynamic coloring generates a baseline palette, but you retain full control over individual colors. After the palette is applied, open the Settings App color editor to override any specific token:- Top bar background and foreground variants
- Sidebar layer colors
- OSD background and foreground
- Primary, secondary, and tertiary accent colors
To reset a color override and let dynamic generation control it again, use the reset button next to that color in the Settings App. This removes the override key from the cache file.