Initial commit
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
import "./widgets"
|
||||||
|
|
||||||
|
PanelWindow {
|
||||||
|
id: panel
|
||||||
|
|
||||||
|
anchors.top: true
|
||||||
|
anchors.left: true
|
||||||
|
anchors.right: true
|
||||||
|
|
||||||
|
implicitHeight: 40
|
||||||
|
|
||||||
|
exclusiveZone: height // this is so context menus don't clip into the bar
|
||||||
|
|
||||||
|
property HyprlandMonitor barThisMonitor: Hyprland.monitorFor(screen)
|
||||||
|
|
||||||
|
margins {
|
||||||
|
top: 0
|
||||||
|
left: 0
|
||||||
|
right: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle { // Bar
|
||||||
|
id: bar
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "#1a1a1a"
|
||||||
|
radius: 0
|
||||||
|
|
||||||
|
Row { // bar widgets left
|
||||||
|
id: widgetsLeft
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 16
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
MenuButton {}
|
||||||
|
|
||||||
|
Workspaces {
|
||||||
|
thisMonitor: barThisMonitor
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Row { // bar widgets center
|
||||||
|
id: widgetsCenter
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
Clock {}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Row { // bar widgets right
|
||||||
|
id: widgetsRight
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 16
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
Repeater { // Bars
|
||||||
|
model: Quickshell.screens
|
||||||
|
delegate: Loader {
|
||||||
|
active: true // loads object
|
||||||
|
sourceComponent: Bar {screen: modelData} // creates instance of bar component
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: timeDisplay
|
||||||
|
|
||||||
|
property string currentTime: ""
|
||||||
|
|
||||||
|
text: currentTime
|
||||||
|
color: "#ffffff"
|
||||||
|
font.pixelSize: 14
|
||||||
|
font.family: "Inter, sans-serif"
|
||||||
|
|
||||||
|
//Update time every second
|
||||||
|
Timer {
|
||||||
|
interval: 1000
|
||||||
|
running: true
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
var now = new Date()
|
||||||
|
timeDisplay.currentTime = Qt.formatTime(now, "hh:mm:ss")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: archButton
|
||||||
|
width: 30
|
||||||
|
height: 28
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: archButton.containsMouse ? "#2a2a2a" : "transparent"
|
||||||
|
radius: 6
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: ""
|
||||||
|
font.pixelSize: 26
|
||||||
|
font.family: "Nerd Font"
|
||||||
|
color: "#ffffff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
|
|
||||||
|
Row { // Workspace Row
|
||||||
|
id: workspacesRow
|
||||||
|
|
||||||
|
required property HyprlandMonitor thisMonitor
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
Repeater { // repeats workspaces
|
||||||
|
model: Hyprland.workspaces
|
||||||
|
|
||||||
|
Rectangle { //workspace
|
||||||
|
visible: modelData.monitor === thisMonitor
|
||||||
|
width: 32
|
||||||
|
height: 24
|
||||||
|
radius: 4
|
||||||
|
color: modelData.active ? "#4a93ff": "#333333"
|
||||||
|
border.color: "#555555"
|
||||||
|
border.width: 2
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: Hyprland.dispatch("workspace " + modelData.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: modelData.id
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: modelData.active ? "#ffffff" : "#cccccc"
|
||||||
|
font.pixelSize: 12
|
||||||
|
font.family: "Inter, sans-serif"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
visible: Hyprland.workspaces.length === 0
|
||||||
|
text: "No Workspaces"
|
||||||
|
color: "#ffffff"
|
||||||
|
font.pixelSize: 12
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
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: "black"
|
||||||
|
|
||||||
|
border.width: 2
|
||||||
|
border.color: "white"
|
||||||
|
|
||||||
|
|
||||||
|
//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: "black"
|
||||||
|
radius: 10
|
||||||
|
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
|
||||||
|
// get folder url
|
||||||
|
FolderListModel {
|
||||||
|
id: imagesModel
|
||||||
|
folder: "file://" + Quickshell.workingDirectory + "/Pictures/Wallpapers"
|
||||||
|
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 ? "#4a90e2" : "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.workingDirectory + "/.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: "white"
|
||||||
|
border.width: 1
|
||||||
|
z: 999
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
|
Item { // container, invisible
|
||||||
|
id: wLoader
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: wallpaperLoader
|
||||||
|
active: false
|
||||||
|
sourceComponent: WallpaperPicker { id: wPicker }
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalShortcut {
|
||||||
|
name: "Wallpaper"
|
||||||
|
description: "Open wallpaper picker"
|
||||||
|
onPressed: {
|
||||||
|
wallpaperLoader.active = !wallpaperLoader.active
|
||||||
|
console.log("Pressed Meta+Shift+W (Hyprland global shortcut)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeWallpaperPicker() {
|
||||||
|
wallpaperLoader.active = false
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Path to the image is the first argument
|
||||||
|
IMAGE="$1"
|
||||||
|
|
||||||
|
echo "start"
|
||||||
|
|
||||||
|
# Check if an image was provided
|
||||||
|
if [[ -z "$IMAGE" ]]; then
|
||||||
|
echo "Usage: $0 /path/to/image"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if swww daemon is running
|
||||||
|
if ! pgrep -x "swww-daemon" > /dev/null; then
|
||||||
|
echo "Starting swww daemon..."
|
||||||
|
swww-daemon &
|
||||||
|
|
||||||
|
# Give the daemon a moment to start
|
||||||
|
sleep 0.2
|
||||||
|
echo "daemon started"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the wallpaper
|
||||||
|
echo "running"
|
||||||
|
swww img "$IMAGE" -t grow --transition-duration 1
|
||||||
|
|
||||||
Reference in New Issue
Block a user