Dynamic Theme Engine and OLED Color Management for Quickshell
Score —Methods for applying true OLED blacks, Catppuccin, Tokyo Night, and custom color palettes across Quickshell instantly without reloading.
Contents
Summary: The way to change the theme in Quickshell without restarting the application is a
Theme.qmlfile defined withpragma Singleton: all components read their colors from here, and callingTheme.setTheme()switches the screen to the new palette instantly. The article also gives the main colors of the four OLED themes I prepared for Omarchy.
In desktop aesthetics, changing the theme usually requires editing configuration files and restarting the application. Thanks to Quickshell, the QML Singleton pattern and dynamic property binding (dynamic property binding), it makes it possible to change the color scheme of the entire desktop with a single command and instantly.
In this article, we cover how high-contrast themes optimized especially for OLED (#000000) panels are configured in Quickshell and how they are integrated with the Omarchy theme engine.
1. The Global Theme Singleton: Theme.qml
A file declared with pragma Singleton in QML can be accessed directly by all subcomponents:
pragma Singleton
import QtQuick 2.15
QtObject {
id: theme
// Aktif tema adı
property string current: "oled-black"
// Dinamik renk paletleri
property color background: current === "oled-black" ? "#000000" : "#0f141c"
property color surface: current === "oled-black" ? "#0a0a0a" : "#171d27"
property color border: current === "oled-black" ? "#222222" : "#2a3442"
property color text: "#f4f4f5"
property color textMuted: "#71717a"
property color accent: "#00ffcc"
// Temayı anında değiştir
function setTheme(name) {
current = name;
}
}
Since all bars and widgets are defined as color: Theme.background, the moment Theme.setTheme("tokyo-night") is called, the entire screen takes on the new colors without requiring a restart.
2. Official Omarchy OLED Themes
Four core OLED themes we designed for the Omarchy ecosystem, running on the Quickshell engine:
- Türkiye Theme: A balance of crescent-and-star crimson (#e11d48) and Mediterranean turquoise (#00ffcc).
- Steam Machine Edition: Valve's legacy mechanical orange (#f97316) and Steam blue (#38bdf8).
- Ankara Theme: Warm amber (#f59e0b) and capital navy (#1e3a8a).
- İstanbul Theme: İznik tile turquoise and coral red (#fb7185).
All these themes let pixels on OLED screens switch off completely, which both saves power and delivers absolute contrast.
My reading
- Colors should come from a single place: when components bind to the theme object instead of hardcoded colors, changes happen instantly.
- On OLED, black should be truly black: a #000000 background turns pixels off, providing power savings and contrast.