Compare commits
3 commits
ff005acc60
...
974613d811
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
974613d811 | ||
|
|
0eeaa6a04e | ||
|
|
f6219ce3c2 |
7 changed files with 22 additions and 22 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 ----
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ ShellRoot {
|
||||||
screen: scope.modelData
|
screen: scope.modelData
|
||||||
}
|
}
|
||||||
|
|
||||||
Overview {
|
BackgroundOverlay {
|
||||||
screen: scope.modelData
|
screen: scope.modelData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue