quickshell and hyprland additions

This commit is contained in:
2026-03-15 13:56:00 +02:00
parent c9c27d1554
commit 1ad06b82a6
509 changed files with 68371 additions and 19 deletions

View File

@@ -0,0 +1,196 @@
import Qt5Compat.GraphicalEffects
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Widgets
import Quickshell.Io
import qs.config
import qs.modules.functions
import qs.modules.interface.notifications
import qs.modules.components
import qs.services
StyledRect {
id: root
Layout.fillWidth: true
radius: Metrics.radius("normal")
color: Appearance.m3colors.m3surfaceContainer
ClippingRectangle {
color: Appearance.colors.colLayer1
radius: Metrics.radius("normal")
implicitHeight: 90
anchors.fill: parent
RowLayout {
anchors.fill: parent
spacing: Metrics.margin("small")
ClippingRectangle {
implicitWidth: 140
implicitHeight: 140
Layout.leftMargin: Metrics.margin("large")
radius: Metrics.radius("normal")
clip: true
color: Appearance.colors.colLayer2
Image {
anchors.fill: parent
source: Mpris.artUrl
fillMode: Image.PreserveAspectCrop
cache: true
}
}
ColumnLayout {
Layout.fillWidth: true
Layout.rightMargin: Metrics.margin("small")
spacing: Metrics.spacing(2)
Text {
text: Mpris.albumTitle
elide: Text.ElideRight
Layout.maximumWidth: 190
font.family: Metrics.fontFamily("title")
font.pixelSize: Metrics.fontSize("hugeass")
font.bold: true
color: Appearance.colors.colOnLayer2
}
Text {
text: Mpris.albumArtist
elide: Text.ElideRight
Layout.maximumWidth: 160
font.family: Metrics.fontFamily("main")
font.pixelSize: Metrics.fontSize("normal")
color: Appearance.colors.colSubtext
}
RowLayout {
Layout.fillWidth: true
spacing: Metrics.spacing(12)
Process {
id: control
}
Button {
Layout.preferredWidth: 36
Layout.preferredHeight: 36
onClicked: Quickshell.execDetached(["playerctl", "previous"])
background: Rectangle {
radius: Metrics.radius("large")
color: Appearance.colors.colLayer2
}
contentItem: MaterialSymbol {
anchors.centerIn: parent
icon: "skip_previous"
font.pixelSize: Metrics.fontSize(24)
color: Appearance.colors.colOnLayer2
fill: 1
}
}
Button {
Layout.preferredWidth: 42
Layout.preferredHeight: 42
onClicked: Quickshell.execDetached(["playerctl", "play-pause"])
background: Rectangle {
radius: Metrics.radius("full")
color: Appearance.colors.colPrimary
}
contentItem: MaterialSymbol {
anchors.bottom: parent.bottom
anchors.top: parent.top
icon: "play_arrow"
font.pixelSize: Metrics.fontSize(36)
color: Appearance.colors.colOnPrimary
fill: 1
}
}
Button {
Layout.preferredWidth: 36
Layout.preferredHeight: 36
onClicked: Quickshell.execDetached(["playerctl", "next"])
background: Rectangle {
radius: Metrics.radius("large")
color: Appearance.colors.colLayer2
}
contentItem: MaterialSymbol {
anchors.centerIn: parent
icon: "skip_next"
font.pixelSize: Metrics.fontSize(24)
color: Appearance.colors.colOnLayer2
fill: 1
}
}
}
RowLayout {
Layout.topMargin: Metrics.margin(15)
Layout.fillWidth: true
spacing: Metrics.spacing(12)
Text {
text: Mpris.formatTime(Mpris.positionSec)
font.pixelSize: Metrics.fontSize("smallest")
color: Appearance.colors.colSubtext
}
Item {
Layout.fillWidth: true
implicitHeight: 20
Rectangle {
anchors.fill: parent
radius: Metrics.radius("full")
color: Appearance.colors.colLayer2
}
Rectangle {
width: parent.width * (Mpris.lengthSec > 0 ? Mpris.positionSec / Mpris.lengthSec : 0)
radius: Metrics.radius("full")
color: Appearance.colors.colPrimary
anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
}
}
}
Text {
text: Mpris.formatTime(Mpris.lengthSec)
font.pixelSize: Metrics.fontSize("smallest")
color: Appearance.colors.colSubtext
}
}
}
}
}
}