vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / audio / mopidy.nix
blob198ca74359dc18067e66152ed5d74582cf995e4d
1 { config, lib, pkgs, ... }:
3 with pkgs;
4 with lib;
6 let
7   uid = config.ids.uids.mopidy;
8   gid = config.ids.gids.mopidy;
9   cfg = config.services.mopidy;
11   mopidyConf = writeText "mopidy.conf" cfg.configuration;
13   mopidyEnv = buildEnv {
14     name = "mopidy-with-extensions-${mopidy.version}";
15     paths = closePropagation cfg.extensionPackages;
16     pathsToLink = [ "/${mopidyPackages.python.sitePackages}" ];
17     nativeBuildInputs = [ makeWrapper ];
18     postBuild = ''
19       makeWrapper ${mopidy}/bin/mopidy $out/bin/mopidy \
20         --prefix PYTHONPATH : $out/${mopidyPackages.python.sitePackages}
21     '';
22   };
23 in {
25   options = {
27     services.mopidy = {
29       enable = mkEnableOption "Mopidy, a music player daemon";
31       dataDir = mkOption {
32         default = "/var/lib/mopidy";
33         type = types.str;
34         description = ''
35           The directory where Mopidy stores its state.
36         '';
37       };
39       extensionPackages = mkOption {
40         default = [];
41         type = types.listOf types.package;
42         example = literalExpression "[ pkgs.mopidy-spotify ]";
43         description = ''
44           Mopidy extensions that should be loaded by the service.
45         '';
46       };
48       configuration = mkOption {
49         default = "";
50         type = types.lines;
51         description = ''
52           The configuration that Mopidy should use.
53         '';
54       };
56       extraConfigFiles = mkOption {
57         default = [];
58         type = types.listOf types.str;
59         description = ''
60           Extra config file read by Mopidy when the service starts.
61           Later files in the list overrides earlier configuration.
62         '';
63       };
65     };
67   };
69   ###### implementation
71   config = mkIf cfg.enable {
73     systemd.tmpfiles.settings."10-mopidy".${cfg.dataDir}.d = {
74       user = "mopidy";
75       group = "mopidy";
76     };
78     systemd.services.mopidy = {
79       wantedBy = [ "multi-user.target" ];
80       after = [ "network-online.target" "sound.target" ];
81       wants = [ "network-online.target" ];
82       description = "mopidy music player daemon";
83       serviceConfig = {
84         ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}";
85         User = "mopidy";
86       };
87     };
89     systemd.services.mopidy-scan = {
90       description = "mopidy local files scanner";
91       serviceConfig = {
92         ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)} local scan";
93         User = "mopidy";
94         Type = "oneshot";
95       };
96     };
98     users.users.mopidy = {
99       inherit uid;
100       group = "mopidy";
101       extraGroups = [ "audio" ];
102       description = "Mopidy daemon user";
103       home = cfg.dataDir;
104     };
106     users.groups.mopidy.gid = gid;
108   };