+##
+## Run WirePlumber as a system-wide daemon launched by the systemd system
+## instance. When false (default), WirePlumber runs as a per-user session
+## service launched by systemd --user.
+## Define wireplumber_system_service at build time to enable system-service mode.
+##
+##
+
+attribute_role wireplumber_roles;
+
+#
+# wireplumber_t — the WirePlumber session manager daemon.
+#
+type wireplumber_t;
+type wireplumber_exec_t;
+ifdef(`wireplumber_system_service',`
+ init_daemon_domain(wireplumber_t, wireplumber_exec_t)
+',`
+ userdom_user_application_domain(wireplumber_t, wireplumber_exec_t)
+ role wireplumber_roles types wireplumber_t;
+')
+
+type wireplumber_home_t;
+userdom_user_home_content(wireplumber_home_t)
+
+type wireplumber_var_lib_t;
+files_type(wireplumber_var_lib_t)
+
+type wireplumber_runtime_t;
+files_runtime_file(wireplumber_runtime_t)
+
+type wireplumber_tmpfs_t;
+userdom_user_tmpfs_file(wireplumber_tmpfs_t)
+
+########################################
+#
+# wireplumber_t — common policy (both system and user instances)
+#
+
+allow wireplumber_t self:capability sys_nice;
+allow wireplumber_t self:process { getsched setsched signal signull };
+allow wireplumber_t self:fifo_file rw_fifo_file_perms;
+allow wireplumber_t self:unix_stream_socket { create_stream_socket_perms connectto };
+allow wireplumber_t self:unix_dgram_socket create_socket_perms;
+
+# Bluetooth socket for BlueZ audio routing (A2DP/HFP profile management).
+allow wireplumber_t self:bluetooth_socket create_socket_perms;
+
+# netlink kobject uevent socket for udev device monitoring.
+allow wireplumber_t self:netlink_kobject_uevent_socket create_socket_perms;
+
+# Shared memory (memfd) files for zero-copy audio buffer sharing with PipeWire.
+mmap_manage_files_pattern(wireplumber_t, wireplumber_tmpfs_t, wireplumber_tmpfs_t)
+fs_tmpfs_filetrans(wireplumber_t, wireplumber_tmpfs_t, file)
+
+# NSS/name-service lookups to resolve user names for session ownership checks.
+auth_use_nsswitch(wireplumber_t)
+
+# Filesystem getattr for device/mount enumeration.
+dev_getattr_fs(wireplumber_t)
+
+# Suppress noisy denials when WirePlumber probes video devices it does not use.
+dev_dontaudit_getattr_video_dev(wireplumber_t)
+
+# Device enumeration via sysfs.
+dev_read_sysfs(wireplumber_t)
+
+# /dev/snd inotify watch for ALSA device add/remove events.
+dev_watch_dev_dirs(wireplumber_t)
+
+# Suppress harmless /proc/