aboutsummaryrefslogtreecommitdiffstats
path: root/config/quickshell/services/MaterialThemeLoader.qml
diff options
context:
space:
mode:
authorJa.KooLit <85185940+JaKooLit@users.noreply.github.com>2025-06-15 17:08:35 +0000
committerGitHub <noreply@github.com>2025-06-15 17:08:35 +0000
commit88abbee9fe56f2e2489f04a017daaf3cfdc97511 (patch)
treec229832f852a3e55b41addcfc675d3ceb3df2282 /config/quickshell/services/MaterialThemeLoader.qml
parent4cf0d0bd5930da76e60f6770de3ee97c10ca7024 (diff)
parentd46077fe5ac56afbd63dc1222e649f10435b05e2 (diff)
Merge pull request #737 from SherLock707/overviewV2_qs
Overview Widget v2: Migration from AGS to QuickShell
Diffstat (limited to 'config/quickshell/services/MaterialThemeLoader.qml')
-rw-r--r--config/quickshell/services/MaterialThemeLoader.qml58
1 files changed, 58 insertions, 0 deletions
diff --git a/config/quickshell/services/MaterialThemeLoader.qml b/config/quickshell/services/MaterialThemeLoader.qml
new file mode 100644
index 00000000..cd4eb686
--- /dev/null
+++ b/config/quickshell/services/MaterialThemeLoader.qml
@@ -0,0 +1,58 @@
+pragma Singleton
+pragma ComponentBehavior: Bound
+
+import "root:/modules/common"
+import QtQuick
+import Quickshell
+import Quickshell.Io
+
+/**
+ * Automatically reloads generated material colors.
+ * It is necessary to run reapplyTheme() on startup because Singletons are lazily loaded.
+ */
+Singleton {
+ id: root
+ property string filePath: Directories.generatedMaterialThemePath
+
+ function reapplyTheme() {
+ themeFileView.reload()
+ }
+
+ function applyColors(fileContent) {
+ const json = JSON.parse(fileContent)
+ for (const key in json) {
+ if (json.hasOwnProperty(key)) {
+ // Convert snake_case to CamelCase
+ const camelCaseKey = key.replace(/_([a-z])/g, (g) => g[1].toUpperCase())
+ const m3Key = `m3${camelCaseKey}`
+ Appearance.m3colors[m3Key] = json[key]
+ }
+ }
+
+ Appearance.m3colors.darkmode = (Appearance.m3colors.m3background.hslLightness < 0.5)
+ }
+
+ Timer {
+ id: delayedFileRead
+ interval: ConfigOptions?.hacks?.arbitraryRaceConditionDelay ?? 100
+ repeat: false
+ running: false
+ onTriggered: {
+ root.applyColors(themeFileView.text())
+ }
+ }
+
+ FileView {
+ id: themeFileView
+ path: Qt.resolvedUrl(root.filePath)
+ watchChanges: true
+ onFileChanged: {
+ this.reload()
+ delayedFileRead.start()
+ }
+ onLoadedChanged: {
+ const fileContent = themeFileView.text()
+ root.applyColors(fileContent)
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage