Colours.qml
1 pragma Singleton 2 3 import "root:/config" 4 import "root:/utils" 5 import Quickshell 6 import Quickshell.Io 7 import QtQuick 8 9 Singleton { 10 id: root 11 12 readonly property list<string> colourNames: ["rosewater", "flamingo", "pink", "mauve", "red", "maroon", "peach", "yellow", "green", "teal", "sky", "sapphire", "blue", "lavender"] 13 14 property bool showPreview 15 property bool endPreviewOnNextChange 16 property bool light 17 readonly property Colours palette: showPreview ? preview : current 18 readonly property Colours current: Colours {} 19 readonly property Colours preview: Colours {} 20 readonly property Transparency transparency: Transparency {} 21 22 function alpha(c: color, layer: bool): color { 23 if (!transparency.enabled) 24 return c; 25 c = Qt.rgba(c.r, c.g, c.b, layer ? transparency.layers : transparency.base); 26 if (layer) 27 c.hsvValue = Math.max(0, Math.min(1, c.hslLightness + (light ? -0.2 : 0.2))); // TODO: edit based on colours (hue or smth) 28 return c; 29 } 30 31 function on(c: color): color { 32 if (c.hslLightness < 0.5) 33 return Qt.hsla(c.hslHue, c.hslSaturation, 0.9, 1); 34 return Qt.hsla(c.hslHue, c.hslSaturation, 0.1, 1); 35 } 36 37 function load(data: string, isPreview: bool): void { 38 const colours = isPreview ? preview : current; 39 for (const line of data.trim().split("\n")) { 40 let [name, colour] = line.split(" "); 41 name = name.trim(); 42 name = colourNames.includes(name) ? name : `m3${name}`; 43 if (colours.hasOwnProperty(name)) 44 colours[name] = `#${colour.trim()}`; 45 } 46 47 if (isPreview && endPreviewOnNextChange) { 48 showPreview = false; 49 endPreviewOnNextChange = false; 50 } 51 } 52 53 function setMode(mode: string): void { 54 setModeProc.command = ["caelestia", "scheme", "dynamic", "default", mode]; 55 setModeProc.startDetached(); 56 } 57 58 Process { 59 id: setModeProc 60 } 61 62 FileView { 63 path: `${Paths.state}/scheme/current-mode.txt` 64 watchChanges: true 65 onFileChanged: reload() 66 onLoaded: root.light = text() === "light" 67 } 68 69 FileView { 70 path: `${Paths.state}/scheme/current.txt` 71 watchChanges: true 72 onFileChanged: reload() 73 onLoaded: root.load(text(), false) 74 } 75 76 component Transparency: QtObject { 77 readonly property bool enabled: false 78 readonly property real base: 0.78 79 readonly property real layers: 0.58 80 } 81 82 component Colours: QtObject { 83 property color m3primary_paletteKeyColor: "#7870AB" 84 property color m3secondary_paletteKeyColor: "#78748A" 85 property color m3tertiary_paletteKeyColor: "#976A7D" 86 property color m3neutral_paletteKeyColor: "#79767D" 87 property color m3neutral_variant_paletteKeyColor: "#797680" 88 property color m3background: "#141318" 89 property color m3onBackground: "#E5E1E9" 90 property color m3surface: "#141318" 91 property color m3surfaceDim: "#141318" 92 property color m3surfaceBright: "#3A383E" 93 property color m3surfaceContainerLowest: "#0E0D13" 94 property color m3surfaceContainerLow: "#1C1B20" 95 property color m3surfaceContainer: "#201F25" 96 property color m3surfaceContainerHigh: "#2B292F" 97 property color m3surfaceContainerHighest: "#35343A" 98 property color m3onSurface: "#E5E1E9" 99 property color m3surfaceVariant: "#48454E" 100 property color m3onSurfaceVariant: "#C9C5D0" 101 property color m3inverseSurface: "#E5E1E9" 102 property color m3inverseOnSurface: "#312F36" 103 property color m3outline: "#938F99" 104 property color m3outlineVariant: "#48454E" 105 property color m3shadow: "#000000" 106 property color m3scrim: "#000000" 107 property color m3surfaceTint: "#C8BFFF" 108 property color m3primary: "#C8BFFF" 109 property color m3onPrimary: "#30285F" 110 property color m3primaryContainer: "#473F77" 111 property color m3onPrimaryContainer: "#E5DEFF" 112 property color m3inversePrimary: "#5F5791" 113 property color m3secondary: "#C9C3DC" 114 property color m3onSecondary: "#312E41" 115 property color m3secondaryContainer: "#484459" 116 property color m3onSecondaryContainer: "#E5DFF9" 117 property color m3tertiary: "#ECB8CD" 118 property color m3onTertiary: "#482536" 119 property color m3tertiaryContainer: "#B38397" 120 property color m3onTertiaryContainer: "#000000" 121 property color m3error: "#EA8DC1" 122 property color m3onError: "#690005" 123 property color m3errorContainer: "#93000A" 124 property color m3onErrorContainer: "#FFDAD6" 125 property color m3primaryFixed: "#E5DEFF" 126 property color m3primaryFixedDim: "#C8BFFF" 127 property color m3onPrimaryFixed: "#1B1149" 128 property color m3onPrimaryFixedVariant: "#473F77" 129 property color m3secondaryFixed: "#E5DFF9" 130 property color m3secondaryFixedDim: "#C9C3DC" 131 property color m3onSecondaryFixed: "#1C192B" 132 property color m3onSecondaryFixedVariant: "#484459" 133 property color m3tertiaryFixed: "#FFD8E7" 134 property color m3tertiaryFixedDim: "#ECB8CD" 135 property color m3onTertiaryFixed: "#301121" 136 property color m3onTertiaryFixedVariant: "#613B4C" 137 138 property color rosewater: "#B8C4FF" 139 property color flamingo: "#DBB9F8" 140 property color pink: "#F3B3E3" 141 property color mauve: "#D0BDFE" 142 property color red: "#F8B3D1" 143 property color maroon: "#F6B2DA" 144 property color peach: "#E4B7F4" 145 property color yellow: "#C3C0FF" 146 property color green: "#ADC6FF" 147 property color teal: "#D4BBFC" 148 property color sky: "#CBBEFF" 149 property color sapphire: "#BDC2FF" 150 property color blue: "#C7BFFF" 151 property color lavender: "#EAB5ED" 152 } 153 }