From 21e4ff562409747a4ce18ffd61375db8dcd8116f Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 20 Nov 2014 17:30:24 -0500 Subject: initial liquidsoap service expression --- nixos/modules/services/audio/liquidsoap.nix | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 nixos/modules/services/audio/liquidsoap.nix (limited to 'nixos/modules/services/audio') diff --git a/nixos/modules/services/audio/liquidsoap.nix b/nixos/modules/services/audio/liquidsoap.nix new file mode 100644 index 000000000000..bf67d2399ebb --- /dev/null +++ b/nixos/modules/services/audio/liquidsoap.nix @@ -0,0 +1,74 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + streams = builtins.attrNames config.services.liquidsoap.streams; + + streamService = + name: + let stream = builtins.getAttr name config.services.liquidsoap.streams; in + { inherit name; + value = { + after = [ "network-online.target" "sound.target" ]; + description = "${name} liquidsoap stream"; + wantedBy = [ "multi-user.target" ]; + path = [ pkgs.wget ]; + preStart = + '' + mkdir -p /var/log/liquidsoap + chown liquidsoap -R /var/log/liquidsoap + ''; + serviceConfig = { + PermissionsStartOnly="true"; + ExecStart = "${pkgs.liquidsoap}/bin/liquidsoap ${stream}"; + User = "liquidsoap"; + }; + }; + }; +in +{ + + ##### interface + + options = { + + services.liquidsoap.streams = mkOption { + + description = + '' + Set of Liquidsoap streams to start, + one systemd service per stream. + ''; + + default = {}; + + example = { + myStream1 = literalExample "\"/etc/liquidsoap/myStream1.liq\""; + myStream2 = literalExample "./myStream2.liq"; + myStream3 = literalExample "\"out(playlist(\"/srv/music/\"))\""; + }; + + type = types.attrsOf (types.either types.path types.str); + }; + + }; + ##### implementation + + config = mkIf (builtins.length streams != 0) { + + users.extraUsers.liquidsoap = { + uid = config.ids.uids.liquidsoap; + group = "liquidsoap"; + extraGroups = [ "audio" ]; + description = "Liquidsoap streaming user"; + home = "/var/lib/liquidsoap"; + createHome = true; + }; + + users.extraGroups.liquidsoap.gid = config.ids.gids.liquidsoap; + + systemd.services = builtins.listToAttrs ( map streamService streams ); + }; + +} -- cgit 1.4.1