{ depot, pkgs, ... }: let service = { wantedBy = [ "ts3musicbot.target" ]; partOf = [ "ts3musicbot.target" ]; }; audioService = service // { after = [ "ts3musicbot-pulseaudio.service" ]; bindsTo = [ "ts3musicbot-pulseaudio.service" ]; }; in { users.users.ts3musicbot = { isNormalUser = true; group = "nogroup"; 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"; }; }