nixos-configs/devices/homie/modules/music/default.nix

98 lines
2 KiB
Nix
Raw Normal View History

2024-09-18 15:26:17 -04:00
{
config,
lib,
pkgs,
...
}: {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
DiscoverableTimeout = 0;
Experimental = true;
KernelExperimental = true;
};
Policy.AutoEnable = "true";
};
};
# Have pulseaudio.service itself start at boot but after bluetooth
# so bluetooth accepts sound connections from the start.
systemd.user.services.pulseaudio.after = ["bluetooth.service"];
systemd.user.targets.default.wants = ["pulseaudio.service"];
# Allow pulseaudio to be managed by MPD
hardware.pulseaudio = {
enable = true;
2024-09-23 16:37:37 -04:00
zeroconf = {
discovery.enable = true;
publish.enable = true;
};
2024-09-18 15:26:17 -04:00
extraConfig = ''
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
'';
};
services = {
2024-09-19 13:36:02 -04:00
upower.enable = true;
2024-09-18 15:26:17 -04:00
mpd = {
enable = true;
network = {
listenAddress = "127.0.0.1";
port = 6600;
};
extraConfig = ''
audio_output {
type "pulse"
name "UE Boom 2"
sink "bluez_sink.88_C6_26_93_4B_77.a2dp_sink"
server "127.0.0.1"
}
'';
};
spotifyd = {
enable = true;
settings.global = let
cacheDir = "/etc/spotifyd";
in {
2024-09-23 16:37:37 -04:00
device_name = config.networking.hostName + " connect";
2024-09-18 15:26:17 -04:00
device_type = "speaker";
zeroconf_port = 33798;
2024-09-18 15:26:17 -04:00
cache_path = cacheDir;
username_cmd = "${lib.getExe pkgs.jq} -r .username ${cacheDir}/credentials.json";
autoplay = false;
backend = "pulseaudio";
bitrate = 320;
no_audio_cache = true;
volume_normalisation = false;
};
};
};
environment.etc."spotifyd/credentials.json" = {
source = config.sops.secrets.spotifyd.path;
};
2024-09-25 15:34:56 -04:00
nixpkgs.overlays = [
(final: prev: {
# FIXME: remove this if https://github.com/NixOS/nixpkgs/pull/342913 is merged
spotifyd = prev.spotifyd.override {
withMpris = false;
withKeyring = false;
};
})
];
2024-09-18 15:26:17 -04:00
}