Files
asepharyana 1cdb82a76f Sync config from arch
- hypr/apps.lua
- hypr/autostart.lua
- hypr/envs.lua
- hypr/hyprland.lua
- hypr/hyprsunset.conf
- hypr/input.lua
- hypr/looknfeel.lua
- hypr/omasettings.lua
- hypr/xdph.conf
- omarchy/branding/about.txt
- omarchy/branding/screensaver.txt
- omarchy/extensions/omarchy-menu.jsonc
- omarchy/hooks/battery-low.d/play-warning-sound.sample
- omarchy/hooks/font-set.d/show-font-notification.sample
- omarchy/hooks/post-boot.d/weather.sample
- omarchy/hooks/post-update.d/install-voxtype.hook
- omarchy/hooks/post-update.d/setup-agent.hook
- omarchy/hooks/post-update.d/setup-fingerprint.hook
- omarchy/hooks/post-update.d/show-update-notification.sample
- omarchy/hooks/pre-refresh-pacman.d/add-custom-repo.sample
- omarchy/hooks/theme-set.d/show-theme-notification.sample
- omarchy/shell.json
- omarchy/shell.toml
- omarchy/theme.name
- omarchy/themes/azure-glow/README.md
- omarchy/themes/azure-glow/alacritty.toml
- omarchy/themes/azure-glow/btop.theme
- omarchy/themes/azure-glow/hyprland.conf
- omarchy/themes/azure-glow/hyprlock.conf
- omarchy/themes/azure-glow/icons.theme
- … 269 more
2026-09-23 15:19:12 +07:00

239 lines
8.1 KiB
QML

pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import qs.Commons
import "../Presentation.js" as Presentation
RowLayout {
id: links
required property string pluginId
required property var entry
required property string localCommit
required property string repoUrl
required property color foreground
required property string fontFamily
signal openUrlRequested(string url)
readonly property string snapshotCommit: entry && typeof entry.snapshotCommit === "string"
? entry.snapshotCommit : ""
readonly property bool commitKnown: snapshotCommit !== "" && localCommit !== ""
readonly property bool commitMatches: commitKnown && snapshotCommit === localCommit
readonly property string compareUrl: Presentation.compareUrl(repoUrl, snapshotCommit, localCommit)
readonly property string snapshotUrl: Presentation.commitUrl(repoUrl, snapshotCommit)
readonly property string localUrl: Presentation.commitUrl(repoUrl, localCommit)
readonly property string marketplaceUrl: Presentation.marketplaceUrl(pluginId)
readonly property string checksUrl: Presentation.listingChecksUrl(pluginId)
spacing: Style.space(6)
Layout.fillWidth: true
// Every link can shrink or elide so this row never displaces the plugin
// actions at the right edge.
Item {
id: marketplaceLink
readonly property int gap: 2
Layout.preferredWidth: marketplaceIcon.width + marketplaceArrow.implicitWidth + gap
Layout.preferredHeight: Math.max(marketplaceIcon.height, marketplaceArrow.implicitHeight)
Layout.alignment: Qt.AlignVCenter
// Omarchy Plugins favicon, based on Lucide's ISC-licensed cable icon.
Image {
id: marketplaceIcon
anchors.verticalCenter: parent.verticalCenter
source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAADb0lEQVRYhe2WTWhcVRTHf+fNNAmh1tFQsISUErMSwUicSbOpLTSLiEUTECaTEl2JKEVU6MKvjboRFAu6cCNB7CNS0SKxWbQqtJCYSYsR6spa1Cgu2spYQup85P1d3DfT92YyHcTpqv3D4557vt+599x74TZudVg9Q08Npih1PA922vylbwGUG94H2kNH6YjNrBQabfZ2UVo/gPGAY/AD5cScHVu81iqBZAOn1Pki6DVQAbgrDPE5kKLUmQBejwWfSqcprc8A96GIYMvGqnLpg+Yvn/5vCYiesC4p5dL7Q26qJouq5tL9yL4Btm7iuw9sXrnhQfOXfmqWgBdzOD20E9PUdY6ddF91qoPKpvsi8o/C4AJ7AzruppzocRVEQDfow2bBob4CFe8wcOcN9Lfh2WHgkLK7d0HwcJj6jPn56NK8qcnMAMaTwD5ND+20j8/9tplDr27a7/zpEmIcNAoaRYwjLoV/fa8bgv6amezLTXwfr1HlxECzP2rcAwBmBfPzx6Ms5TJvA9uv5xp0Iq9KFxt8eEExIu9slkC8AtI/bqRbkRYVGKI7ptMm1FXAVkDjGL3kMnMSdzi2rYF6Ha3vb14CFe99tmw8A+wAHonVwOFPyskP2plAbAns2OJfkBxBfAZcjYiuOl5yxOm0Dw2b0PyFX4EnNPXQGPJOOGaQNf/sfDsDV+G1Vrm52LwN/weU3b0LT++4M6QK71Plhk8S2Es2+90vUf22VkDTmR4SwSJogmoHAY7WBF6woOlM7D5p7xKU7TnEPQAYXyHOIM4AJ0KNHVT0bNSkzUugQTfwB37+gIX9KzAmM6sYvcgejFq0twJmXW5k3SKHh4Ew1mM6IZpXIPCKtYMo8DY5y72umG4UIqXJzOOY1tzctiJSje+vGyVgyZ+hEtIaI3q7AQQ8VnMohQ+O4CIYGNuBL2rXSTSw6UIsTNMEAOUyC8AIbhnfIqn3ANjgBcTLof3X5uf3Ayib7sOz88C2Ji7/xux+O7r0e5XRYg/YIeCaC6RXqXCZCpcRr4TB10BP17Rnl1eRfRL5hdHYeSA7Gg3eMgHzl84RsAf4sUEozoPtNX/5YtyIKyFVMH/5lPnLp4BCnayGlm1os/mzGhsYItXzKEa1zVYoXJmz+QuND5GO4ruUOjbAIq9hm3DP+uKRVvFu49bDv15cMTlnbnc+AAAAAElFTkSuQmCC"
width: 14
height: 14
fillMode: Image.PreserveAspectFit
cache: false
}
Text {
id: marketplaceArrow
x: marketplaceIcon.width + marketplaceLink.gap
anchors.verticalCenter: parent.verticalCenter
text: "↗"
textFormat: Text.PlainText
color: Color.accent
font.family: links.fontFamily
font.pixelSize: Style.font.caption
}
HoverHandler {
id: marketplaceHover
cursorShape: Qt.PointingHandCursor
}
TapHandler {
onTapped: links.openUrlRequested(links.marketplaceUrl)
}
ToolTip.text: links.marketplaceUrl
ToolTip.visible: marketplaceHover.hovered
ToolTip.delay: 400
}
Text {
text: "|"
textFormat: Text.PlainText
color: Qt.darker(links.foreground, 2.4)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
}
Text {
visible: links.snapshotCommit !== ""
text: "\uDB81\uDF91 " + Presentation.shortSha(links.snapshotCommit)
textFormat: Text.PlainText
color: links.commitMatches ? Color.accent : Qt.darker(links.foreground, 1.6)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
font.underline: snapshotHover.hovered && links.snapshotUrl !== ""
ToolTip.text: links.snapshotUrl !== "" ? links.snapshotUrl : links.snapshotCommit
ToolTip.visible: snapshotHover.hovered
ToolTip.delay: 400
HoverHandler {
id: snapshotHover
cursorShape: links.snapshotUrl !== "" ? Qt.PointingHandCursor : Qt.ArrowCursor
}
MouseArea {
anchors.fill: parent
enabled: links.snapshotUrl !== ""
cursorShape: Qt.PointingHandCursor
onClicked: links.openUrlRequested(links.snapshotUrl)
}
}
Text {
visible: links.snapshotCommit === "" && links.localCommit !== ""
text: "\uDB81\uDF91 " + Presentation.shortSha(links.localCommit) + (links.localUrl !== "" ? " ↗" : "")
textFormat: Text.PlainText
color: Qt.darker(links.foreground, 1.6)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
font.underline: localOnlyHover.hovered && links.localUrl !== ""
HoverHandler {
id: localOnlyHover
cursorShape: links.localUrl !== "" ? Qt.PointingHandCursor : Qt.ArrowCursor
}
MouseArea {
anchors.fill: parent
enabled: links.localUrl !== ""
cursorShape: Qt.PointingHandCursor
onClicked: links.openUrlRequested(links.localUrl)
}
}
Text {
visible: links.snapshotCommit !== "" && links.localCommit !== "" && !links.commitMatches
text: "→"
textFormat: Text.PlainText
color: Qt.darker(links.foreground, 2.0)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
}
Text {
visible: links.snapshotCommit !== "" && links.localCommit !== "" && !links.commitMatches
text: Presentation.shortSha(links.localCommit) + (links.localUrl !== "" ? " ↗" : "")
textFormat: Text.PlainText
color: Color.accent
font.family: links.fontFamily
font.pixelSize: Style.font.caption
font.underline: localHover.hovered && links.localUrl !== ""
ToolTip.text: links.localUrl !== "" ? links.localUrl : links.localCommit
ToolTip.visible: localHover.hovered
ToolTip.delay: 400
HoverHandler {
id: localHover
cursorShape: links.localUrl !== "" ? Qt.PointingHandCursor : Qt.ArrowCursor
}
MouseArea {
anchors.fill: parent
enabled: links.localUrl !== ""
cursorShape: Qt.PointingHandCursor
onClicked: links.openUrlRequested(links.localUrl)
}
}
Text {
visible: links.compareUrl !== ""
text: "|"
textFormat: Text.PlainText
color: Qt.darker(links.foreground, 2.4)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
}
Text {
visible: links.compareUrl !== ""
text: "view changes ↗"
textFormat: Text.PlainText
color: Color.accent
font.family: links.fontFamily
font.pixelSize: Style.font.caption
font.underline: compareHover.hovered
elide: Text.ElideRight
ToolTip.text: links.compareUrl
ToolTip.visible: compareHover.hovered
ToolTip.delay: 400
HoverHandler {
id: compareHover
cursorShape: Qt.PointingHandCursor
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: links.openUrlRequested(links.compareUrl)
}
}
Text {
text: "|"
textFormat: Text.PlainText
color: Qt.darker(links.foreground, 2.4)
font.family: links.fontFamily
font.pixelSize: Style.font.caption
}
Text {
text: "Listing checks ↗"
textFormat: Text.PlainText
color: Color.accent
font.family: links.fontFamily
font.pixelSize: Style.font.caption
font.underline: checksHover.hovered
elide: Text.ElideRight
Layout.fillWidth: true
Layout.minimumWidth: 0
ToolTip.text: links.checksUrl
ToolTip.visible: checksHover.hovered
ToolTip.delay: 400
HoverHandler {
id: checksHover
cursorShape: Qt.PointingHandCursor
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: links.openUrlRequested(links.checksUrl)
}
}
}