diff --git a/flake.lock b/flake.lock index 3c041b414b..a2f9545fe0 100644 --- a/flake.lock +++ b/flake.lock @@ -274,11 +274,11 @@ ] }, "locked": { - "lastModified": 1775822544, - "narHash": "sha256-yxh8N8kPWNVPl4x2C72yR6nTDT8qBMZvCCB3twNEiJI=", + "lastModified": 1777273350, + "narHash": "sha256-IXASEM09wj7nEA83GvCfBve8cmDYxsAy/ZExgvhgv78=", "owner": "tiiuae", "repo": "ghafpkgs", - "rev": "62beb072731b0e9a356766b21abcee24562fd4a0", + "rev": "6bb8a72eba02aef0b6514ba9d6ac3e568a661e04", "type": "github" }, "original": { diff --git a/modules/common/services/audio/client.nix b/modules/common/services/audio/client.nix index 13e37578ca..55c36874d6 100644 --- a/modules/common/services/audio/client.nix +++ b/modules/common/services/audio/client.nix @@ -67,6 +67,13 @@ in PULSE_SERVER = "${cfg.client.remotePulseServerAddress}"; }; }; + services.pipewire.wireplumber.extraConfig."10-disable-bluez" = { + "wireplumber.profiles" = { + main = { + "monitor.bluez" = "disabled"; + }; + }; + }; } # givc socket proxy is declared in modules/givc/guivm.nix (lib.mkIf (cfg.client.pipewireControl.enable && useGivc) { diff --git a/modules/desktop/graphics/cosmic/default.nix b/modules/desktop/graphics/cosmic/default.nix index bc2b65588a..3685409c7f 100644 --- a/modules/desktop/graphics/cosmic/default.nix +++ b/modules/desktop/graphics/cosmic/default.nix @@ -419,7 +419,6 @@ in Type = "simple"; Restart = "on-failure"; RestartSec = "5"; - Environment = mkIf graphicsProfileCfg.bluetooth.applet.useDbusProxy "DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock"; }; partOf = [ "cosmic-session.target" ]; wantedBy = [ "cosmic-session.target" ]; @@ -427,9 +426,6 @@ in blueman-manager = { inherit (graphicsProfileCfg.bluetooth.applet) enable; - serviceConfig = { - Environment = mkIf graphicsProfileCfg.bluetooth.applet.useDbusProxy "DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock"; - }; }; }; diff --git a/modules/givc/guivm.nix b/modules/givc/guivm.nix index 4a4199899f..ced187503a 100644 --- a/modules/givc/guivm.nix +++ b/modules/givc/guivm.nix @@ -128,7 +128,6 @@ in ]; Environment = [ "DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbusproxy_net.sock" - "NM_SECRET_AGENT_XML=${pkgs.networkmanager}/share/dbus-1/interfaces/org.freedesktop.NetworkManager.SecretAgent.xml" ]; ExecStart = [ '' @@ -137,15 +136,49 @@ in --source-object-path /org/freedesktop/NetworkManager \ --proxy-bus-name org.freedesktop.NetworkManager \ --source-bus-type session \ - --target-bus-type system + --target-bus-type system \ + --log-level error '' ]; }; startLimitIntervalSec = 0; wantedBy = [ "multi-user.target" ]; }; - - services.dbus.packages = [ pkgs.networkmanager ]; + systemd.services.dbus-proxy-bluetooth = { + description = "DBus proxy for Bluetooth ${guivmName}"; + # Wait for GIVC to create the socket before starting + after = [ "givc-${guivmName}.service" ]; + requires = [ "givc-${guivmName}.service" ]; + serviceConfig = { + Type = "simple"; + Restart = "always"; + RestartSec = "1s"; + # Wait up to 30 seconds for the socket to appear + ExecStartPre = [ + "${pkgs.coreutils}/bin/timeout 30 ${pkgs.bash}/bin/bash -c 'until [ -S /tmp/dbusproxy_snd.sock ]; do sleep 0.5; done'" + ]; + Environment = [ + "DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock" + ]; + ExecStart = [ + '' + ${lib.getExe pkgs.dbus-proxy} \ + --source-bus-name org.bluez \ + --source-object-path /org/bluez \ + --proxy-bus-name org.bluez \ + --source-bus-type session \ + --target-bus-type system \ + --log-level error + '' + ]; + }; + startLimitIntervalSec = 0; + wantedBy = [ "multi-user.target" ]; + }; + services.dbus.packages = [ + pkgs.bluez + pkgs.networkmanager + ]; ghaf.security.audit.extraRules = [ "-w /etc/givc/ -p wa -k givc-${hostName}" "-w /run/givc/ -p wa -k givc-${hostName}" diff --git a/modules/reference/desktop/applications.nix b/modules/reference/desktop/applications.nix index d2f41f55ce..75d60bf690 100644 --- a/modules/reference/desktop/applications.nix +++ b/modules/reference/desktop/applications.nix @@ -40,7 +40,6 @@ in description = "Manage Bluetooth Devices & Settings"; icon = "bluetooth-48"; exec = "${pkgs.writeShellScriptBin "bluetooth-settings" '' - DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock \ PULSE_SERVER=audio-vm:${toString config.ghaf.services.audio.server.pulseaudioTcpControlPort} \ ${pkgs.blueman}/bin/blueman-manager ''}/bin/bluetooth-settings"; diff --git a/overlays/custom-packages/blueman-applet/0001-blueman-applet-switch-register-agent-sync-call.patch b/overlays/custom-packages/blueman-applet/0001-blueman-applet-switch-register-agent-sync-call.patch new file mode 100644 index 0000000000..d5ebe4a64c --- /dev/null +++ b/overlays/custom-packages/blueman-applet/0001-blueman-applet-switch-register-agent-sync-call.patch @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2022-2026 TII (SSRC) and the Ghaf contributors +# SPDX-License-Identifier: Apache-2.0 +# +# This patch should be removed once the fix is merged upstream. See +# https://github.com/blueman-project/blueman/pull/3213/commits +# +From a063be21a67068eb09e6f5b14df2344eef2c756b Mon Sep 17 00:00:00 2001 +From: jkuro-tii +Date: Wed, 15 Apr 2026 10:44:36 +0400 +Subject: [PATCH] blueman: fix agent registering + +Signed-off-by: jkuro-tii +--- + blueman/bluez/AgentManager.py | 2 +- + blueman/bluez/Base.py | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/blueman/bluez/AgentManager.py b/blueman/bluez/AgentManager.py +index 9f266e1b..1fe249f1 100644 +--- a/blueman/bluez/AgentManager.py ++++ b/blueman/bluez/AgentManager.py +@@ -13,7 +13,7 @@ class AgentManager(Base): + + def register_agent(self, agent_path: str, capability: str = "", default: bool = False) -> None: + param = GLib.Variant('(os)', (agent_path, capability)) +- self._call('RegisterAgent', param) ++ self._call_sync('RegisterAgent', param) + if default: + default_param = GLib.Variant('(o)', (agent_path,)) + self._call('RequestDefaultAgent', default_param) +diff --git a/blueman/bluez/Base.py b/blueman/bluez/Base.py +index af645889..ab4ec9f6 100644 +--- a/blueman/bluez/Base.py ++++ b/blueman/bluez/Base.py +@@ -94,6 +94,9 @@ class Base(GObject.Object, metaclass=BaseMeta): + + self.__proxy.call(method, param, Gio.DBusCallFlags.NONE, GLib.MAXINT, None, + callback, reply_handler, error_handler) ++ ++ def _call_sync(self, method: str, param: GLib.Variant | None = None) -> GLib.Variant | None: ++ return self.__proxy.call_sync(method, param, Gio.DBusCallFlags.NONE, -1, None) + + def get(self, name: str) -> Any: + try: +-- +2.53.0 + diff --git a/overlays/custom-packages/blueman-applet/default.nix b/overlays/custom-packages/blueman-applet/default.nix new file mode 100644 index 0000000000..6c23a302bd --- /dev/null +++ b/overlays/custom-packages/blueman-applet/default.nix @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: 2022-2026 TII (SSRC) and the Ghaf contributors +# SPDX-License-Identifier: Apache-2.0 +# +{ prev }: +prev.blueman.overrideAttrs { + patches = [ ./0001-blueman-applet-switch-register-agent-sync-call.patch ]; +} diff --git a/overlays/custom-packages/cosmic/cosmic-applets/0003-dont-use-secret-agent.patch b/overlays/custom-packages/cosmic/cosmic-applets/0003-dont-use-secret-agent.patch deleted file mode 100644 index 5b7463d17e..0000000000 --- a/overlays/custom-packages/cosmic/cosmic-applets/0003-dont-use-secret-agent.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0f403eb7bc040bd6f115cf7367c197e447f84f19 Mon Sep 17 00:00:00 2001 -From: Kajus Naujokaitis -Date: Fri, 13 Mar 2026 11:14:59 +0200 -Subject: [PATCH] dont use secret agent - -Signed-off-by: Kajus Naujokaitis ---- - cosmic-applet-network/src/app.rs | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs -index 0c15d2bd..2e808ee4 100644 ---- a/cosmic-applet-network/src/app.rs -+++ b/cosmic-applet-network/src/app.rs -@@ -857,7 +857,7 @@ impl cosmic::Application for CosmicNetworkApplet { - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, -- self.secret_tx.clone(), -+ None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { -@@ -879,7 +879,7 @@ impl cosmic::Application for CosmicNetworkApplet { - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, -- self.secret_tx.clone(), -+ None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { -@@ -1050,7 +1050,7 @@ impl cosmic::Application for CosmicNetworkApplet { - if let Err(err) = tx.unbounded_send(network_manager::Request::SelectAccessPoint( - ssid, - network_type, -- self.secret_tx.clone(), -+ None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) { - if err.is_disconnected() { --- -2.53.0 - diff --git a/overlays/custom-packages/cosmic/cosmic-applets/default.nix b/overlays/custom-packages/cosmic/cosmic-applets/default.nix index 567d4d8a35..cbd2030f34 100644 --- a/overlays/custom-packages/cosmic/cosmic-applets/default.nix +++ b/overlays/custom-packages/cosmic/cosmic-applets/default.nix @@ -10,10 +10,8 @@ prev.cosmic-applets.overrideAttrs (oldAttrs: { # audio and bluetooth patches should be removed when dbus-proxy allows ./0001-bluetooth-applet-hide-bluetooth-settings-button.patch ./0002-network-applet-hide-airplane-mode-toggle.patch - ./0003-dont-use-secret-agent.patch ]; postInstall = oldAttrs.postInstall or "" + '' sed -i 's|^Exec=.*|Exec=env PIPEWIRE_RUNTIME_DIR=/tmp cosmic-applet-audio|' $out/share/applications/com.system76.CosmicAppletAudio.desktop - sed -i 's|^Exec=.*|Exec=env DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock cosmic-applet-bluetooth|' $out/share/applications/com.system76.CosmicAppletBluetooth.desktop ''; }) diff --git a/overlays/custom-packages/cosmic/cosmic-initial-setup/0002-dont-use-secret-agent.patch b/overlays/custom-packages/cosmic/cosmic-initial-setup/0002-dont-use-secret-agent.patch deleted file mode 100644 index a55fd77d62..0000000000 --- a/overlays/custom-packages/cosmic/cosmic-initial-setup/0002-dont-use-secret-agent.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 3113a1d2904556741792cf553afa44b501d5b4fb Mon Sep 17 00:00:00 2001 -From: Kajus Naujokaitis -Date: Fri, 13 Mar 2026 11:40:27 +0200 -Subject: [PATCH] dont use secret agent - -Signed-off-by: Kajus Naujokaitis ---- - src/page/wifi.rs | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/page/wifi.rs b/src/page/wifi.rs -index 8adc150..449dd38 100644 ---- a/src/page/wifi.rs -+++ b/src/page/wifi.rs -@@ -522,7 +522,7 @@ impl Page { - .unbounded_send(network_manager::Request::SelectAccessPoint( - ssid, - ap.network_type, -- self.secret_tx.clone(), -+ None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )); - } -@@ -595,7 +595,7 @@ impl Page { - ssid: ssid.to_string(), - identity, - password, -- secret_tx, -+ secret_tx: None, - interface, - }); - } --- -2.53.0 - diff --git a/overlays/custom-packages/cosmic/cosmic-initial-setup/default.nix b/overlays/custom-packages/cosmic/cosmic-initial-setup/default.nix index a9d7e2d5b6..804bf8a066 100644 --- a/overlays/custom-packages/cosmic/cosmic-initial-setup/default.nix +++ b/overlays/custom-packages/cosmic/cosmic-initial-setup/default.nix @@ -4,7 +4,6 @@ prev.cosmic-initial-setup.overrideAttrs (oldAttrs: { patches = oldAttrs.patches ++ [ ./0001-Preselect-Ghaf-themes.patch - ./0002-dont-use-secret-agent.patch ./0003-Hide-language-settings-show-location-settings.patch ]; # Don't install default cosmic themes and layouts diff --git a/overlays/custom-packages/cosmic/cosmic-settings/0001-dont-use-secret-agent.patch b/overlays/custom-packages/cosmic/cosmic-settings/0001-dont-use-secret-agent.patch deleted file mode 100644 index aa55a94858..0000000000 --- a/overlays/custom-packages/cosmic/cosmic-settings/0001-dont-use-secret-agent.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d30154c1e61ec1f91df484815cc802a476fdcec8 Mon Sep 17 00:00:00 2001 -From: Kajus Naujokaitis -Date: Fri, 13 Mar 2026 11:22:06 +0200 -Subject: [PATCH] dont use secret agent - -Signed-off-by: Kajus Naujokaitis ---- - cosmic-settings/src/pages/networking/wifi.rs | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/cosmic-settings/src/pages/networking/wifi.rs b/cosmic-settings/src/pages/networking/wifi.rs -index 6239e9b..1ccea0d 100644 ---- a/cosmic-settings/src/pages/networking/wifi.rs -+++ b/cosmic-settings/src/pages/networking/wifi.rs -@@ -491,7 +491,7 @@ impl Page { - .unbounded_send(network_manager::Request::SelectAccessPoint( - ssid, - ap.network_type, -- self.secret_tx.clone(), -+ None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )); - } -@@ -561,7 +561,7 @@ impl Page { - ssid: ssid.to_string(), - identity, - password, -- secret_tx, -+ secret_tx: None, - interface, - }); - } --- -2.53.0 - diff --git a/overlays/custom-packages/cosmic/cosmic-settings/default.nix b/overlays/custom-packages/cosmic/cosmic-settings/default.nix index 362d8f22d4..4c489aa10b 100644 --- a/overlays/custom-packages/cosmic/cosmic-settings/default.nix +++ b/overlays/custom-packages/cosmic/cosmic-settings/default.nix @@ -4,9 +4,6 @@ # Ref: https://github.com/pop-os/cosmic-settings/blob/master/cosmic-settings/Cargo.toml { prev }: (prev.cosmic-settings.overrideAttrs (oldAttrs: { - patches = oldAttrs.patches ++ [ - ./0001-dont-use-secret-agent.patch - ]; cargoBuildNoDefaultFeatures = true; cargoBuildFeatures = [ "a11y" diff --git a/overlays/custom-packages/default.nix b/overlays/custom-packages/default.nix index a5de33fc28..0fb1e550da 100644 --- a/overlays/custom-packages/default.nix +++ b/overlays/custom-packages/default.nix @@ -6,6 +6,7 @@ # # keep-sorted start skip_lines=1 (_final: prev: { + blueman = import ./blueman-applet { inherit prev; }; cosmic-applets = import ./cosmic/cosmic-applets { inherit prev; }; cosmic-comp = import ./cosmic/cosmic-comp { inherit prev; }; cosmic-greeter = import ./cosmic/cosmic-greeter { inherit prev; }; diff --git a/targets/vm/flake-module.nix b/targets/vm/flake-module.nix index 6aec5b2fab..f04bafa728 100644 --- a/targets/vm/flake-module.nix +++ b/targets/vm/flake-module.nix @@ -178,7 +178,6 @@ let description = "Manage Bluetooth Devices & Settings"; icon = "bluetooth-48"; exec = "${pkgs.writeShellScriptBin "bluetooth-settings" '' - DBUS_SYSTEM_BUS_ADDRESS=unix:path=/tmp/dbusproxy_snd.sock \ PULSE_SERVER=audio-vm:${toString config.ghaf.services.audio.server.pulseaudioTcpControlPort} \ ${pkgs.blueman}/bin/blueman-manager ''}/bin/bluetooth-settings";