plugin: rust-side modules + theme services with serde-typed config

This commit is contained in:
Damocles 2026-05-04 22:58:12 +02:00
parent a86e90e927
commit f34f3f2f4e
95 changed files with 2477 additions and 1011 deletions

View file

@ -7,6 +7,7 @@ import "." as D
import "../services" as S
import "../applets" as C
import "../modules" as M
import NovaStats as NS
PanelWindow {
id: root
@ -25,11 +26,10 @@ PanelWindow {
anchors.bottom: true
// Counteract the bar's exclusive zone so the dock extends to the top of the screen
margins.top: -S.Theme.barHeight
margins.top: -NS.ThemeService.barHeight
readonly property int _dockWidth: S.Modules.dock.width ?? 300
readonly property var _applets: S.Modules.dock.applets ?? {}
readonly property color _accent: S.Theme.base0C
readonly property int _dockWidth: NS.ModulesService.dockWidth ?? 300
readonly property color _accent: NS.ThemeService.base0C
implicitWidth: _dockWidth
@ -55,14 +55,14 @@ PanelWindow {
if (S.DockState.open) {
root._winVisible = true;
_hideAnim.stop();
if (S.Theme.reducedMotion) {
if (S.ThemeUtil.reducedMotion) {
root._slideX = 0;
} else {
_showAnim.start();
}
} else {
_showAnim.stop();
if (S.Theme.reducedMotion) {
if (S.ThemeUtil.reducedMotion) {
root._slideX = root._dockWidth;
root._winVisible = false;
} else {
@ -113,8 +113,8 @@ PanelWindow {
Rectangle {
id: _bg
anchors.fill: parent
color: S.Theme.base00
opacity: S.DockState.mode === "pinned" ? 1.0 : Math.max(S.Theme.barOpacity, 0.85)
color: NS.ThemeService.base00
opacity: S.DockState.mode === "pinned" ? 1.0 : Math.max(NS.ThemeService.barOpacity, 0.85)
transform: Translate {
x: root._slideX
@ -128,7 +128,7 @@ PanelWindow {
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 1
color: S.Theme.base09
color: NS.ThemeService.base09
opacity: _bg.opacity
transform: Translate {
@ -142,7 +142,7 @@ PanelWindow {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: S.Theme.barHeight
height: NS.ThemeService.barHeight
visible: S.DockState.mode === "pinned"
transform: Translate {
@ -151,7 +151,7 @@ PanelWindow {
Rectangle {
anchors.fill: parent
color: S.Theme.base00
color: NS.ThemeService.base00
}
// Bottom border - gradient matching bar style (base0C to base09, but just the right end)
@ -160,7 +160,7 @@ PanelWindow {
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 1
color: S.Theme.base09
color: NS.ThemeService.base09
}
// Dock toggle
@ -185,7 +185,7 @@ PanelWindow {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.leftMargin: S.Theme.groupSpacing + 1
anchors.leftMargin: NS.ThemeService.groupSpacing + 1
contentHeight: _column.height
clip: true
boundsBehavior: Flickable.StopAtBounds
@ -205,7 +205,7 @@ PanelWindow {
// Clock
D.DockCard {
visible: root._applets.clock ?? true
visible: NS.ModulesService.dockAppletClock
icon: "\uF017"
title: "Clock"
accentColor: root._accent
@ -221,7 +221,7 @@ PanelWindow {
// CPU
D.DockCard {
id: _cpuCard
visible: root._applets.cpu ?? true
visible: NS.ModulesService.dockAppletCpu
icon: "\uF2DB"
title: "CPU"
accentColor: root._accent
@ -237,7 +237,7 @@ PanelWindow {
// GPU
D.DockCard {
visible: (root._applets.gpu ?? true) && S.SystemStats.gpuAvailable
visible: (NS.ModulesService.dockAppletGpu) && S.SystemStats.gpuAvailable
icon: "\uEB4C"
title: "GPU"
accentColor: root._accent
@ -253,7 +253,7 @@ PanelWindow {
// Memory
D.DockCard {
id: _memCard
visible: root._applets.memory ?? true
visible: NS.ModulesService.dockAppletMemory
icon: "\uEFC5"
title: "Memory"
accentColor: root._accent
@ -275,7 +275,7 @@ PanelWindow {
// Temperature
D.DockCard {
visible: root._applets.temperature ?? true
visible: NS.ModulesService.dockAppletTemperature
icon: "\uF2C9"
title: "Temperature"
accentColor: root._accent
@ -284,19 +284,19 @@ PanelWindow {
C.TemperatureApplet {
width: parent.width
temp: S.SystemStats.tempCelsius
warm: S.Modules.temperature.warm || 80
hot: S.Modules.temperature.hot || 90
warm: NS.ModulesService.temperatureWarm || 80
hot: NS.ModulesService.temperatureHot || 90
history: S.SystemStats.tempHistory
devices: S.SystemStats.tempDevices
accentColor: root._accent
deviceFilter: S.Modules.temperature.device || ""
deviceFilter: NS.ModulesService.temperatureDevice || ""
active: parent.expanded
}
}
// Disk
D.DockCard {
visible: root._applets.disk ?? true
visible: NS.ModulesService.dockAppletDisk
icon: "\uF0C9"
title: "Disk"
accentColor: root._accent
@ -311,7 +311,7 @@ PanelWindow {
// Battery
D.DockCard {
visible: (root._applets.battery ?? true) && S.BatteryService.available
visible: (NS.ModulesService.dockAppletBattery) && S.BatteryService.available
icon: "\uDB80\uDC84"
title: "Battery"
accentColor: root._accent
@ -326,7 +326,7 @@ PanelWindow {
// Network
D.DockCard {
visible: root._applets.network ?? true
visible: NS.ModulesService.dockAppletNetwork
icon: "\uF1EB"
title: "Network"
accentColor: root._accent
@ -341,7 +341,7 @@ PanelWindow {
// Bluetooth
D.DockCard {
visible: (root._applets.bluetooth ?? true) && S.BluetoothService.state !== "unavailable"
visible: (NS.ModulesService.dockAppletBluetooth) && S.BluetoothService.state !== "unavailable"
icon: "\uF294"
title: "Bluetooth"
accentColor: root._accent
@ -356,7 +356,7 @@ PanelWindow {
// Volume
D.DockCard {
visible: root._applets.volume ?? true
visible: NS.ModulesService.dockAppletVolume
icon: "\uF028"
title: "Sound"
accentColor: root._accent
@ -370,7 +370,7 @@ PanelWindow {
// Backlight
D.DockCard {
visible: (root._applets.backlight ?? true) && S.BacklightService.available
visible: (NS.ModulesService.dockAppletBacklight) && S.BacklightService.available
icon: "\uF185"
title: "Brightness"
accentColor: root._accent
@ -386,7 +386,7 @@ PanelWindow {
// Weather
D.DockCard {
visible: (root._applets.weather ?? true) && S.WeatherService.available
visible: (NS.ModulesService.dockAppletWeather) && S.WeatherService.available
icon: S.WeatherService.icon
title: "Weather"
accentColor: root._accent
@ -400,7 +400,7 @@ PanelWindow {
// Now Playing
D.DockCard {
visible: (root._applets.mpris ?? true) && S.MprisService.player !== null
visible: (NS.ModulesService.dockAppletMpris) && S.MprisService.player !== null
icon: "\uF04B"
title: "Now Playing"
accentColor: root._accent
@ -414,7 +414,7 @@ PanelWindow {
// Notifications
D.DockCard {
visible: root._applets.notifications ?? true
visible: NS.ModulesService.dockAppletNotifications
icon: "\uDB80\uDC9C"
title: "Notifications"
accentColor: root._accent
@ -429,7 +429,7 @@ PanelWindow {
// Power
D.DockCard {
visible: root._applets.power ?? true
visible: NS.ModulesService.dockAppletPower
icon: "\uF011"
title: "Power"
accentColor: root._accent