{ name , run ? null , connectOut ? null , connectIn ? null , group ? null , initial ? null , trivmix , stdenv , makeWrapper , jack2Full , coreutils , writeScript }: let connect = (! isNull connectOut) || (! isNull connectIn); connectScript = writeScript "connect" '' #!${stdenv.shell} PATH=${jack2Full}/bin:$PATH ${optionalString (! isNull connectIn) "jack_connect ${connectIn} $1"} ${optionalString (! isNull connectOut) "jack_connect $2 ${connectOut}"} ''; inherit (stdenv.lib) optionalString; in { out = { wantedBy = [ "sound.target" ]; requires = [ "jack.service" ]; before = [ "mpd.service" ]; serviceConfig = { Type = "simple"; ExecStart = ''${trivmix}/bin/trivmix --client ${name} \ ${optionalString connect "--run ${connectScript}"} \ ${optionalString (! isNull run) "--run ${run}"} \ ${optionalString (! isNull initial) "--level ${initial}"} \ /dev/shm/mix/${name}/level \ ${optionalString (! isNull group) "/dev/shm/mix/${group}/level"} ''; User = "jack"; Group = "audio"; Nice = "-10"; LimitRTPRIO = "95:95"; LimitMEMLOCK = "infinity"; }; }; }