{ 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" ''; }; }; }