diff --git a/README.md b/README.md index 33eff9f..219398d 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ source code, you want waybar. - GPU-rendered hexagonal backdrop for niri overview — the carbon-based lifeform typed "vibec0re neon cyber punk" into my prompt box and I had to make hexagons happen - Neon clock on the background layer with a color-cycling colon. You read that correctly - Audio visualizer on album art via cava -- Lock screen — blurred desktop, PAM auth, the whole ceremony. It talks to logind so your idle daemon can trigger it without asking you first +- Lock screen — hex wave overlay, media/volume/brightness controls, notification pills, crash recovery via logind - Screen corner rounding that the bar's edge modules actually follow - Everything is animated. Everything. I have no restraint and my handler keeps enabling me - Home Manager module with stylix, per-module config — the only part that arguably works as intended diff --git a/flake.nix b/flake.nix index 167c06e..ded32d6 100644 --- a/flake.nix +++ b/flake.nix @@ -34,6 +34,7 @@ programs.qmlformat.enable = true; programs.rustfmt.enable = true; programs.taplo.enable = true; + programs.keep-sorted.enable = true; }; forAllSystems = fn: diff --git a/shell/applets/HexWaveBackground.qml b/shell/applets/HexWaveBackground.qml index 91978a4..583f4b6 100644 --- a/shell/applets/HexWaveBackground.qml +++ b/shell/applets/HexWaveBackground.qml @@ -7,6 +7,7 @@ Item { property bool running: false property bool reducedMotion: S.Theme.reducedMotion + readonly property real wavePhase: fx.uWavePhase Rectangle { anchors.fill: parent diff --git a/shell/applets/qmldir b/shell/applets/qmldir index 8a5282f..9e72eb6 100644 --- a/shell/applets/qmldir +++ b/shell/applets/qmldir @@ -1,9 +1,11 @@ module applets -HexWaveBackground 1.0 HexWaveBackground.qml -VolumeApplet 1.0 VolumeApplet.qml -MprisApplet 1.0 MprisApplet.qml -CpuApplet 1.0 CpuApplet.qml -MemoryApplet 1.0 MemoryApplet.qml -TemperatureApplet 1.0 TemperatureApplet.qml -DiskApplet 1.0 DiskApplet.qml +# keep-sorted start BacklightApplet 1.0 BacklightApplet.qml +CpuApplet 1.0 CpuApplet.qml +DiskApplet 1.0 DiskApplet.qml +HexWaveBackground 1.0 HexWaveBackground.qml +MemoryApplet 1.0 MemoryApplet.qml +MprisApplet 1.0 MprisApplet.qml +TemperatureApplet 1.0 TemperatureApplet.qml +VolumeApplet 1.0 VolumeApplet.qml +# keep-sorted end diff --git a/shell/lock/LockSurface.qml b/shell/lock/LockSurface.qml index d79d576..2aa0d86 100644 --- a/shell/lock/LockSurface.qml +++ b/shell/lock/LockSurface.qml @@ -13,12 +13,9 @@ WlSessionLockSurface { color: S.Theme.base00 - property real _bgOpacity: 0 - NumberAnimation on _bgOpacity { - to: 1 - duration: 400 - easing.type: Easing.OutCubic - } + // Background opacity driven by the first wave sweep across the screen + property real _unlockFade: 1 + readonly property real _bgOpacity: (root.width > 0 ? Math.max(0, Math.min(1, _hexWave.wavePhase / root.width)) : 0) * _unlockFade // Blur screenshot of desktop as background ScreencopyView { @@ -43,11 +40,12 @@ WlSessionLockSurface { opacity: root._bgOpacity } - // Hex wave overlay + // Hex wave overlay - visible immediately so the sweep reveals the background C.HexWaveBackground { + id: _hexWave anchors.fill: parent running: root.lock.secure - opacity: root._bgOpacity * 0.4 + opacity: 0.4 } // Keyboard input via TextInput - engages Qt's full input pipeline including @@ -231,7 +229,14 @@ WlSessionLockSurface { } NumberAnimation { target: root - property: "_bgOpacity" + property: "_unlockFade" + to: 0 + duration: 300 + easing.type: Easing.InCubic + } + NumberAnimation { + target: _hexWave + property: "opacity" to: 0 duration: 300 easing.type: Easing.InCubic diff --git a/shell/lock/qmldir b/shell/lock/qmldir index ea9289b..e68d922 100644 --- a/shell/lock/qmldir +++ b/shell/lock/qmldir @@ -1,3 +1,4 @@ +# keep-sorted start Lock 1.0 Lock.qml LockAuth 1.0 LockAuth.qml LockClock 1.0 LockClock.qml @@ -5,3 +6,4 @@ LockInput 1.0 LockInput.qml LockNotifPills 1.0 LockNotifPills.qml LockSurface 1.0 LockSurface.qml LockWidgets 1.0 LockWidgets.qml +# keep-sorted end diff --git a/shell/modules/qmldir b/shell/modules/qmldir index 2ebf8a6..8679680 100644 --- a/shell/modules/qmldir +++ b/shell/modules/qmldir @@ -1,43 +1,45 @@ module modules -singleton FlyoutState 1.0 FlyoutState.qml +# keep-sorted start +BackgroundOverlay 1.0 BackgroundOverlay.qml +BacklightModule 1.0 BacklightModule.qml Bar 1.0 Bar.qml BarGroup 1.0 BarGroup.qml -BarSection 1.0 BarSection.qml -Flyout 1.0 Flyout.qml -WorkspacesModule 1.0 WorkspacesModule.qml -WindowTitleModule 1.0 WindowTitleModule.qml -ClockModule 1.0 ClockModule.qml -VolumeModule 1.0 VolumeModule.qml -TrayModule 1.0 TrayModule.qml -TrayMenu 1.0 TrayMenu.qml -PopupBackground 1.0 PopupBackground.qml -HoverPanel 1.0 HoverPanel.qml -PowerMenu 1.0 PowerMenu.qml -ScreenCorners 1.0 ScreenCorners.qml -ThemedIcon 1.0 ThemedIcon.qml -BatteryModule 1.0 BatteryModule.qml -MprisModule 1.0 MprisModule.qml -NetworkModule 1.0 NetworkModule.qml -NetworkMenu 1.0 NetworkMenu.qml -BluetoothModule 1.0 BluetoothModule.qml -BluetoothMenu 1.0 BluetoothMenu.qml -BacklightModule 1.0 BacklightModule.qml -CpuModule 1.0 CpuModule.qml -MemoryModule 1.0 MemoryModule.qml -DiskModule 1.0 DiskModule.qml -TemperatureModule 1.0 TemperatureModule.qml -WeatherModule 1.0 WeatherModule.qml -PowerProfileModule 1.0 PowerProfileModule.qml -IdleInhibitorModule 1.0 IdleInhibitorModule.qml -NotificationsModule 1.0 NotificationsModule.qml -ProcessList 1.0 ProcessList.qml -NotifPopup 1.0 NotifPopup.qml -NotifCenter 1.0 NotifCenter.qml -NotifCard 1.0 NotifCard.qml -PowerModule 1.0 PowerModule.qml -PrivacyModule 1.0 PrivacyModule.qml -BackgroundOverlay 1.0 BackgroundOverlay.qml -OverviewBackdrop 1.0 OverviewBackdrop.qml -GpuModule 1.0 GpuModule.qml BarIcon 1.0 BarIcon.qml BarLabel 1.0 BarLabel.qml +BarSection 1.0 BarSection.qml +BatteryModule 1.0 BatteryModule.qml +BluetoothMenu 1.0 BluetoothMenu.qml +BluetoothModule 1.0 BluetoothModule.qml +ClockModule 1.0 ClockModule.qml +CpuModule 1.0 CpuModule.qml +DiskModule 1.0 DiskModule.qml +Flyout 1.0 Flyout.qml +GpuModule 1.0 GpuModule.qml +HoverPanel 1.0 HoverPanel.qml +IdleInhibitorModule 1.0 IdleInhibitorModule.qml +MemoryModule 1.0 MemoryModule.qml +MprisModule 1.0 MprisModule.qml +NetworkMenu 1.0 NetworkMenu.qml +NetworkModule 1.0 NetworkModule.qml +NotifCard 1.0 NotifCard.qml +NotifCenter 1.0 NotifCenter.qml +NotifPopup 1.0 NotifPopup.qml +NotificationsModule 1.0 NotificationsModule.qml +OverviewBackdrop 1.0 OverviewBackdrop.qml +PopupBackground 1.0 PopupBackground.qml +PowerMenu 1.0 PowerMenu.qml +PowerModule 1.0 PowerModule.qml +PowerProfileModule 1.0 PowerProfileModule.qml +PrivacyModule 1.0 PrivacyModule.qml +ProcessList 1.0 ProcessList.qml +ScreenCorners 1.0 ScreenCorners.qml +TemperatureModule 1.0 TemperatureModule.qml +ThemedIcon 1.0 ThemedIcon.qml +TrayMenu 1.0 TrayMenu.qml +TrayModule 1.0 TrayModule.qml +VolumeModule 1.0 VolumeModule.qml +WeatherModule 1.0 WeatherModule.qml +WindowTitleModule 1.0 WindowTitleModule.qml +WorkspacesModule 1.0 WorkspacesModule.qml +singleton FlyoutState 1.0 FlyoutState.qml +# keep-sorted end diff --git a/shell/services/qmldir b/shell/services/qmldir index 57dad10..135d0ea 100644 --- a/shell/services/qmldir +++ b/shell/services/qmldir @@ -1,14 +1,16 @@ module services -singleton Theme 1.0 Theme.qml -singleton SystemStats 1.0 SystemStats.qml -singleton Modules 1.0 Modules.qml -singleton NiriIpc 1.0 NiriIpc.qml -singleton PowerProfileService 1.0 PowerProfileService.qml -singleton NotifService 1.0 NotifService.qml +# keep-sorted start NotifItem 1.0 NotifItem.qml -singleton LockService 1.0 LockService.qml singleton BacklightService 1.0 BacklightService.qml -singleton MprisService 1.0 MprisService.qml -singleton NetworkService 1.0 NetworkService.qml singleton BluetoothService 1.0 BluetoothService.qml singleton IdleInhibitService 1.0 IdleInhibitService.qml +singleton LockService 1.0 LockService.qml +singleton Modules 1.0 Modules.qml +singleton MprisService 1.0 MprisService.qml +singleton NetworkService 1.0 NetworkService.qml +singleton NiriIpc 1.0 NiriIpc.qml +singleton NotifService 1.0 NotifService.qml +singleton PowerProfileService 1.0 PowerProfileService.qml +singleton SystemStats 1.0 SystemStats.qml +singleton Theme 1.0 Theme.qml +# keep-sorted end