{ config, lib, pkgs, ... }: { services.mpd = { enable = true; network.listenAddress = "any"; musicDirectory = "/media/syncthing/music-library"; playlistDirectory = "/media/syncthing/music-library/playlists"; }; users.groups."syncthing".members = [ "mpd" ]; sound.enable = true; networking.firewall.allowedTCPPorts = [ 6680 # mopidy 6600 # mpd 1234 # zeroconf ]; users.users."spotifyd" = { isSystemUser = true; group = "spotifyd"; }; users.groups.spotifyd = { }; sops.secrets.spotify_pass.owner = "spotifyd"; sops.secrets.spotify_user.owner = "spotifyd"; services.spotifyd.enable = true; services.spotifyd.settings = { global = { username_cmd = "cat ${config.sops.secrets.spotify_user.path}"; password_cmd = "cat ${config.sops.secrets.spotify_pass.path}"; backend = "alsa"; # use portaudio for macOS [homebrew] # The alsa mixer used by `spotifyd`. mixer = "PCM"; # A script that gets evaluated in the user's shell when the song changes [aliases: onevent] on-song-change-hook = "${pkgs.mpc_cli}/bin/mpc --host localhost --port 6600 stop"; # The volume controller. Each one behaves different to # volume increases. For possible values, run # `spotifyd --help`. volume_controller = "alsa"; # The name that gets displayed under the connect tab on # official clients. Spaces are not allowed! device_name = "DJane"; # The audio bitrate. 96, 160 or 320 kbit/s bitrate = 320; # If set to true, audio data does NOT get cached. no_audio_cache = true; # Volume on startup between 0 and 100 # NOTE: This variable's type will change in v0.4, to a number (instead of string) initial_volume = "90"; # If set to true, enables volume normalisation between songs. volume_normalisation = false; # The normalisation pregain that is applied for each song. # normalisation_pregain = -10 # The port `spotifyd` uses to announce its service over the network. zeroconf_port = 1234; # The displayed device type in Spotify clients. # Can be unknown, computer, tablet, smartphone, speaker, t_v, # a_v_r (Audio/Video Receiver), s_t_b (Set-Top Box), and audio_dongle. device_type = "computer"; }; }; }