How to Use BorderSurface with Omarchy Theme Tokens in QML
BorderSurface is the Omarchy UI primitive that renders rectangle-compatible backgrounds while honoring theme-driven border specifications, automatically selecting between hardware-accelerated native rendering and custom Shape-based overlays depending on border complexity.
The Omarchy desktop environment provides a sophisticated theming system for QML-based user interfaces. Understanding how to leverage BorderSurface with Omarchy theme tokens allows developers to create consistent, performant UI components that respect system-wide design specifications defined in shell.toml configuration files.
What is BorderSurface?
BorderSurface is a core visual primitive located in shell/Ui/BorderSurface.qml that extends standard Rectangle capabilities with theme-aware border rendering. Unlike a basic Rectangle, it accepts a structured borderSpec property instead of simple border.color and border.width values.
The component implements an intelligent rendering strategy:
- Native rendering: When the border specification contains uniform widths and no gradient,
BorderSurfacesets the underlyingRectangle.borderproperties directly, leveraging GPU acceleration - Overlay rendering: For asymmetric widths or gradient borders, it dynamically loads
BorderOverlayfromshell/Ui/BorderOverlay.qmlto draw complex paths using QML Shape
The Border singleton in shell/Commons/Border.qml serves as the factory that converts raw theme tokens into these structured border specifications.
Converting Theme Tokens to Border Specifications
Omarchy themes define border aesthetics in shell.toml (or default/themed/shell.toml.tpl) using a hierarchical token system:
[panel]
border = "#444" # Solid color or gradient definition
border-width = "2" # Uniform width, or "2 0 2 0" for per-side
border-alpha = 0.9
border-gradient = "45deg #444 #555" # Optional gradient with angle
The Border.qml singleton transforms these declarations into JavaScript specification objects using the surfaceSpec factory function:
import qs.Commons // Imports Border, Color, Style singletons
// Generate spec from theme tokens
var spec = Border.surfaceSpec(
"panel", // Theme section name
"border", // Token key
Color.accent, // Fallback color if theme undefined
1, // Fallback width
"border-alpha" // Optional alpha multiplier key
)
The resulting specification object follows this structure:
{
color: Qt.rgba(...), // Resolved color value
widths: {
top: 2,
right: 2,
bottom: 2,
left: 2
},
gradient: {
colors: ["#444", "#555"],
angle: 45,
enabled: true
}
}
Border.needsOverlay(spec) determines whether the specification requires the overlay renderer based on gradient presence or width asymmetry.
Implementing BorderSurface in QML
To render a themed border surface, import the Omarchy Commons module and bind a generated specification to the borderSpec property:
import QtQuick 2.15
import qs.Commons
Rectangle {
width: 200
height: 100
radius: 6
BorderSurface {
anchors.fill: parent
borderSpec: Border.surfaceSpec(
"panel",
"border",
Color.accent,
1,
"border-alpha"
)
padding: 8 // Content inset from border edge
Column {
anchors.centerIn: parent
Text { text: "Themed Panel" }
}
}
}
Key implementation details:
borderSpecaccepts any specification object returned byBorder.surfaceSpec,Border.controlSpec, orBorder.hyprlandActiveSpecpaddingcreates interior space between the border edge and child content- The component automatically falls back to native Rectangle borders when possible for optimal performance
Practical Examples from the Omarchy Codebase
Button Backgrounds
In shell/Ui/Button.qml, BorderSurface provides the clickable background:
BorderSurface {
id: bg
anchors.fill: parent
borderSpec: Border.surfaceSpec(
"button",
"border",
Color.background,
1
)
}
Menu Panels
The menu system in shell/plugins/menu/Menu.qml uses themed borders for panel chrome:
BorderSurface {
id: menuBg
anchors.fill: parent
borderSpec: Border.surfaceSpec(
"menu",
"border",
Color.background,
1
)
}
Asymmetric Border Widths
For panels requiring different border widths per side, the theme can define border-width = "3 0 3 0" (top right bottom left). BorderSurface automatically detects the non-uniform widths and instantiates BorderOverlay to render the complex geometry:
BorderSurface {
borderSpec: Border.surfaceSpec(
"panel",
"border",
Color.accent,
2
)
// Theme overrides specific sides via border-width-top, etc.
}
Rendering Strategy and Performance
BorderSurface optimizes rendering paths based on specification complexity:
Hardware-accelerated path: When Border.needsOverlay(spec) returns false (uniform widths, solid color, no gradient), the component sets Rectangle.border properties on its internal rectangle instance. This uses the graphics driver's native border rendering.
Shape-based path: For gradients or asymmetric widths, the component loads BorderOverlay.qml, which constructs a QML Shape with PathLine and PathArc elements to draw the border geometry with precise gradient stops or varying stroke widths.
This dual-path approach ensures complex themed borders render correctly while maintaining performance for standard use cases.
Summary
BorderSurfaceinshell/Ui/BorderSurface.qmlrenders themed borders with automatic complexity detectionBorder.qmlprovides factory functions likesurfaceSpec()to convertshell.tomltokens into structured specifications- Theme tokens include
border,border-width,border-alpha, andborder-gradientunder section headers like[panel] - The component automatically selects between native Rectangle borders and
BorderOverlayShape rendering based on specification requirements - Import
qs.Commonsto access the Border singleton and Color references in your QML files
Frequently Asked Questions
What is the difference between BorderSurface and a standard Rectangle?
A standard Rectangle accepts only uniform border.color and border.width with no gradient support. BorderSurface accepts a structured borderSpec object that supports per-side width variations, gradient borders, and theme token resolution, delegating to BorderOverlay when native Rectangle capabilities are insufficient.
How do I define custom border widths in the theme?
In your theme's shell.toml, use the [panel] section (or relevant widget section) to specify border-width as either a single integer for uniform borders or a space-separated string of four integers representing top, right, bottom, and left widths (e.g., border-width = "2 0 2 0").
When does BorderSurface use BorderOverlay instead of native rendering?
BorderSurface loads BorderOverlay when the border specification contains a gradient, when per-side widths differ (asymmetric borders), or when the alpha channel requires special compositing. Uniform solid borders use the native Rectangle border properties for better performance, as determined by Border.needsOverlay().
Can I use BorderSurface without importing the Omarchy Commons module?
No. BorderSurface requires the Border singleton from qs.Commons to resolve theme tokens into valid border specifications. While you could theoretically construct a specification object manually, the component is designed to work within the Omarchy theme system, relying on Border.surfaceSpec() or similar factory functions to ensure consistency with the active theme.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →