From 91cd18cbcd016fc57853c63f8bb1691d951464ae Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 18 Apr 2026 14:25:08 +0200 Subject: [PATCH 1/4] select playing mpris session on startup --- shell/services/MprisService.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/services/MprisService.qml b/shell/services/MprisService.qml index c88aefa..5cb628f 100644 --- a/shell/services/MprisService.qml +++ b/shell/services/MprisService.qml @@ -28,8 +28,8 @@ QtObject { } else { _switchToBest(); } - } else if (playerIdx >= players.length) { - playerIdx = 0; + } else { + _switchToBest(); } } From 3944f99316f755ce8096c8a8c1ccb8d5ce15dfd4 Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 18 Apr 2026 15:44:58 +0200 Subject: [PATCH 2/4] add qmllint check with baseline diffing and Qt/Quickshell import paths --- flake.nix | 35 ++++++++++++++++ test/qmllint-baseline.txt | 84 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 test/qmllint-baseline.txt diff --git a/flake.nix b/flake.nix index bd753d0..6dfbd44 100644 --- a/flake.nix +++ b/flake.nix @@ -86,6 +86,7 @@ clippy rustfmt libnotify + qt6.qtdeclarative ]; }; } @@ -98,6 +99,40 @@ build = self.packages.${pkgs.stdenv.hostPlatform.system}.default; nova-stats = self.packages.${pkgs.stdenv.hostPlatform.system}.nova-stats; docs = self.packages.${pkgs.stdenv.hostPlatform.system}.docs; + qmllint = + pkgs.runCommand "nova-shell-qmllint" + { + nativeBuildInputs = [ pkgs.qt6.qtdeclarative ]; + src = self; + } + '' + cd $src + export QML_IMPORT_PATH="${pkgs.qt6.qtdeclarative}/lib/qt-6/qml:${ + quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default + }/lib/qt-6/qml" + qmllint -E \ + -I shell/modules -I shell/services -I shell/applets -I shell/lock \ + shell/shell.qml shell/modules/*.qml shell/services/*.qml \ + shell/applets/*.qml shell/lock/*.qml \ + > $TMPDIR/output.txt 2>&1 || true + + # Extract unique warning messages (file:message, without line numbers) + grep -E "^Warning:" $TMPDIR/output.txt \ + | sed 's/^Warning: //' \ + | sed 's/\([^:]*\):[0-9]*:[0-9]*: /\1: /' \ + | sort -u > $TMPDIR/current.txt + + # Diff against known baseline - new warnings = failure + if ! diff -u test/qmllint-baseline.txt $TMPDIR/current.txt > $TMPDIR/diff.txt 2>&1; then + new=$(grep '^+[^+]' $TMPDIR/diff.txt || true) + if [ -n "$new" ]; then + echo "qmllint found new warnings not in baseline:" + echo "$new" + exit 1 + fi + fi + cp $TMPDIR/output.txt $out + ''; nova-stats-clippy = (pkgs.callPackage ./nix/stats-daemon.nix { }).overrideAttrs (old: { pname = "nova-stats-clippy"; nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.clippy ]; diff --git a/test/qmllint-baseline.txt b/test/qmllint-baseline.txt new file mode 100644 index 0000000..b91f162 --- /dev/null +++ b/test/qmllint-baseline.txt @@ -0,0 +1,84 @@ +shell/applets/CpuApplet.qml: Member "_barColor" not found on type "QQuickItem" [missing-property] +shell/applets/CpuApplet.qml: Member "_f" not found on type "QQuickItem" [missing-property] +shell/applets/CpuApplet.qml: Member "_throttled" not found on type "QQuickItem" [missing-property] +shell/applets/CpuApplet.qml: Member "index" not found on type "QQuickItem" [missing-property] +shell/applets/CpuApplet.qml: Unqualified access [unqualified] +shell/applets/DiskApplet.qml: Unqualified access [unqualified] +shell/applets/MemoryApplet.qml: Unqualified access [unqualified] +shell/applets/MprisApplet.qml: Member "frac" not found on type "QQuickItem" [missing-property] +shell/applets/MprisApplet.qml: Member "spacing" not found on type "Repeater" [missing-property] +shell/applets/MprisApplet.qml: Unqualified access [unqualified] +shell/applets/TemperatureApplet.qml: Unqualified access [unqualified] +shell/applets/VolumeApplet.qml: Unqualified access [unqualified] +shell/lock/Lock.qml: Unqualified access [unqualified] +shell/lock/LockAuth.qml: Unqualified access [unqualified] +shell/lock/LockSurface.qml: Cannot combine value source and binding on property "opacity" [duplicate-property-binding] +shell/lock/LockSurface.qml: Cannot combine value source and binding on property "scale" [duplicate-property-binding] +shell/lock/LockSurface.qml: Unqualified access [unqualified] +shell/modules/BackgroundOverlay.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/BacklightModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/Bar.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/BarGroup.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BarGroup.qml: Unqualified access [unqualified] +shell/modules/BarIcon.qml: Member "accentColor" not found on type "QQuickItem" [missing-property] +shell/modules/BarIcon.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BarLabel.qml: Member "accentColor" not found on type "QQuickItem" [missing-property] +shell/modules/BarLabel.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BarSection.qml: Member "accentColor" not found on type "QQuickItem" [missing-property] +shell/modules/BarSection.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BatteryModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BluetoothMenu.qml: Unqualified access [unqualified] +shell/modules/BluetoothModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/BluetoothModule.qml: Unqualified access [unqualified] +shell/modules/CpuModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/DiskModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/Flyout.qml: Could not find property "left". [missing-property] +shell/modules/Flyout.qml: Could not find property "top". [missing-property] +shell/modules/Flyout.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/Flyout.qml: Type margins is used but it is not resolved [unresolved-type] +shell/modules/Flyout.qml: unknown grouped property scope margins. [unqualified] +shell/modules/GpuModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/HoverPanel.qml: Could not find property "top". [missing-property] +shell/modules/HoverPanel.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/HoverPanel.qml: Type margins is used but it is not resolved [unresolved-type] +shell/modules/HoverPanel.qml: unknown grouped property scope margins. [unqualified] +shell/modules/MemoryModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/MprisModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/NetworkMenu.qml: Unqualified access [unqualified] +shell/modules/NetworkModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/NotifCard.qml: Unqualified access [unqualified] +shell/modules/NotifCenter.qml: Member "_notif" not found on type "QQuickItem" [missing-property] +shell/modules/NotifCenter.qml: Member "_type" not found on type "QQuickItem" [missing-property] +shell/modules/NotifCenter.qml: Unqualified access [unqualified] +shell/modules/NotifPopup.qml: Could not find property "right". [missing-property] +shell/modules/NotifPopup.qml: Could not find property "top". [missing-property] +shell/modules/NotifPopup.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/NotifPopup.qml: Type margins is used but it is not resolved [unresolved-type] +shell/modules/NotifPopup.qml: Unqualified access [unqualified] +shell/modules/NotifPopup.qml: unknown grouped property scope margins. [unqualified] +shell/modules/NotificationsModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/NotificationsModule.qml: Unqualified access [unqualified] +shell/modules/OverviewBackdrop.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/PowerMenu.qml: Unqualified access [unqualified] +shell/modules/PowerModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/PowerModule.qml: Unqualified access [unqualified] +shell/modules/ScreenCapture.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/ScreenCorners.qml: Type PanelWindow is not creatable. [uncreatable-type] +shell/modules/ScreenCorners.qml: Unqualified access [unqualified] +shell/modules/TemperatureModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/ThemedIcon.qml: Unqualified access [unqualified] +shell/modules/TrayMenu.qml: Unqualified access [unqualified] +shell/modules/TrayModule.qml: Member "length" not found on type "UntypedObjectModel" [missing-property] +shell/modules/TrayModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/TrayModule.qml: Type "qs::dbus::dbusmenu::DBusMenuHandle" of property "menu" not found. This is likely due to a missing dependency entry or a type not being exposed declaratively. [unresolved-type] +shell/modules/TrayModule.qml: Unqualified access [unqualified] +shell/modules/VolumeModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/WindowTitleModule.qml: Unqualified access [unqualified] +shell/modules/WorkspacesModule.qml: Member "screen" not found on type "QObject" [missing-property] +shell/modules/WorkspacesModule.qml: Unqualified access [unqualified] +shell/services/BluetoothService.qml: Unqualified access [unqualified] +shell/services/LockService.qml: Type QProcess::ExitStatus of parameter exitStatus in signal called exited was not found, but is required to compile onExited. Did you add all imports and dependencies? [signal-handler-parameters] +shell/services/LockService.qml: Unqualified access [unqualified] +shell/services/MprisService.qml: Unqualified access [unqualified] +shell/services/PowerProfileService.qml: Unqualified access [unqualified] +shell/shell.qml: Unqualified access [unqualified] From 2a3fde41464d8712aee3268cfdb497d84fb20aef Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 18 Apr 2026 15:52:01 +0200 Subject: [PATCH 3/4] fix duplicate-property-binding in lock surface, update qmllint baseline --- shell/lock/LockSurface.qml | 4 ++-- test/qmllint-baseline.txt | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/shell/lock/LockSurface.qml b/shell/lock/LockSurface.qml index 1755dfd..f98d502 100644 --- a/shell/lock/LockSurface.qml +++ b/shell/lock/LockSurface.qml @@ -121,14 +121,14 @@ WlSessionLockSurface { width: 320 height: _col.height - opacity: 0 - scale: 0.9 NumberAnimation on opacity { + from: 0 to: 1 duration: 300 easing.type: Easing.OutCubic } NumberAnimation on scale { + from: 0.9 to: 1 duration: 300 easing.type: Easing.OutCubic diff --git a/test/qmllint-baseline.txt b/test/qmllint-baseline.txt index b91f162..d417ffc 100644 --- a/test/qmllint-baseline.txt +++ b/test/qmllint-baseline.txt @@ -12,8 +12,6 @@ shell/applets/TemperatureApplet.qml: Unqualified access [unqualified] shell/applets/VolumeApplet.qml: Unqualified access [unqualified] shell/lock/Lock.qml: Unqualified access [unqualified] shell/lock/LockAuth.qml: Unqualified access [unqualified] -shell/lock/LockSurface.qml: Cannot combine value source and binding on property "opacity" [duplicate-property-binding] -shell/lock/LockSurface.qml: Cannot combine value source and binding on property "scale" [duplicate-property-binding] shell/lock/LockSurface.qml: Unqualified access [unqualified] shell/modules/BackgroundOverlay.qml: Type PanelWindow is not creatable. [uncreatable-type] shell/modules/BacklightModule.qml: Member "screen" not found on type "QObject" [missing-property] From d821500db7375ebb346aaa17c80dc25214165584 Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 18 Apr 2026 16:29:53 +0200 Subject: [PATCH 4/4] update quickshell and nixpkgs inputs --- flake.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/flake.lock b/flake.lock index 185668b..7350926 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1775423009, - "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", + "lastModified": 1776169885, + "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", + "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", "type": "github" }, "original": { @@ -23,11 +23,11 @@ ] }, "locked": { - "lastModified": 1775720097, - "narHash": "sha256-p+vqkCuFfVNyQBo370wr6MebNUvz55RZiC0m8YKUhvQ=", + "lastModified": 1776066068, + "narHash": "sha256-SwKVkgEsqsp5ki9m7fqvhncb5MjvH1hlZqbn3s+x/Uk=", "ref": "refs/heads/master", - "rev": "d4c92973b53d9fa34cc110d3b974eb6bde5b3027", - "revCount": 800, + "rev": "fb08eced449e87e47321e95beeb890a63d2c67bd", + "revCount": 801, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" },