config moved to c++ plugin, removed old qml + fileview implementation

This commit is contained in:
2026-08-13 02:25:26 +02:00
parent c29b91cd26
commit 3cd3209b28
341 changed files with 4851 additions and 3502 deletions
+36 -35
View File
@@ -5,8 +5,9 @@ import QtQuick.Layouts
import qs.Paths
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Modules
import qs.Services
ColumnLayout {
id: root
@@ -18,61 +19,61 @@ ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: false
Layout.preferredWidth: centerWidth
spacing: Appearance.spacing.large * 2
spacing: Tokens.spacing.large * 2
RowLayout {
Layout.alignment: Qt.AlignHCenter
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
CustomText {
Layout.alignment: Qt.AlignVCenter
color: DynamicColors.palette.m3secondary
color: Colors.palette.m3secondary
font.bold: true
font.family: Appearance.font.family.clock
font.pointSize: Math.floor(Appearance.font.size.extraLarge * 3 * root.centerScale)
font.pointSize: Math.floor(Tokens.font.size.extraLarge * 3 * root.centerScale)
text: Time.hourStr
}
CustomText {
Layout.alignment: Qt.AlignVCenter
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
font.bold: true
font.family: Appearance.font.family.clock
font.pointSize: Math.floor(Appearance.font.size.extraLarge * 3 * root.centerScale)
font.pointSize: Math.floor(Tokens.font.size.extraLarge * 3 * root.centerScale)
text: ":"
}
CustomText {
Layout.alignment: Qt.AlignVCenter
color: DynamicColors.palette.m3secondary
color: Colors.palette.m3secondary
font.bold: true
font.family: Appearance.font.family.clock
font.pointSize: Math.floor(Appearance.font.size.extraLarge * 3 * root.centerScale)
font.pointSize: Math.floor(Tokens.font.size.extraLarge * 3 * root.centerScale)
text: Time.minuteStr
}
}
CustomText {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: -Appearance.padding.large * 2
color: DynamicColors.palette.m3tertiary
Layout.topMargin: -Tokens.padding.large * 2
color: Colors.palette.m3tertiary
font.bold: true
font.family: Appearance.font.family.mono
font.pointSize: Math.floor(Appearance.font.size.extraLarge * root.centerScale)
font.pointSize: Math.floor(Tokens.font.size.extraLarge * root.centerScale)
text: Time.format("dddd, d MMMM yyyy")
}
CustomClippingRect {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: Appearance.spacing.large * 2
color: DynamicColors.tPalette.m3surfaceContainer
Layout.topMargin: Tokens.spacing.large * 2
color: Colors.tPalette.m3surfaceContainer
implicitHeight: root.centerWidth / 2
implicitWidth: root.centerWidth / 2
radius: Appearance.rounding.full
radius: Tokens.rounding.full
MaterialIcon {
anchors.centerIn: parent
color: DynamicColors.palette.m3onSurfaceVariant
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Math.floor(root.centerWidth / 4)
text: "person"
}
@@ -87,11 +88,11 @@ ColumnLayout {
CustomRect {
Layout.alignment: Qt.AlignHCenter
color: DynamicColors.tPalette.m3surfaceContainer
color: Colors.tPalette.m3surfaceContainer
focus: true
implicitHeight: input.implicitHeight + Appearance.padding.small * 2
implicitHeight: input.implicitHeight + Tokens.padding.small * 2
implicitWidth: root.centerWidth * 0.8
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Keys.onPressed: event => {
if (root.lock.unlocking)
@@ -120,11 +121,11 @@ ColumnLayout {
id: input
anchors.fill: parent
anchors.margins: Appearance.padding.small
spacing: Appearance.spacing.normal
anchors.margins: Tokens.padding.small
spacing: Tokens.spacing.normal
Item {
implicitHeight: fprintIcon.implicitHeight + Appearance.padding.small * 2
implicitHeight: fprintIcon.implicitHeight + Tokens.padding.small * 2
implicitWidth: implicitHeight
MaterialIcon {
@@ -132,7 +133,7 @@ ColumnLayout {
anchors.centerIn: parent
animate: true
color: root.lock.pam.fprint.tries >= Config.lock.maxFprintTries ? DynamicColors.palette.m3error : DynamicColors.palette.m3onSurface
color: root.lock.pam.fprint.tries >= Config.lock.maxFprintTries ? Colors.palette.m3error : Colors.palette.m3onSurface
opacity: root.lock.pam.passwd.active ? 0 : 1
text: {
if (root.lock.pam.fprint.tries >= Config.lock.maxFprintTries)
@@ -161,13 +162,13 @@ ColumnLayout {
}
CustomRect {
color: root.lock.pam.buffer ? DynamicColors.palette.m3primary : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2)
implicitHeight: enterIcon.implicitHeight + Appearance.padding.small * 2
color: root.lock.pam.buffer ? Colors.palette.m3primary : Colors.layer(Colors.palette.m3surfaceContainerHigh, 2)
implicitHeight: enterIcon.implicitHeight + Tokens.padding.small * 2
implicitWidth: implicitHeight
radius: Appearance.rounding.full
radius: Tokens.rounding.full
StateLayer {
color: root.lock.pam.buffer ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3onSurface
color: root.lock.pam.buffer ? Colors.palette.m3onPrimary : Colors.palette.m3onSurface
onClicked: {
root.lock.pam.passwd.start();
@@ -178,7 +179,7 @@ ColumnLayout {
id: enterIcon
anchors.centerIn: parent
color: root.lock.pam.buffer ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3onSurface
color: root.lock.pam.buffer ? Colors.palette.m3onPrimary : Colors.palette.m3onSurface
font.weight: 500
text: "arrow_forward"
}
@@ -188,7 +189,7 @@ ColumnLayout {
Item {
Layout.fillWidth: true
Layout.topMargin: -Appearance.spacing.large
Layout.topMargin: -Tokens.spacing.large
implicitHeight: Math.max(message.implicitHeight, stateMessage.implicitHeight)
Behavior on implicitHeight {
@@ -224,7 +225,7 @@ ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
animateProp: "opacity"
color: DynamicColors.palette.m3onSurfaceVariant
color: Colors.palette.m3onSurfaceVariant
font.family: Appearance.font.family.mono
horizontalAlignment: Qt.AlignHCenter
lineHeight: 1.2
@@ -293,9 +294,9 @@ ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
color: DynamicColors.palette.m3error
color: Colors.palette.m3error
font.family: Appearance.font.family.mono
font.pointSize: Appearance.font.size.small
font.pointSize: Tokens.font.size.small
horizontalAlignment: Qt.AlignHCenter
opacity: 0
scale: 0.7
@@ -365,14 +366,14 @@ ColumnLayout {
id: exitAnim
Anim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
property: "scale"
target: message
to: 0.7
}
Anim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
property: "opacity"
target: message
to: 0
@@ -382,7 +383,7 @@ ColumnLayout {
}
component FlashAnim: NumberAnimation {
duration: Appearance.anim.durations.small
duration: Tokens.anim.durations.small
easing.type: Easing.Linear
property: "opacity"
target: message
+10 -9
View File
@@ -2,7 +2,8 @@ import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Services
CustomClippingRect {
id: root
@@ -11,17 +12,17 @@ CustomClippingRect {
implicitHeight: layout.implicitHeight
implicitWidth: layout.implicitWidth
radius: Appearance.rounding.large
radius: Tokens.rounding.large
RowLayout {
id: layout
anchors.fill: parent
spacing: Appearance.spacing.large * 2
spacing: Tokens.spacing.large * 2
ColumnLayout {
Layout.fillWidth: true
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
WeatherInfo {
id: weather
@@ -51,15 +52,15 @@ CustomClippingRect {
ColumnLayout {
Layout.fillWidth: true
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
CustomRect {
Layout.fillHeight: true
Layout.fillWidth: true
bottomRightRadius: Appearance.rounding.large
color: DynamicColors.tPalette.m3surfaceContainer
radius: Appearance.rounding.small
topRightRadius: Appearance.rounding.large
bottomRightRadius: Tokens.rounding.large
color: Colors.tPalette.m3surfaceContainer
radius: Tokens.rounding.small
topRightRadius: Tokens.rounding.large
NotifDock {
lock: root.lock
+23 -22
View File
@@ -6,33 +6,34 @@ import QtQuick.Layouts
import qs.Modules
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Services
ColumnLayout {
id: root
anchors.fill: parent
anchors.margins: Appearance.padding.large * 2
anchors.topMargin: Appearance.padding.large
spacing: Appearance.spacing.small
anchors.margins: Tokens.padding.large * 2
anchors.topMargin: Tokens.padding.large
spacing: Tokens.spacing.small
RowLayout {
Layout.fillHeight: false
Layout.fillWidth: true
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
CustomRect {
color: DynamicColors.palette.m3primary
implicitHeight: prompt.implicitHeight + Appearance.padding.normal * 2
implicitWidth: prompt.implicitWidth + Appearance.padding.normal * 2
radius: Appearance.rounding.small
color: Colors.palette.m3primary
implicitHeight: prompt.implicitHeight + Tokens.padding.normal * 2
implicitWidth: prompt.implicitWidth + Tokens.padding.normal * 2
radius: Tokens.rounding.small
MonoText {
id: prompt
anchors.centerIn: parent
color: DynamicColors.palette.m3onPrimary
font.pointSize: root.width > 400 ? Appearance.font.size.larger : Appearance.font.size.normal
color: Colors.palette.m3onPrimary
font.pointSize: root.width > 400 ? Tokens.font.size.larger : Tokens.font.size.normal
text: ">"
}
}
@@ -40,7 +41,7 @@ ColumnLayout {
MonoText {
Layout.fillWidth: true
elide: Text.ElideRight
font.pointSize: root.width > 400 ? Appearance.font.size.larger : Appearance.font.size.normal
font.pointSize: root.width > 400 ? Tokens.font.size.larger : Tokens.font.size.normal
text: "caelestiafetch.sh"
}
@@ -69,11 +70,11 @@ ColumnLayout {
}
ColumnLayout {
Layout.bottomMargin: Appearance.padding.normal
Layout.bottomMargin: Tokens.padding.normal
Layout.fillWidth: true
Layout.leftMargin: iconLoader.active ? 0 : width * 0.1
Layout.topMargin: Appearance.padding.normal
spacing: Appearance.spacing.normal
Layout.topMargin: Tokens.padding.normal
spacing: Tokens.spacing.normal
WrappedLoader {
Layout.fillWidth: true
@@ -124,18 +125,18 @@ ColumnLayout {
active: root.height > 180
sourceComponent: RowLayout {
spacing: Appearance.spacing.large
spacing: Tokens.spacing.large
Repeater {
model: Math.max(0, Math.min(8, root.width / (Appearance.font.size.larger * 2 + Appearance.spacing.large)))
model: Math.max(0, Math.min(8, root.width / (Tokens.font.size.larger * 2 + Tokens.spacing.large)))
CustomRect {
required property int index
color: DynamicColors.palette[`term${index}`]
implicitHeight: Appearance.font.size.larger * 2
color: Colors.palette[`term${index}`]
implicitHeight: Tokens.font.size.larger * 2
implicitWidth: implicitHeight
radius: Appearance.rounding.small
radius: Tokens.rounding.small
}
}
}
@@ -144,13 +145,13 @@ ColumnLayout {
component FetchText: MonoText {
Layout.fillWidth: true
elide: Text.ElideRight
font.pointSize: root.width > 400 ? Appearance.font.size.larger : Appearance.font.size.normal
font.pointSize: root.width > 400 ? Tokens.font.size.larger : Tokens.font.size.normal
}
component MonoText: CustomText {
font.family: Appearance.font.family.mono
}
component OsLogo: ColoredIcon {
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
implicitSize: height
layer.enabled: Config.lock.recolorLogo || SystemInfo.isDefaultLogo
source: SystemInfo.osLogo
+1 -1
View File
@@ -3,7 +3,7 @@ pragma ComponentBehavior: Bound
import Quickshell
import Quickshell.Wayland
import ZShell.Internal
import qs.Config
import ZShell.Config
import qs.Helpers
Scope {
+10 -9
View File
@@ -6,7 +6,8 @@ import QtQuick.Layouts
import qs.Modules
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Services
Item {
id: root
@@ -39,9 +40,9 @@ Item {
anchors.centerIn: parent
animate: true
color: root.pam.passwd.active ? DynamicColors.palette.m3secondary : DynamicColors.palette.m3outline
color: root.pam.passwd.active ? Colors.palette.m3secondary : Colors.palette.m3outline
font.family: Appearance.font.family.mono
font.pointSize: Appearance.font.size.normal
font.pointSize: Tokens.font.size.normal
opacity: root.buffer ? 0 : 1
text: {
if (root.pam.passwd.active)
@@ -70,20 +71,20 @@ Item {
anchors.centerIn: parent
anchors.horizontalCenterOffset: implicitWidth > root.width ? -(implicitWidth - root.width) / 2 : 0
implicitHeight: Appearance.font.size.normal
implicitHeight: Tokens.font.size.normal
implicitWidth: fullWidth
interactive: false
orientation: Qt.Horizontal
spacing: Appearance.spacing.small / 2
spacing: Tokens.spacing.small / 2
delegate: CustomRect {
id: ch
color: DynamicColors.palette.m3onSurface
color: Colors.palette.m3onSurface
implicitHeight: charList.implicitHeight
implicitWidth: implicitHeight
opacity: 0
radius: Appearance.rounding.small / 2
radius: Tokens.rounding.small / 2
scale: 0
Behavior on opacity {
@@ -92,8 +93,8 @@ Item {
}
Behavior on scale {
Anim {
duration: Appearance.anim.durations.expressiveFastSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveFastSpatial
duration: Tokens.anim.durations.expressiveFastSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveFastSpatial
}
}
+26 -25
View File
@@ -3,9 +3,10 @@ pragma ComponentBehavior: Bound
import Quickshell.Wayland
import QtQuick
import QtQuick.Effects
import qs.Config
import ZShell.Config
import qs.Helpers
import qs.Components
import qs.Services
WlSessionLockSurface {
id: root
@@ -29,8 +30,8 @@ WlSessionLockSurface {
ParallelAnimation {
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
properties: "implicitWidth,implicitHeight"
target: lockContent
to: lockContent.size
@@ -43,22 +44,22 @@ WlSessionLockSurface {
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "scale"
target: content
to: 0
}
Anim {
duration: Appearance.anim.durations.small
duration: Tokens.anim.durations.small
property: "opacity"
target: content
to: 0
}
Anim {
duration: Appearance.anim.durations.large
duration: Tokens.anim.durations.large
property: "opacity"
target: lockIcon
to: 1
@@ -66,7 +67,7 @@ WlSessionLockSurface {
SequentialAnimation {
PauseAnimation {
duration: Appearance.anim.durations.small
duration: Tokens.anim.durations.small
}
Anim {
@@ -92,8 +93,8 @@ WlSessionLockSurface {
SequentialAnimation {
ParallelAnimation {
Anim {
duration: Appearance.anim.durations.expressiveFastSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveFastSpatial
duration: Tokens.anim.durations.expressiveFastSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveFastSpatial
property: "scale"
target: lockContent
to: 1
@@ -114,8 +115,8 @@ WlSessionLockSurface {
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "scale"
target: content
to: 1
@@ -124,20 +125,20 @@ WlSessionLockSurface {
Anim {
property: "radius"
target: lockBg
to: Appearance.rounding.large * 1.5
to: Tokens.rounding.large * 1.5
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "implicitWidth"
target: lockContent
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult * Config.lock.sizes.ratio
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "implicitHeight"
target: lockContent
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult
@@ -184,8 +185,8 @@ WlSessionLockSurface {
property int positionIndex: 0
readonly property var positions: [Qt.point(0, 0), Qt.point(4, 0), Qt.point(4, 4), Qt.point(0, 4), Qt.point(-4, 4), Qt.point(-4, 0), Qt.point(-4, -4), Qt.point(0, -4), Qt.point(4, -4),]
readonly property int radius: size / 4 * Appearance.rounding.scale
readonly property int size: lockIcon.implicitHeight + Appearance.padding.large * 4
readonly property int radius: size / 4 * Tokens.rounding.scale
readonly property int size: lockIcon.implicitHeight + Tokens.padding.large * 4
anchors.centerIn: parent
anchors.horizontalCenterOffset: positions[positionIndex].x
@@ -219,14 +220,14 @@ WlSessionLockSurface {
id: lockBg
anchors.fill: parent
color: DynamicColors.palette.m3surface
color: Colors.palette.m3surface
layer.enabled: true
opacity: DynamicColors.transparency.enabled ? DynamicColors.transparency.base : 1
opacity: Colors.transparency.enabled ? Colors.transparency.base : 1
radius: lockContent.radius
layer.effect: MultiEffect {
blurMax: 15
shadowColor: Qt.alpha(DynamicColors.palette.m3shadow, 0.7)
shadowColor: Qt.alpha(Colors.palette.m3shadow, 0.7)
shadowEnabled: true
}
}
@@ -236,7 +237,7 @@ WlSessionLockSurface {
anchors.centerIn: parent
font.bold: true
font.pointSize: Appearance.font.size.extraLarge * 4
font.pointSize: Tokens.font.size.extraLarge * 4
text: "lock"
}
@@ -244,11 +245,11 @@ WlSessionLockSurface {
id: content
anchors.centerIn: parent
height: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult - Appearance.padding.large * 2
height: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult - Tokens.padding.large * 2
lock: root
opacity: 0
scale: 0
width: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult * Config.lock.sizes.ratio - Appearance.padding.large * 2
width: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult * Config.lock.sizes.ratio - Tokens.padding.large * 2
}
}
}
+14 -13
View File
@@ -3,17 +3,18 @@ import QtQuick.Layouts
import Quickshell
import ZShell.Components
import qs.Components
import qs.Config
import ZShell.Config
import qs.Helpers
import qs.Services
CustomClippingRect {
id: root
required property var lock
color: DynamicColors.tPalette.m3surfaceContainer
color: Colors.tPalette.m3surfaceContainer
implicitHeight: layout.implicitHeight + layout.anchors.margins * 2
radius: Appearance.rounding.small
radius: Tokens.rounding.small
FadeImage {
id: image
@@ -37,7 +38,7 @@ CustomClippingRect {
CustomRect {
anchors.fill: parent
color: DynamicColors.palette.m3surface
color: Colors.palette.m3surface
opacity: 0.7
}
}
@@ -46,17 +47,17 @@ CustomClippingRect {
id: layout
anchors.left: parent.left
anchors.margins: Appearance.padding.extraLarge
anchors.margins: Tokens.padding.extraLarge
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
spacing: Appearance.spacing.extraSmall
spacing: Tokens.spacing.extraSmall
CustomText {
Layout.fillWidth: true
animate: true
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
elide: Text.ElideRight
font.pointSize: Appearance.font.size.medium
font.pointSize: Tokens.font.size.medium
horizontalAlignment: Text.AlignHCenter
text: (Players.active?.trackTitle ?? qsTr("Nothing playing")) || qsTr("Unknown track")
}
@@ -64,17 +65,17 @@ CustomClippingRect {
CustomText {
Layout.fillWidth: true
animate: true
color: DynamicColors.palette.m3onSurfaceVariant
color: Colors.palette.m3onSurfaceVariant
elide: Text.ElideRight
font.pointSize: Appearance.font.size.small
font.pointSize: Tokens.font.size.small
horizontalAlignment: Text.AlignHCenter
text: (Players.active?.trackArtist ?? qsTr("Try playing some music!")) || qsTr("Unknown artist")
}
ButtonRow {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: Appearance.spacing.small
spacing: Appearance.spacing.extraSmall
Layout.topMargin: Tokens.spacing.small
spacing: Tokens.spacing.extraSmall
IconButton {
enabled: Players.active?.canGoPrevious
@@ -90,7 +91,7 @@ CustomClippingRect {
checked: Players.active?.isPlaying ?? false
enabled: Players.active?.canTogglePlaying
icon: Players.active?.isPlaying ? "pause" : "play_arrow"
implicitWidth: implicitHeight + Appearance.padding.largeIncreased * 2
implicitWidth: implicitHeight + Tokens.padding.largeIncreased * 2
isRound: true
shapeMorph: true
+18 -17
View File
@@ -7,8 +7,9 @@ import QtQuick.Layouts
import qs.Modules
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Daemons
import qs.Services
ColumnLayout {
id: root
@@ -16,12 +17,12 @@ ColumnLayout {
required property var lock
anchors.fill: parent
anchors.margins: Appearance.padding.large
spacing: Appearance.spacing.smaller
anchors.margins: Tokens.padding.large
spacing: Tokens.spacing.smaller
CustomText {
Layout.fillWidth: true
color: DynamicColors.palette.m3outline
color: Colors.palette.m3outline
elide: Text.ElideRight
font.family: Appearance.font.family.mono
font.weight: 500
@@ -34,7 +35,7 @@ ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
color: "transparent"
radius: Appearance.rounding.small
radius: Tokens.rounding.small
Loader {
active: opacity > 0
@@ -43,11 +44,11 @@ ColumnLayout {
Behavior on opacity {
Anim {
duration: Appearance.anim.durations.extraLarge
duration: Tokens.anim.durations.extraLarge
}
}
sourceComponent: ColumnLayout {
spacing: Appearance.spacing.large
spacing: Tokens.spacing.large
Image {
asynchronous: true
@@ -58,15 +59,15 @@ ColumnLayout {
layer.effect: Coloriser {
brightness: 1
colorizationColor: DynamicColors.palette.m3outlineVariant
colorizationColor: Colors.palette.m3outlineVariant
}
}
CustomText {
Layout.alignment: Qt.AlignHCenter
color: DynamicColors.palette.m3outlineVariant
color: Colors.palette.m3outlineVariant
font.family: Appearance.font.family.mono
font.pointSize: Appearance.font.size.large
font.pointSize: Tokens.font.size.large
font.weight: 500
text: qsTr("No Notifications")
}
@@ -76,7 +77,7 @@ ColumnLayout {
CustomListView {
anchors.fill: parent
clip: true
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
add: Transition {
Anim {
@@ -86,8 +87,8 @@ ColumnLayout {
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
from: 0
property: "scale"
to: 1
@@ -102,8 +103,8 @@ ColumnLayout {
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "y"
}
}
@@ -120,8 +121,8 @@ ColumnLayout {
}
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
property: "y"
}
}
+38 -37
View File
@@ -8,8 +8,9 @@ import QtQuick.Layouts
import qs.Modules
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Daemons
import qs.Services
CustomRect {
id: root
@@ -24,14 +25,14 @@ CustomRect {
anchors.left: parent?.left
anchors.right: parent?.right
clip: true
color: root.urgency === "critical" ? DynamicColors.palette.m3secondaryContainer : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2)
implicitHeight: content.implicitHeight + Appearance.padding.normal * 2
radius: Appearance.rounding.normal
color: root.urgency === "critical" ? Colors.palette.m3secondaryContainer : Colors.layer(Colors.palette.m3surfaceContainerHigh, 2)
implicitHeight: content.implicitHeight + Tokens.padding.normal * 2
radius: Tokens.rounding.normal
Behavior on implicitHeight {
Anim {
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
duration: Tokens.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Tokens.anim.curves.expressiveDefaultSpatial
}
}
@@ -39,10 +40,10 @@ CustomRect {
id: content
anchors.left: parent.left
anchors.margins: Appearance.padding.normal
anchors.margins: Tokens.padding.normal
anchors.right: parent.right
anchors.top: parent.top
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
Item {
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
@@ -67,7 +68,7 @@ CustomRect {
id: appIconComp
ColoredIcon {
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : root.urgency === "low" ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3onSecondaryContainer
color: root.urgency === "critical" ? Colors.palette.m3onError : root.urgency === "low" ? Colors.palette.m3onSurface : Colors.palette.m3onSecondaryContainer
implicitSize: Math.round(Config.notifs.sizes.image * 0.6)
layer.enabled: root.appIcon.endsWith("symbolic")
source: Quickshell.iconPath(root.appIcon)
@@ -78,16 +79,16 @@ CustomRect {
id: materialIconComp
MaterialIcon {
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : root.urgency === "low" ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3onSecondaryContainer
font.pointSize: Appearance.font.size.large
color: root.urgency === "critical" ? Colors.palette.m3onError : root.urgency === "low" ? Colors.palette.m3onSurface : Colors.palette.m3onSecondaryContainer
font.pointSize: Tokens.font.size.large
text: Icons.getNotifIcon(root.notifs[0]?.summary, root.urgency)
}
}
ClippingRectangle {
anchors.fill: parent
color: root.urgency === "critical" ? DynamicColors.palette.m3error : root.urgency === "low" ? DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 3) : DynamicColors.palette.m3secondaryContainer
radius: Appearance.rounding.full
color: root.urgency === "critical" ? Colors.palette.m3error : root.urgency === "low" ? Colors.layer(Colors.palette.m3surfaceContainerHighest, 3) : Colors.palette.m3secondaryContainer
radius: Tokens.rounding.full
Loader {
anchors.centerIn: parent
@@ -101,14 +102,14 @@ CustomRect {
anchors.right: parent.right
sourceComponent: CustomRect {
color: root.urgency === "critical" ? DynamicColors.palette.m3error : root.urgency === "low" ? DynamicColors.palette.m3surfaceContainerHighest : DynamicColors.palette.m3secondaryContainer
color: root.urgency === "critical" ? Colors.palette.m3error : root.urgency === "low" ? Colors.palette.m3surfaceContainerHighest : Colors.palette.m3secondaryContainer
implicitHeight: Config.notifs.sizes.badge
implicitWidth: Config.notifs.sizes.badge
radius: Appearance.rounding.full
radius: Tokens.rounding.full
ColoredIcon {
anchors.centerIn: parent
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : root.urgency === "low" ? DynamicColors.palette.m3onSurface : DynamicColors.palette.m3onSecondaryContainer
color: root.urgency === "critical" ? Colors.palette.m3onError : root.urgency === "low" ? Colors.palette.m3onSurface : Colors.palette.m3onSecondaryContainer
implicitSize: Math.round(Config.notifs.sizes.badge * 0.6)
layer.enabled: root.appIcon.endsWith("symbolic")
source: Quickshell.iconPath(root.appIcon)
@@ -118,38 +119,38 @@ CustomRect {
}
ColumnLayout {
Layout.bottomMargin: -Appearance.padding.small / 2 - (root.expanded ? 0 : spacing)
Layout.bottomMargin: -Tokens.padding.small / 2 - (root.expanded ? 0 : spacing)
Layout.fillWidth: true
Layout.topMargin: -Appearance.padding.small
spacing: Math.round(Appearance.spacing.small / 2)
Layout.topMargin: -Tokens.padding.small
spacing: Math.round(Tokens.spacing.small / 2)
RowLayout {
Layout.bottomMargin: -parent.spacing
Layout.fillWidth: true
spacing: Appearance.spacing.smaller
spacing: Tokens.spacing.smaller
CustomText {
Layout.fillWidth: true
color: DynamicColors.palette.m3onSurfaceVariant
color: Colors.palette.m3onSurfaceVariant
elide: Text.ElideRight
font.pointSize: Appearance.font.size.small
font.pointSize: Tokens.font.size.small
text: root.modelData
}
CustomText {
animate: true
color: DynamicColors.palette.m3outline
font.pointSize: Appearance.font.size.small
color: Colors.palette.m3outline
font.pointSize: Tokens.font.size.small
text: root.notifs[0]?.timeStr ?? ""
}
CustomRect {
Layout.preferredWidth: root.notifs.length > Config.notifs.groupPreviewNum ? implicitWidth : 0
color: root.urgency === "critical" ? DynamicColors.palette.m3error : DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHighest, 2)
implicitHeight: groupCount.implicitHeight + Appearance.padding.small
implicitWidth: expandBtn.implicitWidth + Appearance.padding.smaller * 2
color: root.urgency === "critical" ? Colors.palette.m3error : Colors.layer(Colors.palette.m3surfaceContainerHighest, 2)
implicitHeight: groupCount.implicitHeight + Tokens.padding.small
implicitWidth: expandBtn.implicitWidth + Tokens.padding.smaller * 2
opacity: root.notifs.length > Config.notifs.groupPreviewNum ? 1 : 0
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Behavior on Layout.preferredWidth {
Anim {
@@ -161,7 +162,7 @@ CustomRect {
}
StateLayer {
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : DynamicColors.palette.m3onSurface
color: root.urgency === "critical" ? Colors.palette.m3onError : Colors.palette.m3onSurface
onClicked: {
root.expanded = !root.expanded;
@@ -172,22 +173,22 @@ CustomRect {
id: expandBtn
anchors.centerIn: parent
spacing: Appearance.spacing.small / 2
spacing: Tokens.spacing.small / 2
CustomText {
id: groupCount
Layout.leftMargin: Appearance.padding.small / 2
Layout.leftMargin: Tokens.padding.small / 2
animate: true
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : DynamicColors.palette.m3onSurface
font.pointSize: Appearance.font.size.small
color: root.urgency === "critical" ? Colors.palette.m3onError : Colors.palette.m3onSurface
font.pointSize: Tokens.font.size.small
text: root.notifs.length
}
MaterialIcon {
Layout.rightMargin: -Appearance.padding.small / 2
Layout.rightMargin: -Tokens.padding.small / 2
animate: true
color: root.urgency === "critical" ? DynamicColors.palette.m3onError : DynamicColors.palette.m3onSurface
color: root.urgency === "critical" ? Colors.palette.m3onError : Colors.palette.m3onSurface
text: root.expanded ? "expand_less" : "expand_more"
}
}
@@ -283,13 +284,13 @@ CustomRect {
required property NotifServer.Notif modelData
Layout.fillWidth: true
color: root.urgency === "critical" ? DynamicColors.palette.m3onSecondaryContainer : DynamicColors.palette.m3onSurface
color: root.urgency === "critical" ? Colors.palette.m3onSecondaryContainer : Colors.palette.m3onSurface
text: {
if (!Config.lock.showNotifContent)
return "Unlock to view";
const summary = modelData.summary.replace(/\n/g, " ");
const body = modelData.body.replace(/\n/g, " ");
const color = root.urgency === "critical" ? DynamicColors.palette.m3secondary : DynamicColors.palette.m3outline;
const color = root.urgency === "critical" ? Colors.palette.m3secondary : Colors.palette.m3outline;
if (metrics.text === metrics.elidedText)
return `${summary} <span style='color:${color}'>${body}</span>`;
+1 -1
View File
@@ -3,7 +3,7 @@ import Quickshell.Io
import Quickshell.Wayland
import Quickshell.Services.Pam
import QtQuick
import qs.Config
import ZShell.Config
Scope {
id: root
+9 -9
View File
@@ -5,7 +5,7 @@ import QtQuick.Layouts
import M3Shapes
import ZShell.Services
import qs.Components
import qs.Config
import ZShell.Config
import qs.Effects
CustomRect {
@@ -16,9 +16,9 @@ CustomRect {
return 1 + Math.pow(Math.abs(diff), 0.8) * Math.sign(diff);
}
color: DynamicColors.tPalette.m3surfaceContainer
color: Colors.tPalette.m3surfaceContainer
implicitHeight: layout.implicitHeight + layout.anchors.margins * 2
radius: Appearance.rounding.small
radius: Tokens.rounding.small
ServiceRef {
service: Cpu
@@ -36,25 +36,25 @@ CustomRect {
id: layout
anchors.fill: parent
anchors.margins: Appearance.padding.large
spacing: Appearance.spacing.large
anchors.margins: Tokens.padding.large
spacing: Tokens.spacing.large
Resource {
id: cpu
fgColor: DynamicColors.palette.m3primary
fgColor: Colors.palette.m3primary
icon: "memory"
value: Cpu.percentage
}
Resource {
fgColor: DynamicColors.palette.m3tertiary
fgColor: Colors.palette.m3tertiary
icon: "memory_alt"
value: Memory.percentage
}
Resource {
fgColor: DynamicColors.palette.m3secondary
fgColor: Colors.palette.m3secondary
icon: "hard_disk"
value: Storage.percentage
}
@@ -76,7 +76,7 @@ CustomRect {
MaterialIcon {
anchors.centerIn: parent
color: res.fgColor
font.pointSize: Appearance.font.size.extraLarge
font.pointSize: Tokens.font.size.extraLarge
text: res.icon
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ Item {
ClippingRectangle {
anchors.fill: parent
radius: Appearance.rounding.full
radius: Tokens.rounding.full
Image {
id: userImage
+13 -12
View File
@@ -1,40 +1,41 @@
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Config
import ZShell.Config
import qs.Helpers
import qs.Services
ColumnLayout {
id: root
required property int rootHeight
spacing: Appearance.spacing.extraSmall
spacing: Tokens.spacing.extraSmall
CustomText {
Layout.alignment: Qt.AlignHCenter
animate: true
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.large
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.large
text: Weather.description
}
RowLayout {
Layout.alignment: Qt.AlignHCenter
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
CustomText {
id: temp
animate: true
color: DynamicColors.palette.m3primary
font.pointSize: Appearance.font.size.large
color: Colors.palette.m3primary
font.pointSize: Tokens.font.size.large
text: Weather.temp
}
MaterialIcon {
animate: true
color: DynamicColors.palette.m3secondary
color: Colors.palette.m3secondary
text: Weather.icon
}
}
@@ -42,8 +43,8 @@ ColumnLayout {
CustomText {
Layout.alignment: Qt.AlignHCenter
animate: true
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.large
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.large
text: qsTr("Feels like %1").arg(Weather.temp)
visible: root.rootHeight > 550
}
@@ -51,8 +52,8 @@ ColumnLayout {
CustomText {
Layout.alignment: Qt.AlignHCenter
animate: true
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.medium
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.medium
text: {
const today = Weather.forecast[0];
return qsTr("High %1 • Low %2").arg(Weather.formatTemp(today?.maxTempC)).arg(Weather.formatTemp(today?.minTempC));
+23 -22
View File
@@ -4,33 +4,34 @@ import M3Shapes
import ZShell
import qs.Components
import qs.Helpers
import qs.Config
import ZShell.Config
import qs.Services
CustomRect {
id: root
color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2)
implicitHeight: header.anchors.margins + header.implicitHeight + Appearance.spacing.small + layout.implicitHeight + layout.anchors.bottomMargin
radius: Appearance.rounding.small
color: Colors.layer(Colors.palette.m3surfaceContainerHigh, 2)
implicitHeight: header.anchors.margins + header.implicitHeight + Tokens.spacing.small + layout.implicitHeight + layout.anchors.bottomMargin
radius: Tokens.rounding.small
RowLayout {
id: header
anchors.left: parent.left
anchors.margins: Appearance.padding.largeIncreased
anchors.margins: Tokens.padding.largeIncreased
anchors.top: parent.top
spacing: Appearance.spacing.small
spacing: Tokens.spacing.small
MaterialIcon {
Layout.topMargin: Math.round(fontInfo.pointSize * 0.12)
font.pointSize: Appearance.font.size.medium
font.pointSize: Tokens.font.size.medium
text: "schedule"
}
CustomText {
id: title
font.pointSize: Appearance.font.size.medium
font.pointSize: Tokens.font.size.medium
text: qsTr("Hourly forecast")
}
}
@@ -39,14 +40,14 @@ CustomRect {
id: layout
anchors.bottom: parent.bottom
anchors.bottomMargin: Appearance.padding.largeIncreased
anchors.bottomMargin: Tokens.padding.largeIncreased
anchors.left: parent.left
anchors.margins: Appearance.padding.large
anchors.margins: Tokens.padding.large
anchors.right: parent.right
implicitHeight: contentItem.childrenRect.height
model: Weather.hourlyForecast
orientation: VerticalFadeListView.Horizontal
spacing: Appearance.spacing.normal
spacing: Tokens.spacing.normal
delegate: ColumnLayout {
id: hour
@@ -55,12 +56,12 @@ CustomRect {
required property int index
required property var modelData
spacing: Appearance.spacing.extraSmall
spacing: Tokens.spacing.extraSmall
MaterialShape {
Layout.alignment: Qt.AlignHCenter
color: Qt.alpha(DynamicColors.palette.m3primary, hour.index === 0 ? 1 : 0)
implicitSize: temp.implicitHeight + Appearance.padding.normal * 2
color: Qt.alpha(Colors.palette.m3primary, hour.index === 0 ? 1 : 0)
implicitSize: temp.implicitHeight + Tokens.padding.normal * 2
shape: MaterialShape.Cookie4Sided
Behavior on color {
@@ -72,30 +73,30 @@ CustomRect {
id: temp
anchors.centerIn: parent
color: hour.index === 0 ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3onSurface
font.pointSize: Appearance.font.size.medium
color: hour.index === 0 ? Colors.palette.m3onPrimary : Colors.palette.m3onSurface
font.pointSize: Tokens.font.size.medium
text: Weather.formatTemp(hour.cond.tempC).slice(0, -1) // Remove C/F
}
}
MaterialIcon {
Layout.alignment: Qt.AlignHCenter
color: DynamicColors.palette.m3secondary
font.pointSize: Appearance.font.size.extraLarge
color: Colors.palette.m3secondary
font.pointSize: Tokens.font.size.extraLarge
text: hour.cond.icon
}
CustomText {
Layout.alignment: Qt.AlignHCenter
color: DynamicColors.palette.m3primary
color: Colors.palette.m3primary
text: hour.cond.precipChance + "%"
}
CustomText {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: Appearance.spacing.extraSmall
color: DynamicColors.palette.m3onSurfaceVariant
font.pointSize: Appearance.font.size.small
Layout.topMargin: Tokens.spacing.extraSmall
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.small
text: hour.index === 0 ? qsTr("Now") : Qt.formatDateTime(new Date(hour.cond.timestamp.replace("T", " ")), Config.services.useTwelveHourClock ? "ha" : "hh:00")
}
}
+7 -6
View File
@@ -1,8 +1,9 @@
import QtQuick
import qs.Modules.Lock.Weather
import qs.Config
import ZShell.Config
import qs.Components
import qs.Helpers
import qs.Services
CustomRect {
id: root
@@ -10,14 +11,14 @@ CustomRect {
required property int rootHeight
readonly property bool showForecast: rootHeight >= 700
color: DynamicColors.tPalette.m3surfaceContainer
color: Colors.tPalette.m3surfaceContainer
implicitHeight: {
const base = brief.implicitHeight + brief.anchors.topMargin;
if (showForecast)
return base + Appearance.spacing.large + forecast.implicitHeight + forecast.anchors.margins;
return base + Tokens.spacing.large + forecast.implicitHeight + forecast.anchors.margins;
return base + brief.anchors.topMargin;
}
radius: Appearance.rounding.small
radius: Tokens.rounding.small
Timer {
interval: 900000 // 15 minutes
@@ -33,7 +34,7 @@ CustomRect {
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: Appearance.padding.extraLarge
anchors.topMargin: Tokens.padding.extraLarge
rootHeight: root.rootHeight
}
@@ -43,7 +44,7 @@ CustomRect {
active: root.showForecast
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.margins: Appearance.padding.large
anchors.margins: Tokens.padding.large
anchors.right: parent.right
asynchronous: true