133 lines
5 KiB
QML
133 lines
5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Commons
|
|
import qs.Services
|
|
|
|
// --------------------------------
|
|
// Noctalia Colors - Material Design 3
|
|
// We only use a very small subset of all available m3 colors to avoid complexity
|
|
// All color names start with a 'm' to avoid QML assuming some of them are signals (ex: onPrimary)
|
|
Singleton {
|
|
id: root
|
|
|
|
// --- Key Colors: These are the main accent colors that define your app's style
|
|
property color mPrimary: customColors.mPrimary
|
|
property color mOnPrimary: customColors.mOnPrimary
|
|
property color mSecondary: customColors.mSecondary
|
|
property color mOnSecondary: customColors.mOnSecondary
|
|
property color mTertiary: customColors.mTertiary
|
|
property color mOnTertiary: customColors.mOnTertiary
|
|
|
|
// --- Utility Colors: These colors serve specific, universal purposes like indicating errors
|
|
property color mError: customColors.mError
|
|
property color mOnError: customColors.mOnError
|
|
|
|
// --- Surface and Variant Colors: These provide additional options for surfaces and their contents, creating visual hierarchy
|
|
property color mSurface: customColors.mSurface
|
|
property color mOnSurface: customColors.mOnSurface
|
|
property color mSurfaceVariant: customColors.mSurfaceVariant
|
|
property color mOnSurfaceVariant: customColors.mOnSurfaceVariant
|
|
property color mOutline: customColors.mOutline
|
|
property color mOutlineVariant: customColors.mOutlineVariant
|
|
property color mShadow: customColors.mShadow
|
|
|
|
// -----------
|
|
function applyOpacity(color, opacity) {
|
|
// Convert color to string and apply opacity
|
|
return color.toString().replace("#", "#" + opacity)
|
|
}
|
|
|
|
// --------------------------------
|
|
// Default colors: RosePine
|
|
QtObject {
|
|
id: defaultColors
|
|
|
|
property color mPrimary: "#ebbcba"
|
|
property color mOnPrimary: "#1f1d2e"
|
|
property color mSecondary: "#31748f"
|
|
property color mOnSecondary: "#e0def4"
|
|
property color mTertiary: "#9ccfd8"
|
|
property color mOnTertiary: "#191724"
|
|
|
|
property color mError: "#eb6f92"
|
|
property color mOnError: "#1f1d2e"
|
|
|
|
property color mSurface: "#1f1d2e"
|
|
property color mOnSurface: "#e0def4"
|
|
property color mSurfaceVariant: "#26233a"
|
|
property color mOnSurfaceVariant: "#908caa"
|
|
property color mOutline: "#44415a"
|
|
property color mOutlineVariant: "#514e6c"
|
|
property color mShadow: "#191724"
|
|
}
|
|
|
|
// ----------------------------------------------------------------
|
|
// Custom colors loaded from colors.json
|
|
// These can be generated by matugen or simply come from a well know color scheme (Dracula, Gruvbox, Nord, ...)
|
|
QtObject {
|
|
id: customColors
|
|
|
|
property color mPrimary: customColorsData.mPrimary
|
|
property color mOnPrimary: customColorsData.mOnPrimary
|
|
property color mSecondary: customColorsData.mSecondary
|
|
property color mOnSecondary: customColorsData.mOnSecondary
|
|
property color mTertiary: customColorsData.mTertiary
|
|
property color mOnTertiary: customColorsData.mOnTertiary
|
|
|
|
property color mError: customColorsData.mError
|
|
property color mOnError: customColorsData.mOnError
|
|
|
|
property color mSurface: customColorsData.mSurface
|
|
property color mOnSurface: customColorsData.mOnSurface
|
|
property color mSurfaceVariant: customColorsData.mSurfaceVariant
|
|
property color mOnSurfaceVariant: customColorsData.mOnSurfaceVariant
|
|
property color mOutline: customColorsData.mOutline
|
|
property color mOutlineVariant: customColorsData.mOutlineVariant
|
|
property color mShadow: customColorsData.mShadow
|
|
}
|
|
|
|
// FileView to load custom colors data from colors.json
|
|
FileView {
|
|
id: customColorsFile
|
|
path: Settings.configDir + "colors.json"
|
|
watchChanges: true
|
|
onFileChanged: {
|
|
console.log("[Colors] Reloading colors from disk")
|
|
reload()
|
|
}
|
|
onAdapterUpdated: {
|
|
console.log("[Colors] Writing colors to disk")
|
|
writeAdapter()
|
|
}
|
|
onLoadFailed: function (error) {
|
|
if (error.toString().includes("No such file") || error === 2) {
|
|
// File doesn't exist, create it with default values
|
|
writeAdapter()
|
|
}
|
|
}
|
|
JsonAdapter {
|
|
id: customColorsData
|
|
|
|
property color mPrimary: defaultColors.mPrimary
|
|
property color mOnPrimary: defaultColors.mOnPrimary
|
|
property color mSecondary: defaultColors.mSecondary
|
|
property color mOnSecondary: defaultColors.mOnSecondary
|
|
property color mTertiary: defaultColors.mTertiary
|
|
property color mOnTertiary: defaultColors.mOnTertiary
|
|
|
|
property color mError: defaultColors.mError
|
|
property color mOnError: defaultColors.mOnError
|
|
|
|
property color mSurface: defaultColors.mSurface
|
|
property color mOnSurface: defaultColors.mOnSurface
|
|
property color mSurfaceVariant: defaultColors.mSurfaceVariant
|
|
property color mOnSurfaceVariant: defaultColors.mOnSurfaceVariant
|
|
property color mOutline: defaultColors.mOutline
|
|
property color mOutlineVariant: defaultColors.mOutlineVariant
|
|
property color mShadow: defaultColors.mShadow
|
|
}
|
|
}
|
|
}
|