working notifications and fuck i gotta commit more often bwaaa

This commit is contained in:
lucy 2025-12-23 20:21:18 +01:00
parent c5198abcf9
commit 1b51d1a9b3
7 changed files with 173 additions and 26 deletions

View File

@ -5,25 +5,25 @@ import Quickshell
Singleton { Singleton {
id: customColors id: customColors
// Core Backgrounds // Core Backgrounds
readonly property color background: "#0E0D15" readonly property color background: "#1A1B26"
readonly property color foreground: "#EFEEFB" readonly property color foreground: "#C0CAF5"
readonly property color cursor: "#AE9CB4" readonly property color cursor: "#C0CAF5"
// The 16 Colors of the Apocalypse // The 16 Colors of the Apocalypse
readonly property color color0: "#383841" readonly property color color0: "#414868"
readonly property color color1: "#27659D" readonly property color color1: "#F7768E"
readonly property color color2: "#8E348E" readonly property color color2: "#9ECE6A"
readonly property color color3: "#4638D8" readonly property color color3: "#E0AF68"
readonly property color color4: "#3BA63E" readonly property color color4: "#7AA2F7"
readonly property color color5: "#DB405A" readonly property color color5: "#BB9AF7"
readonly property color color6: "#6C5CF4" readonly property color color6: "#7DCFFF"
readonly property color color7: "#E0DEF1" readonly property color color7: "#A9B1D6"
readonly property color color8: "#9C9BA9" readonly property color color8: "#414868"
readonly property color color9: "#27659D" readonly property color color9: "#F7768E"
readonly property color color10: "#8E348E" readonly property color color10: "#9ECE6A"
readonly property color color11: "#4638D8" readonly property color color11: "#E0AF68"
readonly property color color12: "#3BA63E" readonly property color color12: "#7AA2F7"
readonly property color color13: "#DB405A" readonly property color color13: "#BB9AF7"
readonly property color color14: "#6C5CF4" readonly property color color14: "#7DCFFF"
readonly property color color15: "#E0DEF1" readonly property color color15: "#C0CAF5"
} }

View File

@ -1,5 +1,3 @@
pragma ComponentBehavior: Bound
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray

View File

@ -0,0 +1,129 @@
import QtQuick
import Quickshell
import Quickshell.Wayland
import qs.modules.bar
import "."
import QtQuick.Layouts
WlrLayershell {
id: root
// 1. Position: Top Right Corner, covering the full height
// We make it a fixed width (e.g., 400px) so it doesn't block the whole screen
anchors {
top: true
right: true
}
margins {
top: 30
}
width: 400
height: notifList.contentHeight + 10
// 2. Layer: Put it ABOVE normal windows
layer: WlrLayer.Overlay
exclusionMode: ExclusionMode.Ignore
// 3. CRITICAL: Make the window itself invisible!
// We only want to see the notifications, not the container.
color: "transparent"
// 4. Input: Let clicks pass through empty areas
// (This is default behavior if the background is transparent in some compositors,
// but usually you need to be careful with handling mouse events here)
// THE SPAWNER
ListView {
id: notifList
anchors.fill: parent
anchors.margins: 10
// Use 'spacing' to put gaps between notifications
spacing: 10
// Align to the bottom (like Windows) or Top (like GNOME)?
// verticalLayoutDirection: ListView.BottomToTop
// 🔗 CONNECT TO THE SERVER
// Assuming your NotificationServer is a singleton or globally accessible
// ... other imports
// Inside your ListView...
delegate: Item {
width: ListView.view.width
height: 60 // Fixed height is usually better for icon layouts
required property var modelData
Rectangle {
anchors.fill: parent
color: Colors.background
radius: 10
border.color: Colors.color5
// 2. Use RowLayout to put Image | Text side-by-side
RowLayout {
anchors.fill: parent
anchors.margins: 10
spacing: 15
// 🖼 THE IMAGE ON THE LEFT
Image {
// Use the image if available, otherwise hide this space?
// Or you could use an icon fallback.
source: modelData.image
// Hide if no image exists so text takes full width
visible: modelData.image !== ""
// Fixed size for consistency
Layout.preferredWidth: 48
Layout.preferredHeight: 48
// Crop it nicely so it doesn't stretch
fillMode: Image.PreserveAspectCrop
// Optional: Cache it for performance
asynchronous: true
}
// 📝 THE TEXT ON THE RIGHT
ColumnLayout {
// Take up all remaining width
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter // Center vertically
spacing: 2
Text {
text: modelData.summary
color: Colors.foreground
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
}
Text {
text: modelData.body
color: Colors.foreground
// Limit to 2 lines
maximumLineCount: 2
wrapMode: Text.WordWrap
elide: Text.ElideRight
Layout.fillWidth: true
}
}
}
// (Your MouseArea for closing can still go here covering the whole thing)
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: modelData.dismiss()
}
}
}
model: NotifServer.trackedNotifications
}
}

View File

@ -0,0 +1,15 @@
pragma ComponentBehavior: Bound
pragma Singleton
import Quickshell.Services.Notifications
import QtQuick
import Quickshell
NotificationServer {
bodyMarkupSupported: true
persistenceSupported: true
imageSupported: true
onNotification: notification => {
notification.tracked = true;
console.log("got notification!!! arf woof");
}
}

View File

@ -0,0 +1,2 @@
singleton NotifServer 1.0 NotifServer.qml
NotiPopup 1.0 NotiPopup.qml

View File

@ -92,7 +92,7 @@ FloatingWindow {
let cleanPath = fileUrl.toString().replace("file://", ""); let cleanPath = fileUrl.toString().replace("file://", "");
// Update the Singleton! // Update the Singleton!
WallpaperStore.currentWall = fileUrl.toString(); WallpaperStore.currentWall = fileUrl.toString();
generateScheme.startDetached(); //generateScheme.startDetached();
console.log(generateScheme.stdout); console.log(generateScheme.stdout);
} }
} }

View File

@ -1,7 +1,9 @@
//@ pragma UseQApplication //@ pragma UseQApplication
import "./modules/bar/" //pragma ComponentBehavior: Bound
import Quickshell import Quickshell
import "./modules/wallpaper/" import qs.modules.bar
import qs.modules.wallpaper
import qs.modules.notifications
Scope { Scope {
WallSwitcher {} WallSwitcher {}
@ -9,14 +11,15 @@ Scope {
id: wallVariants id: wallVariants
model: Quickshell.screens model: Quickshell.screens
delegate: Wallpaper { delegate: Wallpaper {
screen: modelData screen: wallVariants.modelData
} }
} }
Variants { Variants {
id: barVariants id: barVariants
model: Quickshell.screens model: Quickshell.screens
delegate: Bar { delegate: Bar {
screen: modelData screen: barVariants.modelData
} }
} }
NotiPopup {}
} }