2021-09-27 22:40:27 +02:00
|
|
|
{ config, lib, pkgs, ... }:
|
2022-06-12 17:26:32 +02:00
|
|
|
|
2021-09-27 22:40:27 +02:00
|
|
|
{
|
|
|
|
options.c3d2.audioServer = {
|
|
|
|
enable = lib.mkEnableOption "Enable PulseAudio and Bluetooth sinks";
|
|
|
|
};
|
|
|
|
|
|
|
|
config = lib.mkIf config.c3d2.audioServer.enable {
|
|
|
|
sound.enable = true;
|
|
|
|
hardware.bluetooth = {
|
|
|
|
enable = lib.mkDefault true;
|
|
|
|
settings = {
|
|
|
|
Policy.AutoEnable = true;
|
2021-09-29 15:07:39 +02:00
|
|
|
General.DiscoverableTimeout = 0;
|
2021-09-27 22:40:27 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
hardware.pulseaudio = {
|
2022-09-25 19:47:58 +02:00
|
|
|
enable = !config.services.pipewire.pulse.enable;
|
2021-09-27 22:40:27 +02:00
|
|
|
systemWide = true;
|
2022-09-17 22:15:31 +02:00
|
|
|
tcp = {
|
|
|
|
enable = true;
|
|
|
|
anonymousClients.allowedIpRanges = [
|
|
|
|
"127.0.0.0/8"
|
|
|
|
"::1/128"
|
|
|
|
"fd23:42:c3d2:500::/56"
|
|
|
|
"172.22.99.0/24"
|
|
|
|
"172.20.72.0/21"
|
|
|
|
"2a00:8180:2c00:200::/56"
|
2022-09-20 01:05:22 +02:00
|
|
|
"2a0f:5382:acab:1400::/56"
|
2022-09-17 22:15:31 +02:00
|
|
|
];
|
|
|
|
};
|
2021-09-27 22:40:27 +02:00
|
|
|
zeroconf.publish.enable = true;
|
2022-09-10 02:07:32 +02:00
|
|
|
package = (pkgs.pulseaudio.override {
|
|
|
|
bluetoothSupport = true;
|
|
|
|
advancedBluetoothCodecs = true;
|
|
|
|
zeroconfSupport = true;
|
|
|
|
}).overrideAttrs (oldAttrs: {
|
|
|
|
# one test times out
|
|
|
|
doCheck = false;
|
|
|
|
});
|
2021-09-27 22:40:27 +02:00
|
|
|
};
|
2022-06-12 17:26:32 +02:00
|
|
|
|
2022-09-25 19:47:58 +02:00
|
|
|
services.pipewire = {
|
|
|
|
enable = true;
|
|
|
|
config.pipewire-pulse =
|
|
|
|
let
|
|
|
|
default-pipewire-pulse = lib.importJSON (pkgs.path + "/nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json");
|
|
|
|
in
|
|
|
|
default-pipewire-pulse // {
|
|
|
|
"context.exec" = default-pipewire-pulse."context.exec" ++ [
|
|
|
|
{
|
|
|
|
"path" = "pactl";
|
|
|
|
"args" = "load-module module-zeroconf-publish";
|
|
|
|
}
|
|
|
|
];
|
|
|
|
"pulse.properties" = {
|
|
|
|
"auth-ip-acl" = [
|
|
|
|
"127.0.0.0/8"
|
|
|
|
"::1/128"
|
|
|
|
"fd23:42:c3d2:500::/56"
|
|
|
|
"172.22.99.0/24"
|
|
|
|
"172.20.72.0/21"
|
|
|
|
"2a00:8180:2c00:200::/56"
|
|
|
|
"2a0f:5382:acab:1400::/56"
|
|
|
|
];
|
|
|
|
"server.address" = [
|
|
|
|
"unix:native"
|
|
|
|
"tcp:4713"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
pulse.enable = true;
|
|
|
|
};
|
2022-06-12 17:26:32 +02:00
|
|
|
|
2021-09-27 22:40:27 +02:00
|
|
|
security.rtkit.enable = true;
|
|
|
|
|
2022-09-28 20:29:42 +02:00
|
|
|
# tell Avahi to publish services like Pipewire/PulseAudio
|
2021-09-27 22:40:27 +02:00
|
|
|
services.avahi = {
|
|
|
|
enable = true;
|
|
|
|
publish = {
|
|
|
|
enable = true;
|
|
|
|
addresses = true;
|
|
|
|
userServices = true;
|
|
|
|
};
|
|
|
|
};
|
2022-03-17 23:41:24 +01:00
|
|
|
|
2022-09-25 19:47:58 +02:00
|
|
|
system.activationScripts.enableLingering = lib.optionalString config.services.pipewire.pulse.enable (''
|
|
|
|
rm -r /var/lib/systemd/linger
|
|
|
|
mkdir /var/lib/systemd/linger
|
|
|
|
'' + lib.optionalString config.c3d2.k-ot.enable ''
|
|
|
|
touch /var/lib/systemd/linger/k-ot
|
|
|
|
'');
|
|
|
|
|
2022-03-17 23:41:24 +01:00
|
|
|
systemd.services.bluetooth-agent = lib.mkIf config.hardware.bluetooth.enable {
|
|
|
|
description = "Allow anyone to pair via Bluetooth";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
requires = [ "bluetooth.target" ];
|
|
|
|
after = [ "bluetooth.service" ];
|
|
|
|
serviceConfig = {
|
|
|
|
Type = "simple";
|
|
|
|
ExecStart = "${pkgs.bluez-tools}/bin/bt-agent -c NoInputNoOutput";
|
|
|
|
Restart = "on-failure";
|
|
|
|
RestartSec = 60;
|
|
|
|
};
|
|
|
|
};
|
2022-09-17 22:15:13 +02:00
|
|
|
|
|
|
|
users = {
|
2022-09-28 20:29:42 +02:00
|
|
|
groups.pulse-access = { };
|
2022-09-17 22:15:13 +02:00
|
|
|
users.k-ot.extraGroups = [
|
|
|
|
"pipewire"
|
|
|
|
"pulse-access" # required for system wide pulseaudio
|
|
|
|
];
|
|
|
|
};
|
2021-09-27 22:40:27 +02:00
|
|
|
};
|
|
|
|
}
|