diff --git a/README.md b/README.md index 0a3d7e4..839cf86 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,24 @@ programs.nova-shell.systemd = { }; ``` +### Niri overview backdrop + +If you use the Home Manager module like a civilized person, the required niri +layer rule is added automatically. If you insist on managing your niri config +by hand — because declarative configuration is apparently too convenient — add +this to your `config.kdl`: + +```kdl +layer-rule { + match namespace="^nova-overview-backdrop$" + place-within-backdrop true +} +``` + +Without this, the overview backdrop widgets won't be visible between workspace +rows. The bar will still work, you'll just miss out on the pretty parts, which +is arguably what you deserve for not using Nix properly. + ## Contributing Sure, why not. It can't get much worse, and the GPL requires you to share diff --git a/modules/BackgroundOverlay.qml b/modules/BackgroundOverlay.qml index 696131c..bd028b6 100644 --- a/modules/BackgroundOverlay.qml +++ b/modules/BackgroundOverlay.qml @@ -53,6 +53,11 @@ PanelWindow { Text { text: ":" color: colon._colors[colon._colorIdx % colon._colors.length] + Behavior on color { + ColorAnimation { + duration: 800 + } + } font.pixelSize: 72 font.family: M.Theme.fontFamily font.bold: true @@ -104,6 +109,11 @@ PanelWindow { property int _colorIdx: 0 readonly property var _colors: [M.Theme.base08, M.Theme.base09, M.Theme.base0A, M.Theme.base0B, M.Theme.base0C, M.Theme.base0D, M.Theme.base0E, M.Theme.base05] color: _colors[_colorIdx % _colors.length] + Behavior on color { + ColorAnimation { + duration: 800 + } + } SequentialAnimation { loops: Animation.Infinite @@ -176,6 +186,11 @@ PanelWindow { width: parent.width * (clock.date.getSeconds() / 59) height: parent.height color: colon._colors[colon._colorIdx % colon._colors.length] + Behavior on color { + ColorAnimation { + duration: 800 + } + } radius: 1 opacity: 0.6 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 }