Compare commits
No commits in common. "974613d811ce2d417e1e3971fc4afead44c2f97a" and "ff005acc60b3c262c40e6377a48f0be0f09c0592" have entirely different histories.
974613d811
...
ff005acc60
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
|
||||||
- Background overlay — clock and date rendered on the background layer, visible behind windows and in niri overview gaps. Always there, never in the way
|
- 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
|
||||||
- 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,11 +83,6 @@ 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
|
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -135,7 +130,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` | `15` | Screen corner rounding, 0 to disable (px) |
|
| `screenRadius` | `20` | Screen corner rounding, 0 to disable (px) |
|
||||||
|
|
||||||
### Systemd service
|
### Systemd service
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,14 +138,12 @@ 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,12 +11,16 @@ 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)
|
if (!scr) return 0.5;
|
||||||
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(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)
|
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
|
||||||
|
)
|
||||||
|
|
||||||
visible: row.visibleChildren.length > 0
|
visible: row.visibleChildren.length > 0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,14 @@ M.BarSection {
|
||||||
Process {
|
Process {
|
||||||
id: cavaProc
|
id: cavaProc
|
||||||
running: root.playing
|
running: root.playing
|
||||||
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\""]
|
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\""
|
||||||
|
]
|
||||||
stdout: SplitParser {
|
stdout: SplitParser {
|
||||||
splitMarker: "\n"
|
splitMarker: "\n"
|
||||||
onRead: line => {
|
onRead: line => {
|
||||||
|
|
@ -243,11 +250,7 @@ M.BarSection {
|
||||||
color: M.Theme.base0E
|
color: M.Theme.base0E
|
||||||
radius: 1
|
radius: 1
|
||||||
|
|
||||||
Behavior on height {
|
Behavior on height { NumberAnimation { duration: 50 } }
|
||||||
NumberAnimation {
|
|
||||||
duration: 50
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ PanelWindow {
|
||||||
|
|
||||||
WlrLayershell.layer: WlrLayer.Background
|
WlrLayershell.layer: WlrLayer.Background
|
||||||
WlrLayershell.exclusiveZone: -1
|
WlrLayershell.exclusiveZone: -1
|
||||||
WlrLayershell.namespace: "nova-background-overlay"
|
WlrLayershell.namespace: "nova-overview"
|
||||||
mask: Region {}
|
mask: Region {}
|
||||||
|
|
||||||
anchors.top: true
|
anchors.top: true
|
||||||
|
|
@ -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
|
||||||
BackgroundOverlay 1.0 BackgroundOverlay.qml
|
Overview 1.0 Overview.qml
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ ShellRoot {
|
||||||
screen: scope.modelData
|
screen: scope.modelData
|
||||||
}
|
}
|
||||||
|
|
||||||
BackgroundOverlay {
|
Overview {
|
||||||
screen: scope.modelData
|
screen: scope.modelData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue