about summary refs log tree commit diff stats
path: root/modules/by-name/mp/mpd/module.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/by-name/mp/mpd/module.nix86
1 files changed, 86 insertions, 0 deletions
diff --git a/modules/by-name/mp/mpd/module.nix b/modules/by-name/mp/mpd/module.nix
new file mode 100644
index 00000000..6f045f9f
--- /dev/null
+++ b/modules/by-name/mp/mpd/module.nix
@@ -0,0 +1,86 @@
+{
+  config,
+  pkgs,
+  lib,
+  ...
+}: let
+  cfg = config.soispha.services.mpd;
+in {
+  imports = [
+    ./mpc.nix
+  ];
+
+  options.soispha.services.mpd = {
+    enable = lib.mkEnableOption "mpd";
+
+    directories = {
+      runtime = lib.mkOption {
+        type = lib.types.path;
+        description = "The directory to put the sockets and such things.";
+      };
+      playlists = lib.mkOption {
+        type = lib.types.path;
+        description = "The directory to put the playlists.";
+        default = "${cfg.directories.data}/playlists";
+      };
+      data = lib.mkOption {
+        type = lib.types.path;
+        description = "The directory to put general data.";
+      };
+      music = lib.mkOption {
+        type = lib.types.path;
+        description = ''
+          The directory to search for music files.
+
+          # Info
+          This should be the same value as [`config.home-manager.users.soispha.beets.settings.directory`], if you use beets.
+        '';
+      };
+    };
+  };
+
+  config.home-manager.users.soispha = let
+    socketPath = "${cfg.directories.runtime}/socket";
+  in
+    lib.mkIf cfg.enable {
+      home.sessionVariables = {
+        MPD_HOST = socketPath;
+      };
+
+      systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce ''
+        ${pkgs.coreutils}/bin/mkdir --parents "${cfg.directories.data}" "${cfg.directories.playlists}" "${cfg.directories.runtime}"
+      '';
+
+      services.mpd = {
+        enable = true;
+        network = {
+          listenAddress = socketPath;
+        };
+        dataDir = cfg.directories.data;
+        playlistDirectory = cfg.directories.playlists;
+        musicDirectory = cfg.directories.music;
+
+        extraConfig = ''
+          metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment"
+          # Updated by the beets `mpdupdate` plugin
+          auto_update "no"
+
+          audio_output {
+            type "pipewire"
+            name "pipewire"
+          }
+
+          replaygain "track"
+          replaygain_limit "yes"
+
+          #database {
+          #       plugin "simple"
+          #       path "~/.local/share/mpd/db
+          #       cache_directory "~/.local/share/mpd/cache"
+          #}
+
+          filesystem_charset		"UTF-8"
+        '';
+      };
+    };
+}