{ depot, pkgs, ... }:
let
  service = {
    wantedBy = [ "ts3musicbot.target" ];
    partOf = [ "ts3musicbot.target" ];
  };
  audioService = service // {
    after = [ "ts3musicbot-pulseaudio.service" ];
    bindsTo = [ "ts3musicbot-pulseaudio.service" ];
  };
in
{
  users.users.ts3musicbot = {
    createHome = true;
    home = "/var/lib/ts3musicbot";
  };

  systemd.targets.ts3musicbot = {
    wantedBy = [ "multi-user.target" ];
  };
  systemd.services.ts3musicbot-pulseaudio = service // {
    serviceConfig.ExecStart = "${pkgs.pulseaudio}/bin/pulseaudio --start --daemonize=false --load=\"module-null-sink sink_name=Loop\" --load=\"module-null-sink sink_name=The Void\" --load=\"module-native-protocol-unix\"";
    serviceConfig.User = "ts3musicbot";
  };
  systemd.services.ts3musicbot-spotifyd = audioService // {
    serviceConfig.ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${depot.ops.secrets.spotifyd}";
    serviceConfig.User = "ts3musicbot";
  };
  systemd.services.ts3musicbot-teamspeak = audioService // {
    serviceConfig.ExecStart = "${pkgs.xvfb_run}/bin/xvfb-run -d -s \"-screen 0 1280x1024x24\" ${pkgs.teamspeak_client}/bin/ts3client";
    serviceConfig.User = "ts3musicbot";
  };
}