/ services / Colours.qml
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  }