summary refs log tree commit diff
path: root/nixos/modules/services/audio
diff options
context:
space:
mode:
authorRickard Nilsson <rickynils@gmail.com>2014-07-28 19:52:32 +0200
committerRickard Nilsson <rickynils@gmail.com>2014-07-28 19:52:32 +0200
commit212f476c97e27292ac5337e29d24836b0bcd9303 (patch)
treefbbf76ba5c3e2e2fc09cda9eaa99b297d3f3621b /nixos/modules/services/audio
parentccc22bb6620020e315685d6f5ab627c8ffe3f4ce (diff)
downloadnixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar.gz
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar.bz2
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar.lz
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar.xz
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.tar.zst
nixlib-212f476c97e27292ac5337e29d24836b0bcd9303.zip
Add NixOS module for Mopidy, a music player daemon
Diffstat (limited to 'nixos/modules/services/audio')
-rw-r--r--nixos/modules/services/audio/mopidy.nix107
1 files changed, 107 insertions, 0 deletions
diff --git a/nixos/modules/services/audio/mopidy.nix b/nixos/modules/services/audio/mopidy.nix
new file mode 100644
index 000000000000..df3837d47f29
--- /dev/null
+++ b/nixos/modules/services/audio/mopidy.nix
@@ -0,0 +1,107 @@
+{ config, lib, pkgs, ... }:
+
+with pkgs;
+with lib;
+
+let
+
+  uid = config.ids.uids.mopidy;
+  gid = config.ids.gids.mopidy;
+  cfg = config.services.mopidy;
+
+  mopidyConf = writeText "mopidy.conf" cfg.configuration;
+
+  mopidyLauncher = stdenv.mkDerivation {
+    name = "mopidy-launcher";
+    phases = [ "installPhase" ];
+    buildInputs = [ makeWrapper python ];
+    installPhase = ''
+      mkdir -p $out/bin
+      ln -s ${mopidy}/bin/mopidy $out/bin/mopidy
+      wrapProgram $out/bin/mopidy \
+        --prefix PYTHONPATH : \
+        "${concatStringsSep ":" (map (p: "$(toPythonPath ${p})") cfg.extensionPackages)}"
+    '';
+  };
+
+in {
+
+  options = {
+
+    services.mopidy = {
+
+      enable = mkOption {
+        default = false;
+        type = types.bool;
+        description = ''
+          Whether to enable Mopidy, a music player daemon.
+        '';
+      };
+
+      dataDir = mkOption {
+        default = "/var/lib/mopidy";
+        type = types.str;
+        description = ''
+          The directory where Mopidy stores its state.
+        '';
+      };
+
+      extensionPackages = mkOption {
+        default = [];
+        type = types.listOf types.package;
+        example = [ mopidy-spotify ];
+        description = ''
+          Mopidy extensions that should be loaded by the service.
+        '';
+      };
+
+      configuration = mkOption {
+        type = types.lines;
+        description = ''
+          The configuration that Mopidy should use.
+        '';
+      };
+
+      extraConfigFiles = mkOption {
+        default = [];
+        type = types.listOf types.str;
+        description = ''
+          Extra config file read by Mopidy when the service starts.
+          Later files in the list overrides earlier configuration.
+        '';
+      };
+
+    };
+
+  };
+
+
+  ###### implementation
+
+  config = mkIf cfg.enable {
+
+    systemd.services.mopidy = {
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" "sound.target" ];
+      description = "mopidy music player daemon";
+      preStart = "mkdir -p ${cfg.dataDir} && chown -R mopidy:mopidy  ${cfg.dataDir}";
+      serviceConfig = {
+        ExecStart = "${mopidyLauncher}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}";
+        User = "mopidy";
+        PermissionsStartOnly = true;
+      };
+    };
+
+    users.extraUsers.mopidy = {
+      inherit uid;
+      group = "mopidy";
+      extraGroups = [ "audio" ];
+      description = "Mopidy daemon user";
+      home = "${cfg.dataDir}";
+    };
+
+    users.extraGroups.mopidy.gid = gid;
+
+  };
+
+}