quickshell: retheme to apex-neon v2
Migrate the shell palette to the v2 semantic spine and clean up spec violations: - Theme.qml: v2 neutrals (#070709 ground), split real blue (#5b8cff) from info cyan, retire the peach token, add a focus attention violet. - Weather: severity-driven coloring (cyan/amber/red) from weatherCode; replaces decorative peach. Forecast highs=text, lows=subtext0. - SystemPopout: performance profile + Reboot hold -> amber (peach retired). - Workspaces: active indicator red -> focus violet (selection is attention, not danger). - SystemPill: Arch logo lavender -> real blue. - Bar.qml: gate BluetoothPill instantiation behind hasBluetooth so BlueZ DBus never spins up when the bluetooth tag is off. - IdleScreen: route hardcoded hex through Theme tokens.
This commit is contained in:
@@ -99,7 +99,13 @@ Scope {
|
||||
|
||||
BarComponents.KubernetesPill { id: kubernetesBtn; visible: Shared.Config.kubeEnabled }
|
||||
|
||||
BarComponents.BluetoothPill { id: bluetoothBtn; visible: Shared.Config.hasBluetooth }
|
||||
// Gate instantiation (not just visibility) so Quickshell.Bluetooth /
|
||||
// BlueZ DBus never spins up when the bluetooth tag is off.
|
||||
Loader {
|
||||
active: Shared.Config.hasBluetooth
|
||||
visible: active
|
||||
sourceComponent: BarComponents.BluetoothPill {}
|
||||
}
|
||||
|
||||
BarComponents.BarPill {
|
||||
id: notifBtn
|
||||
|
||||
@@ -5,13 +5,13 @@ import "../shared" as Shared
|
||||
|
||||
BarPill {
|
||||
groupName: "system"
|
||||
accentColor: Shared.Theme.lavender
|
||||
accentColor: Shared.Theme.blue
|
||||
|
||||
content: [
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: "\u{f303}"
|
||||
color: Shared.Theme.lavender
|
||||
color: Shared.Theme.blue
|
||||
font.pixelSize: Shared.Theme.fontLarge + 2
|
||||
font.family: Shared.Theme.iconFont
|
||||
}
|
||||
|
||||
@@ -4,16 +4,25 @@ import QtQuick.Layouts
|
||||
import "../shared" as Shared
|
||||
|
||||
BarPill {
|
||||
id: root
|
||||
groupName: "weather"
|
||||
accentColor: Shared.Weather.status === "error" ? Shared.Theme.overlay0 : Shared.Theme.peach
|
||||
|
||||
// Color follows condition severity: calm = info cyan, warning conditions
|
||||
// = amber, severe (thunder/blizzard/torrential) = danger red. error/stale
|
||||
// override to muted/amber respectively.
|
||||
readonly property color severityColor: Shared.Weather.status === "error" ? Shared.Theme.overlay0
|
||||
: Shared.Weather.status === "stale" ? Shared.Theme.warning
|
||||
: Shared.Weather.severity === "danger" ? Shared.Theme.danger
|
||||
: Shared.Weather.severity === "warning" ? Shared.Theme.warning
|
||||
: Shared.Theme.sky
|
||||
|
||||
accentColor: root.severityColor
|
||||
|
||||
content: [
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: Shared.Weather.status === "error" ? "\u{f0599}" : Shared.Weather.icon
|
||||
color: Shared.Weather.status === "error" ? Shared.Theme.overlay0
|
||||
: Shared.Weather.status === "stale" ? Shared.Theme.warning
|
||||
: Shared.Theme.peach
|
||||
color: root.severityColor
|
||||
font.pixelSize: Shared.Theme.fontLarge
|
||||
font.family: Shared.Theme.iconFont
|
||||
},
|
||||
@@ -22,9 +31,7 @@ BarPill {
|
||||
text: Shared.Weather.status === "error" ? "N/A"
|
||||
: Shared.Weather.status === "loading" ? "…"
|
||||
: Shared.Weather.temp
|
||||
color: Shared.Weather.status === "error" ? Shared.Theme.overlay0
|
||||
: Shared.Weather.status === "stale" ? Shared.Theme.warning
|
||||
: Shared.Theme.peach
|
||||
color: root.severityColor
|
||||
font.pixelSize: Shared.Theme.fontSmall
|
||||
font.family: Shared.Theme.fontFamily
|
||||
font.bold: true
|
||||
|
||||
@@ -102,7 +102,7 @@ Item {
|
||||
width: root.cellSize
|
||||
height: root.cellSize
|
||||
radius: Shared.Theme.radiusSmall
|
||||
color: Shared.Theme.red
|
||||
color: Shared.Theme.focus
|
||||
|
||||
Behavior on y {
|
||||
NumberAnimation {
|
||||
|
||||
@@ -542,7 +542,7 @@ Item {
|
||||
model: [
|
||||
{ name: "power-saver", icon: "\u{f19be}", color: Shared.Theme.green },
|
||||
{ name: "balanced", icon: "\u{f0a01}", color: Shared.Theme.blue },
|
||||
{ name: "performance", icon: "\u{f1b4b}", color: Shared.Theme.peach }
|
||||
{ name: "performance", icon: "\u{f1b4b}", color: Shared.Theme.yellow }
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
@@ -610,8 +610,8 @@ Item {
|
||||
HoldAction {
|
||||
icon: "\u{f0709}"
|
||||
label: "Reboot"
|
||||
iconColor: Shared.Theme.peach
|
||||
holdColor: Shared.Theme.peach
|
||||
iconColor: Shared.Theme.yellow
|
||||
holdColor: Shared.Theme.yellow
|
||||
onConfirmed: { Shared.PopoutState.close(); rebootProc.running = true; }
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,18 @@ Item {
|
||||
implicitWidth: Shared.Theme.popoutWidth
|
||||
implicitHeight: col.implicitHeight + Shared.Theme.popoutPadding * 2
|
||||
|
||||
// Current condition severity → info cyan / warning amber / danger red.
|
||||
readonly property color severityColor: Shared.Weather.severity === "danger" ? Shared.Theme.danger
|
||||
: Shared.Weather.severity === "warning" ? Shared.Theme.warning
|
||||
: Shared.Theme.sky
|
||||
|
||||
function severityColorFor(code) {
|
||||
const s = Shared.Weather.weatherSeverity(code);
|
||||
return s === "danger" ? Shared.Theme.danger
|
||||
: s === "warning" ? Shared.Theme.warning
|
||||
: Shared.Theme.sky;
|
||||
}
|
||||
|
||||
PopoutBackground { anchors.fill: parent }
|
||||
MouseArea { anchors.fill: parent }
|
||||
|
||||
@@ -34,13 +46,13 @@ Item {
|
||||
}
|
||||
Text {
|
||||
text: Shared.Weather.icon
|
||||
color: Shared.Theme.peach
|
||||
color: root.severityColor
|
||||
font.pixelSize: 24
|
||||
font.family: Shared.Theme.iconFont
|
||||
}
|
||||
Text {
|
||||
text: Shared.Weather.temp
|
||||
color: Shared.Theme.peach
|
||||
color: root.severityColor
|
||||
font.pixelSize: 18
|
||||
font.family: Shared.Theme.fontFamily
|
||||
font.bold: true
|
||||
@@ -108,13 +120,13 @@ Item {
|
||||
}
|
||||
Text {
|
||||
text: Shared.Weather.weatherIcon(modelData.code)
|
||||
color: Shared.Theme.peach
|
||||
color: root.severityColorFor(modelData.code)
|
||||
font.pixelSize: 14
|
||||
font.family: Shared.Theme.iconFont
|
||||
}
|
||||
Text {
|
||||
text: modelData.desc
|
||||
color: Shared.Theme.surface2
|
||||
color: Shared.Theme.overlay0
|
||||
font.pixelSize: Shared.Theme.fontSmall
|
||||
font.family: Shared.Theme.fontFamily
|
||||
Layout.fillWidth: true
|
||||
@@ -122,7 +134,7 @@ Item {
|
||||
}
|
||||
Text {
|
||||
text: modelData.low + "°"
|
||||
color: Shared.Theme.sky
|
||||
color: Shared.Theme.subtext0
|
||||
font.pixelSize: Shared.Theme.fontSize
|
||||
font.family: Shared.Theme.fontFamily
|
||||
horizontalAlignment: Text.AlignRight
|
||||
@@ -130,7 +142,7 @@ Item {
|
||||
}
|
||||
Text {
|
||||
text: modelData.high + "°"
|
||||
color: Shared.Theme.peach
|
||||
color: Shared.Theme.text
|
||||
font.pixelSize: Shared.Theme.fontSize
|
||||
font.family: Shared.Theme.fontFamily
|
||||
font.bold: true
|
||||
|
||||
@@ -45,7 +45,7 @@ Scope {
|
||||
// Full black backdrop
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#050505"
|
||||
color: Shared.Theme.base
|
||||
|
||||
ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
@@ -56,7 +56,7 @@ Scope {
|
||||
id: clockText
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: Qt.formatDateTime(new Date(), Shared.Config.clockSecondsFormat)
|
||||
color: "#00eaff"
|
||||
color: Shared.Theme.sky
|
||||
font.pixelSize: 96
|
||||
font.family: Shared.Theme.fontFamily
|
||||
font.weight: Font.Light
|
||||
@@ -75,7 +75,7 @@ Scope {
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: Qt.formatDateTime(new Date(), "dddd, d MMMM")
|
||||
color: "#404040"
|
||||
color: Shared.Theme.overlay0
|
||||
font.pixelSize: 18
|
||||
font.family: Shared.Theme.fontFamily
|
||||
font.letterSpacing: 2
|
||||
|
||||
@@ -7,42 +7,42 @@ Singleton {
|
||||
// ─── Apex palettes ───────────────────────
|
||||
readonly property var palettes: ({
|
||||
neon: {
|
||||
// Backgrounds
|
||||
base: "#050505", mantle: "#0a0a0a", crust: "#000000",
|
||||
surface0: "#141414", surface1: "#1e1e1e", surface2: "#262626",
|
||||
overlay0: "#404040", overlay1: "#555555",
|
||||
// Text
|
||||
text: "#ededed", subtext0: "#b0b0b0", subtext1: "#d0d0d0",
|
||||
// Accent colors — apex-neon palette
|
||||
lavender: "#9d00ff", // sacred purple
|
||||
mauve: "#9d00ff", // sacred purple
|
||||
pink: "#ff0044", // razor red
|
||||
red: "#ff0044", // razor red
|
||||
peach: "#ff8899", // alert salmon
|
||||
yellow: "#ffb700", // amber warning
|
||||
green: "#00ff99", // toxic green
|
||||
teal: "#00ff99", // toxic green
|
||||
blue: "#00eaff", // tech cyan
|
||||
sky: "#00eaff" // tech cyan
|
||||
// Backgrounds — v2 cool-tinted ground (Void→Stealth)
|
||||
base: "#070709", mantle: "#101218", crust: "#000000",
|
||||
surface0: "#181b22", surface1: "#262a34", surface2: "#383d49",
|
||||
overlay0: "#8b909c", overlay1: "#5a606c",
|
||||
// Text — Stark, not pure white
|
||||
text: "#e6e8ec", subtext0: "#aab0bc", subtext1: "#cdd4e3",
|
||||
// Accent colors — apex-neon v2 spine
|
||||
lavender: "#9d00ff", // special / root violet
|
||||
mauve: "#9d00ff", // special / root violet
|
||||
focus: "#d68fff", // attention — selection / "you are here" crosshair
|
||||
pink: "#ff0044", // danger red
|
||||
red: "#ff0044", // danger red
|
||||
yellow: "#ffb700", // warning amber
|
||||
green: "#00ff99", // success green
|
||||
teal: "#00ff99", // success green
|
||||
blue: "#5b8cff", // real blue — accent / active-neutral
|
||||
sky: "#00eaff" // info cyan
|
||||
},
|
||||
aeon: {
|
||||
// Backgrounds
|
||||
base: "#f5f5f5", mantle: "#e8e8e8", crust: "#d0d0d0",
|
||||
surface0: "#e0e0e0", surface1: "#d4d4d4", surface2: "#c8c8c8",
|
||||
overlay0: "#737373", overlay1: "#555555",
|
||||
// Backgrounds — v2 light ground
|
||||
base: "#f1f3f7", mantle: "#e7eaf0", crust: "#ffffff",
|
||||
surface0: "#e7eaf0", surface1: "#dde1ea", surface2: "#c8cdd8",
|
||||
overlay0: "#6a7080", overlay1: "#8a909c",
|
||||
// Text
|
||||
text: "#0a0a0a", subtext0: "#444444", subtext1: "#333333",
|
||||
// Accent colors — apex-aeon palette
|
||||
lavender: "#7a3cff", // indigo purple
|
||||
mauve: "#7a3cff", // indigo purple
|
||||
pink: "#ff0044", // razor red
|
||||
red: "#ff0044", // razor red
|
||||
peach: "#ff4d6d", // rose error
|
||||
yellow: "#d18f00", // dark amber
|
||||
green: "#00b377", // forest green
|
||||
teal: "#00b377", // forest green
|
||||
blue: "#007a88", // deep teal
|
||||
sky: "#007a88" // deep teal
|
||||
text: "#16181d", subtext0: "#3a3f4a", subtext1: "#2a2e38",
|
||||
// Accent colors — apex-aeon v2 spine
|
||||
lavender: "#6a1fb8", // special / root violet
|
||||
mauve: "#6a1fb8", // special / root violet
|
||||
focus: "#7c2fd6", // attention — selection / "you are here" crosshair
|
||||
pink: "#c8003a", // danger red
|
||||
red: "#c8003a", // danger red
|
||||
yellow: "#a86b00", // warning amber
|
||||
green: "#00875a", // success green
|
||||
teal: "#00875a", // success green
|
||||
blue: "#2148c0", // real blue — accent / active-neutral
|
||||
sky: "#0080a6" // info cyan
|
||||
}
|
||||
})
|
||||
|
||||
@@ -61,9 +61,9 @@ Singleton {
|
||||
readonly property color subtext1: p.subtext1
|
||||
readonly property color lavender: p.lavender
|
||||
readonly property color mauve: p.mauve
|
||||
readonly property color focus: p.focus
|
||||
readonly property color pink: p.pink
|
||||
readonly property color red: p.red
|
||||
readonly property color peach: p.peach
|
||||
readonly property color yellow: p.yellow
|
||||
readonly property color green: p.green
|
||||
readonly property color teal: p.teal
|
||||
@@ -71,12 +71,12 @@ Singleton {
|
||||
readonly property color sky: p.sky
|
||||
|
||||
// ─── Semantic aliases ────────────────────
|
||||
readonly property color accent: blue // tech cyan / deep teal
|
||||
readonly property color success: green // toxic / forest
|
||||
readonly property color warning: yellow // amber
|
||||
readonly property color danger: red // razor red
|
||||
readonly property color info: sky // cyan / teal
|
||||
readonly property color muted: overlay0 // dim grey
|
||||
readonly property color accent: blue // real blue — active-neutral
|
||||
readonly property color success: green // success green
|
||||
readonly property color warning: yellow // warning amber
|
||||
readonly property color danger: red // danger red
|
||||
readonly property color info: sky // info cyan
|
||||
readonly property color muted: overlay0 // muted grey
|
||||
|
||||
// ─── Opacity tokens ──────────────────────
|
||||
readonly property real opacitySubtle: 0.08 // borders, faint dividers
|
||||
|
||||
@@ -17,7 +17,19 @@ Singleton {
|
||||
property string humidity: "--"
|
||||
property string wind: "--"
|
||||
property var forecast: []
|
||||
property string status: "loading" // "loading", "ok", "error"
|
||||
property string status: "loading" // "loading", "ok", "error", "stale"
|
||||
property string severity: "normal" // "normal", "warning", "danger"
|
||||
|
||||
// Map a WWO weatherCode to a condition severity tier.
|
||||
// danger → thunder / blizzard / torrential; warning → heavy precip,
|
||||
// sleet/freezing, heavy snow showers, fog; normal → everything calm.
|
||||
function weatherSeverity(code) {
|
||||
code = parseInt(code);
|
||||
if ([200, 386, 389, 392, 395, 227, 230, 308].includes(code)) return "danger";
|
||||
if ([302, 305, 356, 359, 281, 284, 311, 314, 317, 320, 362, 365,
|
||||
374, 377, 335, 338, 371, 143, 248, 260].includes(code)) return "warning";
|
||||
return "normal";
|
||||
}
|
||||
|
||||
function weatherIcon(code) {
|
||||
code = parseInt(code);
|
||||
@@ -51,6 +63,7 @@ Singleton {
|
||||
root.description = cur.weatherDesc[0].value;
|
||||
root.location = data.nearest_area[0].areaName[0].value;
|
||||
root.icon = root.weatherIcon(cur.weatherCode);
|
||||
root.severity = root.weatherSeverity(cur.weatherCode);
|
||||
|
||||
let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
||||
let fc = [];
|
||||
|
||||
Reference in New Issue
Block a user