pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Widgets import Caelestia.Config import qs.components import qs.services import qs.utils import qs.modules.nexus.common PageBase { id: root title: qsTr("All apps") isSubPage: true ColumnLayout { anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top width: root.cappedWidth spacing: Tokens.spacing.extraSmall / 2 Repeater { id: list model: [...DesktopEntries.applications.values].sort((a, b) => a.name.localeCompare(b.name)) ConnectedRect { id: appItem required property DesktopEntry modelData required property int index Layout.fillWidth: true first: index === 0 last: index === list.count - 1 implicitHeight: appRow.implicitHeight + appRow.anchors.margins * 2 StateLayer { onClicked: { root.nState.selectedApp = appItem.modelData; root.nState.openSubPage(2); } } RowLayout { id: appRow anchors.fill: parent anchors.margins: Tokens.padding.medium anchors.leftMargin: Tokens.padding.largeIncreased anchors.rightMargin: Tokens.padding.largeIncreased spacing: Tokens.spacing.medium IconImage { asynchronous: true implicitSize: Math.round(Tokens.font.icon.large.pointSize * 1.8) source: Quickshell.iconPath(appItem.modelData.icon, "image-missing") } ColumnLayout { Layout.fillWidth: true spacing: 0 StyledText { Layout.fillWidth: true text: appItem.modelData.name font: Tokens.font.body.small elide: Text.ElideRight } StyledText { Layout.fillWidth: true visible: text text: (appItem.modelData.comment || appItem.modelData.genericName) ?? "" color: Colours.palette.m3outline font: Tokens.font.label.small elide: Text.ElideRight } } MaterialIcon { visible: Strings.testRegexList(GlobalConfig.launcher.favouriteApps, appItem.modelData.id) text: "favorite" fill: 1 color: Colours.palette.m3primary fontStyle: Tokens.font.icon.small } MaterialIcon { text: "chevron_right" color: Colours.palette.m3onSurfaceVariant fontStyle: Tokens.font.icon.medium } } } } } }