diff options
| author | Ja.KooLit <85185940+JaKooLit@users.noreply.github.com> | 2025-06-15 17:08:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-15 17:08:35 +0000 |
| commit | 88abbee9fe56f2e2489f04a017daaf3cfdc97511 (patch) | |
| tree | c229832f852a3e55b41addcfc675d3ceb3df2282 /config/quickshell/services/MaterialThemeLoader.qml | |
| parent | 4cf0d0bd5930da76e60f6770de3ee97c10ca7024 (diff) | |
| parent | d46077fe5ac56afbd63dc1222e649f10435b05e2 (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.qml | 58 |
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) + } + } +} |
