Compare commits

...

3 commits

Author SHA1 Message Date
Damocles
974613d811 nix fmt 2026-04-12 22:48:04 +02:00
Damocles
0eeaa6a04e window title: grow to content, spacer takes remaining space 2026-04-12 22:47:33 +02:00
Damocles
f6219ce3c2 rename Overview to BackgroundOverlay everywhere 2026-04-12 22:45:08 +02:00
7 changed files with 22 additions and 22 deletions

View file

@ -18,7 +18,7 @@ exactly when you should be most suspicious.
- Per-module accent colors that change based on state, with animated transitions. Battery blinks when critical and sends desktop notifications, because the robot cares about your hardware more than you do - Per-module accent colors that change based on state, with animated transitions. Battery blinks when critical and sends desktop notifications, because the robot cares about your hardware more than you do
- Audio visualizer on album art via cava — because the robot watched too many r/unixporn posts and couldn't help itself - Audio visualizer on album art via cava — because the robot watched too many r/unixporn posts and couldn't help itself
- Screen corner rounding — tiny overlay windows with quarter-circle masks, click-transparent, configurable via `screenRadius`. The gradient top border curves to match, because the robot has opinions about pixel alignment - Screen corner rounding — tiny overlay windows with quarter-circle masks, click-transparent, configurable via `screenRadius`. The gradient top border curves to match, because the robot has opinions about pixel alignment
- Overview widgets — clock and date rendered on the background layer, visible in the gaps between workspace rows when niri's overview is active. Always there, never in the way - Background overlay — clock and date rendered on the background layer, visible behind windows and in niri overview gaps. Always there, never in the way
- Weather via wttrbar with configurable arguments and rich HTML tooltips - Weather via wttrbar with configurable arguments and rich HTML tooltips
- Power menu with lock, suspend, logout, reboot, shutdown - Power menu with lock, suspend, logout, reboot, shutdown
- Event-driven updates for network, bluetooth, and power profiles via dbus-monitor/nmcli monitor — no more 5-second polling lag - Event-driven updates for network, bluetooth, and power profiles via dbus-monitor/nmcli monitor — no more 5-second polling lag
@ -83,6 +83,11 @@ programs.nova-shell.modules = {
# modules with extra config # modules with extra config
backlight.step = 2; # brightness adjustment % backlight.step = 2; # brightness adjustment %
weather.args = [ "--nerd" "--location" "Berlin" ]; # wttrbar arguments weather.args = [ "--nerd" "--location" "Berlin" ]; # wttrbar arguments
temperature.warm = 55; # °C threshold for warm color
temperature.hot = 75; # °C threshold for hot color
battery.warning = 30; # % for warning notification
battery.critical = 10; # % for critical blink + notification
cpu.interval = 2000; # polling interval in ms
}; };
``` ```
@ -130,7 +135,7 @@ Full list of theme keys and their defaults:
| `barSpacing` | `12` | Gap between modules (px) | | `barSpacing` | `12` | Gap between modules (px) |
| `moduleSpacing` | `4` | Icon-to-label gap within a module (px) | | `moduleSpacing` | `4` | Icon-to-label gap within a module (px) |
| `radius` | `4` | Corner radius for flyouts and menus (px) | | `radius` | `4` | Corner radius for flyouts and menus (px) |
| `screenRadius` | `20` | Screen corner rounding, 0 to disable (px) | | `screenRadius` | `15` | Screen corner rounding, 0 to disable (px) |
### Systemd service ### Systemd service

View file

@ -12,7 +12,7 @@ PanelWindow {
WlrLayershell.layer: WlrLayer.Background WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusiveZone: -1 WlrLayershell.exclusiveZone: -1
WlrLayershell.namespace: "nova-overview" WlrLayershell.namespace: "nova-background-overlay"
mask: Region {} mask: Region {}
anchors.top: true anchors.top: true

View file

@ -138,12 +138,14 @@ PanelWindow {
} }
} }
M.BarGroup { M.BarGroup {
Layout.fillWidth: true
clip: true clip: true
M.WindowTitle { M.WindowTitle {
visible: M.Modules.windowTitle.enable visible: M.Modules.windowTitle.enable
} }
} }
Item {
Layout.fillWidth: true
}
} }
// ---- right ---- // ---- right ----

View file

@ -11,16 +11,12 @@ Item {
// Auto-compute border color from top gradient position (base0C base09) // Auto-compute border color from top gradient position (base0C base09)
readonly property real _posFrac: { readonly property real _posFrac: {
const scr = QsWindow.window?.screen; const scr = QsWindow.window?.screen;
if (!scr) return 0.5; if (!scr)
return 0.5;
const gx = mapToGlobal(width / 2, 0).x - scr.x; const gx = mapToGlobal(width / 2, 0).x - scr.x;
return Math.max(0, Math.min(1, gx / scr.width)); return Math.max(0, Math.min(1, gx / scr.width));
} }
property color borderColor: Qt.rgba( property color borderColor: Qt.rgba(M.Theme.base0C.r + (M.Theme.base09.r - M.Theme.base0C.r) * _posFrac, M.Theme.base0C.g + (M.Theme.base09.g - M.Theme.base0C.g) * _posFrac, M.Theme.base0C.b + (M.Theme.base09.b - M.Theme.base0C.b) * _posFrac, 1)
M.Theme.base0C.r + (M.Theme.base09.r - M.Theme.base0C.r) * _posFrac,
M.Theme.base0C.g + (M.Theme.base09.g - M.Theme.base0C.g) * _posFrac,
M.Theme.base0C.b + (M.Theme.base09.b - M.Theme.base0C.b) * _posFrac,
1
)
visible: row.visibleChildren.length > 0 visible: row.visibleChildren.length > 0

View file

@ -39,14 +39,7 @@ M.BarSection {
Process { Process {
id: cavaProc id: cavaProc
running: root.playing running: root.playing
command: ["sh", "-c", command: ["sh", "-c", "cfg=$(mktemp /tmp/nova-cava-XXXXXX.conf);" + "cat > \"$cfg\" << 'CAVAEOF'\n" + "[general]\nbars=16\nframerate=30\n[output]\nmethod=raw\nraw_target=/dev/stdout\ndata_format=ascii\nascii_max_range=100\n" + "CAVAEOF\n" + "trap 'rm -f \"$cfg\"' EXIT;" + "exec cava -p \"$cfg\""]
"cfg=$(mktemp /tmp/nova-cava-XXXXXX.conf);" +
"cat > \"$cfg\" << 'CAVAEOF'\n" +
"[general]\nbars=16\nframerate=30\n[output]\nmethod=raw\nraw_target=/dev/stdout\ndata_format=ascii\nascii_max_range=100\n" +
"CAVAEOF\n" +
"trap 'rm -f \"$cfg\"' EXIT;" +
"exec cava -p \"$cfg\""
]
stdout: SplitParser { stdout: SplitParser {
splitMarker: "\n" splitMarker: "\n"
onRead: line => { onRead: line => {
@ -250,7 +243,11 @@ M.BarSection {
color: M.Theme.base0E color: M.Theme.base0E
radius: 1 radius: 1
Behavior on height { NumberAnimation { duration: 50 } } Behavior on height {
NumberAnimation {
duration: 50
}
}
} }
} }
} }

View file

@ -33,4 +33,4 @@ IdleInhibitor 1.0 IdleInhibitor.qml
Notifications 1.0 Notifications.qml Notifications 1.0 Notifications.qml
Power 1.0 Power.qml Power 1.0 Power.qml
Privacy 1.0 Privacy.qml Privacy 1.0 Privacy.qml
Overview 1.0 Overview.qml BackgroundOverlay 1.0 BackgroundOverlay.qml

View file

@ -19,7 +19,7 @@ ShellRoot {
screen: scope.modelData screen: scope.modelData
} }
Overview { BackgroundOverlay {
screen: scope.modelData screen: scope.modelData
} }