pragma ComponentBehavior: Bound import Quickshell import Niri import QtQuick import QtQuick.Layouts import Qt5Compat.GraphicalEffects import qs import qs.settings import qs.widgets Rectangle { id: wsWrap Niri { id: niri Component.onCompleted: connect() onConnected: console.log("Connected to niri") onErrorOccurred: function (error) { console.error("Error:", error); } } required property ShellScreen barScreen color: "transparent" radius: Settings.config.rounding implicitWidth: wsLayout.implicitWidth + 6 implicitHeight: wsLayout.implicitHeight + 6 RowLayout { id: wsLayout spacing: 6 anchors.centerIn: parent Repeater { id: wsRep model: niri.workspaces delegate: Rectangle { id: wsRect layer { enabled: true effect: DropShadow { color: Colors.base01 radius: 8 verticalOffset: 1 horizontalOffset: 1 samples: 18 } } implicitWidth: modelData.isFocused ? Settings.config.barHeight * 1.5 : Settings.config.barHeight / 2 + 10 implicitHeight: Settings.config.barHeight / 1.5 visible: modelData.id < 0 ? false : modelData.output == wsWrap.barScreen.name required property var modelData color: modelData.isFocused ? Colors.base0D : Colors.base02 radius: Settings.config.rounding CText { id: wsText anchors.centerIn: parent text: wsRect.modelData.index color: parent.modelData.isFocused ? Colors.base01 : Colors.base07 opacity: parent.modelData.isFocused ? 1 : 0.5 } Behavior on implicitWidth { NumberAnimation { easing { type: Easing.OutBack overshoot: 2 } duration: 400 } } MouseArea { id: mouseHandler acceptedButtons: Qt.LeftButton anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { niri.focusWorkspace(wsRect.modelData.index); } } } } } }