vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / audio / liquidsoap.nix
blobbd35e01b60d6f4714940dcabc04545117225a5d4
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   streams = builtins.attrNames config.services.liquidsoap.streams;
8   streamService =
9     name:
10     let stream = builtins.getAttr name config.services.liquidsoap.streams; in
11     { inherit name;
12       value = {
13         after = [ "network-online.target" "sound.target" ];
14         description = "${name} liquidsoap stream";
15         wantedBy = [ "multi-user.target" ];
16         path = [ pkgs.wget ];
17         serviceConfig = {
18           ExecStart = "${pkgs.liquidsoap}/bin/liquidsoap ${stream}";
19           User = "liquidsoap";
20           LogsDirectory = "liquidsoap";
21           Restart = "always";
22         };
23       };
24     };
28   ##### interface
30   options = {
32     services.liquidsoap.streams = mkOption {
34       description = ''
35           Set of Liquidsoap streams to start,
36           one systemd service per stream.
37         '';
39       default = {};
41       example = literalExpression ''
42         {
43           myStream1 = "/etc/liquidsoap/myStream1.liq";
44           myStream2 = ./myStream2.liq;
45           myStream3 = "out(playlist(\"/srv/music/\"))";
46         }
47       '';
49       type = types.attrsOf (types.either types.path types.str);
50     };
52   };
53   ##### implementation
55   config = mkIf (builtins.length streams != 0) {
57     users.users.liquidsoap = {
58       uid = config.ids.uids.liquidsoap;
59       group = "liquidsoap";
60       extraGroups = [ "audio" ];
61       description = "Liquidsoap streaming user";
62       home = "/var/lib/liquidsoap";
63       createHome = true;
64     };
66     users.groups.liquidsoap.gid = config.ids.gids.liquidsoap;
68     systemd.services = builtins.listToAttrs ( map streamService streams );
69   };