mirror of
https://github.com/celesrenata/end-4-flakes.git
synced 2026-06-07 11:09:26 -05:00
ac6d3adeb9
BREAKING CHANGE: Remove external dots-hyprland dependency - Imported all essential configs from dots-hyprland/installer-replication - Added complete configs/ directory with: - hypr/ - Hyprland configuration - quickshell/ - Quickshell widgets and config - applications/ - Application configurations - scripts/ - Utility scripts - matugen/ - Material You theming - Updated flake.nix to use local ./configs instead of external repo - Simplified update-flake script (removed external repo management) - Updated README to reflect self-contained architecture - All builds pass with local configurations Benefits: - No external repository dependencies - Faster builds (no network dependencies) - Version controlled configs in single repo - Easier maintenance and development - Complete installer replication in one place
64 lines
1.9 KiB
QML
64 lines
1.9 KiB
QML
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
import qs.services
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Services.Pipewire
|
|
|
|
Item {
|
|
id: root
|
|
required property PwNode node
|
|
PwObjectTracker {
|
|
objects: [node]
|
|
}
|
|
|
|
implicitHeight: rowLayout.implicitHeight
|
|
|
|
RowLayout {
|
|
id: rowLayout
|
|
anchors.fill: parent
|
|
spacing: 6
|
|
|
|
Image {
|
|
property real size: slider.height * 0.9
|
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
|
visible: source != ""
|
|
sourceSize.width: size
|
|
sourceSize.height: size
|
|
source: {
|
|
let icon;
|
|
icon = AppSearch.guessIcon(root.node.properties["application.icon-name"]);
|
|
if (AppSearch.iconExists(icon))
|
|
return Quickshell.iconPath(icon, "image-missing");
|
|
icon = AppSearch.guessIcon(root.node.properties["node.name"]);
|
|
return Quickshell.iconPath(icon, "image-missing");
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: -4
|
|
|
|
StyledText {
|
|
Layout.fillWidth: true
|
|
font.pixelSize: Appearance.font.pixelSize.small
|
|
color: Appearance.colors.colSubtext
|
|
elide: Text.ElideRight
|
|
text: {
|
|
// application.name -> description -> name
|
|
const app = root.node.properties["application.name"] ?? (root.node.description != "" ? root.node.description : root.node.name);
|
|
const media = root.node.properties["media.name"];
|
|
return media != undefined ? `${app} • ${media}` : app;
|
|
}
|
|
}
|
|
|
|
StyledSlider {
|
|
id: slider
|
|
value: root.node.audio.volume
|
|
onValueChanged: root.node.audio.volume = value
|
|
}
|
|
}
|
|
}
|
|
}
|