aboutsummaryrefslogtreecommitdiff
path: root/modules/services/mpd.nix
diff options
context:
space:
mode:
authorrembo10 <rembo10@users.noreply.github.com>2018-07-15 09:33:32 +0300
committerRobert Helgesson <robert@rycee.net>2018-07-18 22:17:26 +0200
commitd3871ed77447fdebe3673b69df7d75589378c53b (patch)
treea185071242650823eea3dc432a496cfe9912d741 /modules/services/mpd.nix
parent34db8df6d91d8c142435d0d66bad50a6b2c090f0 (diff)
mpd: add module
Diffstat (limited to '')
-rw-r--r--modules/services/mpd.nix148
1 files changed, 148 insertions, 0 deletions
diff --git a/modules/services/mpd.nix b/modules/services/mpd.nix
new file mode 100644
index 00000000000..5cc5811767c
--- /dev/null
+++ b/modules/services/mpd.nix
@@ -0,0 +1,148 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ name = "mpd";
+
+ cfg = config.services.mpd;
+
+ mpdConf = pkgs.writeText "mpd.conf" ''
+ music_directory "${cfg.musicDirectory}"
+ playlist_directory "${cfg.playlistDirectory}"
+ ${lib.optionalString (cfg.dbFile != null) ''
+ db_file "${cfg.dbFile}"
+ ''}
+ state_file "${cfg.dataDir}/state"
+ sticker_file "${cfg.dataDir}/sticker.sql"
+ log_file "syslog"
+
+ ${optionalString (cfg.network.listenAddress != "any")
+ ''bind_to_address "${cfg.network.listenAddress}"''}
+ ${optionalString (cfg.network.port != 6600)
+ ''port "${toString cfg.network.port}"''}
+
+ ${cfg.extraConfig}
+ '';
+
+in {
+
+ ###### interface
+
+ options = {
+
+ services.mpd = {
+
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable MPD, the music player daemon.
+ '';
+ };
+
+ musicDirectory = mkOption {
+ type = types.path;
+ default = "${config.home.homeDirectory}/music";
+ defaultText = "$HOME/music";
+ description = ''
+ The directory where mpd reads music from.
+ '';
+ };
+
+ playlistDirectory = mkOption {
+ type = types.path;
+ default = "${cfg.dataDir}/playlists";
+ defaultText = ''''${dataDir}/playlists'';
+ description = ''
+ The directory where mpd stores playlists.
+ '';
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Extra directives added to to the end of MPD's configuration
+ file, <filename>mpd.conf</filename>. Basic configuration
+ like file location and uid/gid is added automatically to the
+ beginning of the file. For available options see
+ <citerefentry>
+ <refentrytitle>mpd.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>.
+ '';
+ };
+
+ dataDir = mkOption {
+ type = types.path;
+ default = "${config.xdg.dataHome}/${name}";
+ defaultText = "$XDG_DATA_HOME/mpd";
+ description = ''
+ The directory where MPD stores its state, tag cache,
+ playlists etc.
+ '';
+ };
+
+ network = {
+
+ listenAddress = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ example = "any";
+ description = ''
+ The address for the daemon to listen on.
+ Use <literal>any</literal> to listen on all addresses.
+ '';
+ };
+
+ port = mkOption {
+ type = types.ints.positive;
+ default = 6600;
+ description = ''
+ The TCP port on which the the daemon will listen.
+ '';
+ };
+
+ };
+
+ dbFile = mkOption {
+ type = types.nullOr types.str;
+ default = "${cfg.dataDir}/tag_cache";
+ defaultText = ''''${dataDir}/tag_cache'';
+ description = ''
+ The path to MPD's database. If set to
+ <literal>null</literal> the parameter is omitted from the
+ configuration.
+ '';
+ };
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf cfg.enable {
+
+ systemd.user.services.mpd = {
+ Unit = {
+ After = [ "network.target" "sound.target" ];
+ Description = "Music Player Daemon";
+ };
+
+ Install = {
+ WantedBy = [ "default.target" ];
+ };
+
+ Service = {
+ Environment = "PATH=%h/.nix-profile/bin";
+ ExecStart = "${pkgs.mpd}/bin/mpd --no-daemon ${mpdConf}";
+ Type = "notify";
+ ExecStartPre = ''${pkgs.bash}/bin/bash -c "${pkgs.coreutils}/bin/mkdir -p '${cfg.dataDir}' '${cfg.playlistDirectory}'"'';
+ };
+ };
+ };
+
+}