Compare commits

...

3 commits

6 changed files with 124 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -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
}
}

View file

@ -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

View file

@ -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";

View file

@ -23,6 +23,10 @@ ShellRoot {
screen: scope.modelData
}
OverviewBackdrop {
screen: scope.modelData
}
ScreenCorners {
screen: scope.modelData
}