diff --git a/quickshell/Services/AudioService.qml b/quickshell/Services/AudioService.qml index 9b08c24c0..be4d764f5 100644 --- a/quickshell/Services/AudioService.qml +++ b/quickshell/Services/AudioService.qml @@ -210,6 +210,10 @@ Singleton { updated[nodeName] = trimmedAlias; deviceAliases = updated; + const btDevice = BluetoothService.deviceForNodeName(nodeName); + if (btDevice) + btDevice.name = trimmedAlias; + writeWireplumberConfig(); deviceAliasChanged(nodeName, trimmedAlias); return true; @@ -226,6 +230,11 @@ Singleton { delete updated[nodeName]; deviceAliases = updated; + // Empty BlueZ alias write resets to the device's real name. + const btDevice = BluetoothService.deviceForNodeName(nodeName); + if (btDevice) + btDevice.name = ""; + writeWireplumberConfig(); deviceAliasChanged(nodeName, ""); return true; diff --git a/quickshell/Services/BluetoothService.qml b/quickshell/Services/BluetoothService.qml index f5591c46f..77f4e21e3 100644 --- a/quickshell/Services/BluetoothService.qml +++ b/quickshell/Services/BluetoothService.qml @@ -245,6 +245,14 @@ Singleton { return `bluez_card.${device.address.replace(/:/g, "_")}`; } + function deviceForNodeName(nodeName) { + const match = (nodeName || "").match(/^bluez_(?:output|input|card)\.([0-9A-Fa-f_]+)/); + if (!match) + return null; + const address = match[1].replace(/_/g, ":").toUpperCase(); + return Bluetooth.devices?.values?.find(d => (d.address || "").toUpperCase() === address) ?? null; + } + function getDevicePath(device) { if (!device || !device.address) { return "";