{ 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";

    };
  };
}