python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / audio / mopidy.nix
blob40e8679f53d74c4840cf5f7d4fec0cdcf484b026
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 (lib.mdDoc "Mopidy, a music player daemon");
31       dataDir = mkOption {
32         default = "/var/lib/mopidy";
33         type = types.str;
34         description = lib.mdDoc ''
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 = lib.mdDoc ''
44           Mopidy extensions that should be loaded by the service.
45         '';
46       };
48       configuration = mkOption {
49         default = "";
50         type = types.lines;
51         description = lib.mdDoc ''
52           The configuration that Mopidy should use.
53         '';
54       };
56       extraConfigFiles = mkOption {
57         default = [];
58         type = types.listOf types.str;
59         description = lib.mdDoc ''
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.rules = [
74       "d '${cfg.dataDir}' - mopidy mopidy - -"
75     ];
77     systemd.services.mopidy = {
78       wantedBy = [ "multi-user.target" ];
79       after = [ "network.target" "sound.target" ];
80       description = "mopidy music player daemon";
81       serviceConfig = {
82         ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}";
83         User = "mopidy";
84       };
85     };
87     systemd.services.mopidy-scan = {
88       description = "mopidy local files scanner";
89       serviceConfig = {
90         ExecStart = "${mopidyEnv}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)} local scan";
91         User = "mopidy";
92         Type = "oneshot";
93       };
94     };
96     users.users.mopidy = {
97       inherit uid;
98       group = "mopidy";
99       extraGroups = [ "audio" ];
100       description = "Mopidy daemon user";
101       home = cfg.dataDir;
102     };
104     users.groups.mopidy.gid = gid;
106   };