import QtQuick import Quickshell import QtQuick.Controls import Quickshell.Hyprland import Quickshell.Io import Qt.labs.folderlistmodel PanelWindow { id: picker implicitWidth: screen.width * 0.75 implicitHeight: screen.height * 0.5 color: "transparent" visible: true Rectangle { anchors.fill: parent radius: 10 color: "#80000000" border.width: 2 border.color: "#555555" //Wallpaper space Rectangle { id: wallpaperContainer anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: 20 width: parent.width - 35 height: parent.height - 100 color: "#80202020" radius: 10 clip: true // get folder url FolderListModel { id: imagesModel folder: "file://" + Quickshell.env("HOME") + "/.cache/wallpaper-thumbs" nameFilters: ["*.png", "*.jpg", "*.jpeg"] showDirs: false } // grid Item { anchors.fill: parent anchors.margins: 15 GridView { id: grid anchors.fill: parent cellWidth: parent.width/6 cellHeight: parent.height/2 + 15 model: imagesModel boundsBehavior: Flickable.StopAtBounds // pictures + text delegate: Item { width: grid.cellWidth height: grid.cellHeight Column { spacing: 20 Image { // Image source: filePath fillMode: Image.PreserveAspectCrop width: grid.cellWidth -10 height: grid.cellHeight * 0.7 asynchronous: true cache: true } Rectangle { // highlight of text id: textHighlight width: parent.width - 10 height: 24 color: mouseArea.containsMouse ? "#804a90e2" : "transparent" anchors.horizontalCenter: parent.horizontalCenter Text { text: fileName elide: Text.ElideRight width: parent.width horizontalAlignment: Text.AlignHCenter font.pixelSize: 15 font.family: "Fira Sans" color: "white" } } } Item { anchors.fill: parent Process { id: wallpaperProcess command: ["sh", "-c", Quickshell.env("HOME") + "/.config/quickshell/modules/wp/set-wallpaper.sh" + " " + model.filePath + " &"] stdout: StdioCollector { onStreamFinished: console.log(`line read: ${this.text}`) } } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: { console.log("Setting wallpaper to:", model.fileName) wallpaperProcess.startDetached() wLoader.closeWallpaperPicker() } } } } ScrollBar.vertical: ScrollBar { policy: ScrollBar.AlwaysOn } } } Rectangle { // border of wallpaper container id: borderOverlay anchors.fill: parent radius: 10 color: "transparent" border.color: "#777777" border.width: 1 z: 999 } } } }