Machine translation from Turkish (Cloudflare Workers AI), not reviewed by the author. Read the Turkish original

← Posts

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.

· 2 min read
Contents

Summary: The way to change the theme in Quickshell without restarting the application is a Theme.qml file defined with pragma Singleton: all components read their colors from here, and calling Theme.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:

  1. Türkiye Theme: A balance of crescent-and-star crimson (#e11d48) and Mediterranean turquoise (#00ffcc).
  2. Steam Machine Edition: Valve's legacy mechanical orange (#f97316) and Steam blue (#38bdf8).
  3. Ankara Theme: Warm amber (#f59e0b) and capital navy (#1e3a8a).
  4. İ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.