Files
arthur-os/default/quickshell/omarchy-shell/Commons/Style.qml
T
Jake Weaver ae70db3c53 Restyle Quickshell settings inputs to match Omarchy aesthetic
Settings dialogs were rendering text/spin/combo controls with Qt's
default light style, which clashed with the dark Omarchy theme — black
text on dark fills, white dropdown popups, rounded corners, and a
pill-style toggle that didn't match the native StyleToggleRow switch.

- Style.qml: collapse all radius tokens to 0 so Noctalia-compat widgets
  inherit Omarchy's sharp-corner convention
- NToggle: rewrite to mirror the native 48x22 switch with accent fill
  and a sliding 16x16 thumb
- NComboBox: skin contentItem, indicator, popup, and delegate so the
  dropdown reads on dark themes
- NSpinBox: add a styled background, contentItem, and up/down indicators
- SettingsPanel calendar form + DynamicSettingsForm string field: drop
  default TextField chrome for the same translucent foreground fill used
  by WidgetCard, accent border on focus
2026-05-15 16:46:56 -04:00

105 lines
3.7 KiB
QML

pragma Singleton
import QtQuick
import "." as Commons
// Noctalia compat shim. Sizing/spacing/typography tokens that plugins
// reference unconditionally. Real values picked to roughly match what
// Omarchy renders today — close enough that plugin layouts don't look
// jarring next to native widgets.
QtObject {
id: root
// Radii. Omarchy uses sharp corners; all radius tokens collapse to 0 so
// Noctalia plugins inherit the same look as native widgets.
readonly property real radiusXXS: 0
readonly property real radiusXS: 0
readonly property real radiusS: 0
readonly property real radiusM: 0
readonly property real radiusL: 0
readonly property real radiusXL: 0
readonly property real iRadiusXS: 0
readonly property real iRadiusS: 0
readonly property real iRadiusM: 0
readonly property real iRadiusL: 0
// Margins / paddings. Noctalia uses two parallel scales for margins (one
// tighter, one looser); we map them to the same values.
readonly property real marginXXS: 1
readonly property real marginXS: 2
readonly property real marginS: 4
readonly property real marginM: 6
readonly property real marginL: 10
readonly property real marginXL: 14
readonly property real margin2XXS: 1
readonly property real margin2XS: 2
readonly property real margin2S: 3
readonly property real margin2M: 5
readonly property real margin2L: 8
readonly property real margin2XL: 12
// Border widths.
readonly property real borderS: 1
readonly property real borderM: 1
readonly property real borderL: 2
// Font sizes.
readonly property real fontSizeXXS: 9
readonly property real fontSizeXS: 10
readonly property real fontSizeS: 11
readonly property real fontSizeM: 12
readonly property real fontSizeL: 14
readonly property real fontSizeXL: 16
readonly property real fontSizeXXL: 20
readonly property real fontSizeXXXL: 24
// Font weights.
readonly property int fontWeightLight: 300
readonly property int fontWeightRegular: 400
readonly property int fontWeightMedium: 500
readonly property int fontWeightSemiBold: 600
readonly property int fontWeightBold: 700
// Opacities.
readonly property real opacityLight: 0.4
readonly property real opacityMedium: 0.6
readonly property real opacityHeavy: 0.8
readonly property real opacityFull: 1.0
// Animation durations (ms).
readonly property int animationFast: 100
readonly property int animationNormal: 160
readonly property int animationSlow: 250
readonly property int animationSlower: 400
readonly property int animationSlowest: 600
// Tooltip delay (ms).
readonly property int tooltipDelay: 400
// Capsule (bar pill) tokens. The Omarchy bar is flat, no capsule background,
// so we route these to transparent + the foreground outline for visual hint.
readonly property color capsuleColor: Qt.rgba(0, 0, 0, 0)
readonly property color capsuleBorderColor: Qt.rgba(0, 0, 0, 0)
readonly property real capsuleBorderWidth: 0
readonly property real baseWidgetSize: 22
// UI scale ratio. Noctalia plugins multiply lengths by this when
// applyUiScale is true; we leave it at 1.
readonly property real uiScaleRatio: 1.0
// Helpers. Plugins pass screen names but in practice we ignore them and
// return our shell-wide values.
function getBarHeightForScreen(name) { return 28 }
function getCapsuleHeightForScreen(name) { return 22 }
function getBarFontSizeForScreen(name) { return fontSizeM }
function getBarRadiusForScreen(name) { return radiusM }
function pixelAlignCenter(parentSize, childSize) {
return Math.round((Number(parentSize) - Number(childSize)) / 2)
}
function toOdd(n) {
var i = Math.floor(Number(n))
return i | 1
}
}