From 7ea1eed8bf34cf9d277e47883677d25b71f230ab Mon Sep 17 00:00:00 2001 From: Damocles Date: Sun, 12 Apr 2026 23:20:38 +0200 Subject: [PATCH] overview backdrop: test pattern, niri layer-rule in hm-module --- modules/OverviewBackdrop.qml | 78 ++++++++++++++++++++++++++++++++++++ modules/qmldir | 1 + nix/hm-module.nix | 8 ++++ shell.qml | 4 ++ 4 files changed, 91 insertions(+) create mode 100644 modules/OverviewBackdrop.qml diff --git a/modules/OverviewBackdrop.qml b/modules/OverviewBackdrop.qml new file mode 100644 index 0000000..fdb3c0f --- /dev/null +++ b/modules/OverviewBackdrop.qml @@ -0,0 +1,78 @@ +import QtQuick +import Quickshell +import Quickshell.Wayland +import "." as M + +// Rendered in niri's overview backdrop via place-within-backdrop layer rule. +// Visible between workspace rows during overview. +PanelWindow { + id: root + + required property var screen + + color: "transparent" + + WlrLayershell.layer: WlrLayer.Background + WlrLayershell.exclusiveZone: -1 + WlrLayershell.namespace: "nova-overview-backdrop" + mask: Region {} + + anchors.top: true + anchors.left: true + anchors.right: true + anchors.bottom: true + + // Test pattern — diagonal gradient with centered label + Rectangle { + anchors.fill: parent + gradient: Gradient { + orientation: Gradient.Horizontal + GradientStop { + position: 0 + color: Qt.rgba(M.Theme.base0C.r, M.Theme.base0C.g, M.Theme.base0C.b, 0.15) + } + GradientStop { + position: 0.5 + color: Qt.rgba(M.Theme.base0E.r, M.Theme.base0E.g, M.Theme.base0E.b, 0.1) + } + GradientStop { + position: 1 + color: Qt.rgba(M.Theme.base09.r, M.Theme.base09.g, M.Theme.base09.b, 0.15) + } + } + } + + // Grid of dots as a test pattern + Grid { + anchors.fill: parent + columns: Math.floor(width / 80) + rows: Math.floor(height / 80) + + Repeater { + model: parent.columns * parent.rows + Rectangle { + width: 80 + height: 80 + color: "transparent" + Rectangle { + anchors.centerIn: parent + width: 4 + height: 4 + radius: 2 + color: M.Theme.base0D + opacity: 0.2 + } + } + } + } + + Text { + anchors.centerIn: parent + text: "nova-shell overview backdrop" + color: M.Theme.base05 + opacity: 0.3 + font.pixelSize: 24 + font.family: M.Theme.fontFamily + font.letterSpacing: 6 + } +} diff --git a/modules/qmldir b/modules/qmldir index e7839d9..0fc1e6e 100644 --- a/modules/qmldir +++ b/modules/qmldir @@ -34,3 +34,4 @@ Notifications 1.0 Notifications.qml Power 1.0 Power.qml Privacy 1.0 Privacy.qml BackgroundOverlay 1.0 BackgroundOverlay.qml +OverviewBackdrop 1.0 OverviewBackdrop.qml diff --git a/nix/hm-module.nix b/nix/hm-module.nix index 35a0447..b186191 100644 --- a/nix/hm-module.nix +++ b/nix/hm-module.nix @@ -192,6 +192,14 @@ in in (pkgs.formats.json { }).generate "nova-shell-theme.json" finalTheme; + # Niri layer rules for backdrop placement (requires niri-flake hm module) + programs.niri.settings.layer-rules = lib.mkIf (config ? programs && config.programs ? niri) [ + { + matches = [ { namespace = "^nova-overview-backdrop$"; } ]; + place-within-backdrop = true; + } + ]; + systemd.user.services.nova-shell = lib.mkIf cfg.systemd.enable { Unit = { Description = "nova-shell Quickshell bar"; diff --git a/shell.qml b/shell.qml index ec9007c..d6826f1 100644 --- a/shell.qml +++ b/shell.qml @@ -23,6 +23,10 @@ ShellRoot { screen: scope.modelData } + OverviewBackdrop { + screen: scope.modelData + } + ScreenCorners { screen: scope.modelData }