mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2025-12-06 06:36:15 +00:00
139 lines
4.8 KiB
QML
139 lines
4.8 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Commons
|
|
|
|
/*
|
|
Noctalia is not strictly a Material Design project, it supports both some predefined
|
|
color schemes and dynamic color generation from the wallpaper (using Matugen).
|
|
|
|
We ultimately decided to use a restricted set of colors that follows the
|
|
Material Design 3 naming convention.
|
|
|
|
NOTE: All color names are prefixed with 'm' (e.g., mPrimary) to prevent QML from
|
|
misinterpreting them as signals (e.g., the 'onPrimary' property name).
|
|
*/
|
|
Singleton {
|
|
id: root
|
|
|
|
// --- Key Colors: These are the main accent colors that define your app's style
|
|
readonly property color mPrimary: customColorsData.mPrimary
|
|
readonly property color mOnPrimary: customColorsData.mOnPrimary
|
|
readonly property color mSecondary: customColorsData.mSecondary
|
|
readonly property color mOnSecondary: customColorsData.mOnSecondary
|
|
readonly property color mTertiary: customColorsData.mTertiary
|
|
readonly property color mOnTertiary: customColorsData.mOnTertiary
|
|
|
|
// --- Utility Colors: These colors serve specific, universal purposes like indicating errors
|
|
readonly property color mError: customColorsData.mError
|
|
readonly property color mOnError: customColorsData.mOnError
|
|
|
|
// --- Surface and Variant Colors: These provide additional options for surfaces and their contents, creating visual hierarchy
|
|
readonly property color mSurface: customColorsData.mSurface
|
|
readonly property color mOnSurface: customColorsData.mOnSurface
|
|
|
|
readonly property color mSurfaceVariant: customColorsData.mSurfaceVariant
|
|
readonly property color mOnSurfaceVariant: customColorsData.mOnSurfaceVariant
|
|
|
|
readonly property color mOutline: customColorsData.mOutline
|
|
readonly property color mShadow: customColorsData.mShadow
|
|
|
|
readonly property color mHover: customColorsData.mHover
|
|
readonly property color mOnHover: customColorsData.mOnHover
|
|
|
|
// --- Absolute Colors
|
|
readonly property color transparent: "transparent"
|
|
readonly property color black: "#000000"
|
|
readonly property color white: "#ffffff"
|
|
|
|
// --------------------------------
|
|
// Default colors: Rose Pine
|
|
QtObject {
|
|
id: defaultColors
|
|
|
|
readonly property color mPrimary: "#c7a1d8"
|
|
readonly property color mOnPrimary: "#1a151f"
|
|
|
|
readonly property color mSecondary: "#a984c4"
|
|
readonly property color mOnSecondary: "#f3edf7"
|
|
|
|
readonly property color mTertiary: "#e0b7c9"
|
|
readonly property color mOnTertiary: "#20161f"
|
|
|
|
readonly property color mError: "#e9899d"
|
|
readonly property color mOnError: "#1e1418"
|
|
|
|
readonly property color mSurface: "#1c1822"
|
|
readonly property color mOnSurface: "#e9e4f0"
|
|
|
|
readonly property color mSurfaceVariant: "#262130"
|
|
readonly property color mOnSurfaceVariant: "#a79ab0"
|
|
|
|
readonly property color mOutline: "#342c42"
|
|
readonly property color mShadow: "#120f18"
|
|
|
|
readonly property color mHover: "#e0b7c9"
|
|
readonly property color mOnHover: "#20161f"
|
|
}
|
|
|
|
// ----------------------------------------------------------------
|
|
// FileView to load custom colors data from colors.json
|
|
FileView {
|
|
id: customColorsFile
|
|
path: Settings.directoriesCreated ? (Settings.configDir + "colors.json") : undefined
|
|
printErrors: false
|
|
watchChanges: true
|
|
onFileChanged: {
|
|
Logger.i("Color", "Reloading colors from disk");
|
|
reload();
|
|
}
|
|
onAdapterUpdated: {
|
|
Logger.i("Color", "Writing colors to disk");
|
|
writeAdapter();
|
|
}
|
|
|
|
// Trigger initial load when path changes from empty to actual path
|
|
onPathChanged: {
|
|
if (path !== undefined) {
|
|
reload();
|
|
}
|
|
}
|
|
onLoadFailed: function (error) {
|
|
// Error code 2 = ENOENT (No such file or directory)
|
|
if (error === 2 || error.toString().includes("No such file")) {
|
|
// 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 mShadow: defaultColors.mShadow
|
|
|
|
property color mHover: defaultColors.mHover
|
|
property color mOnHover: defaultColors.mOnHover
|
|
}
|
|
}
|
|
}
|