id = "mpd" name = "Music Player Daemon" homepage = "https://www.musicpd.org" description = "Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music." # The project logo from musicpd.org. icon = "https://www.musicpd.org/logo.png" executables = ["mpd"] [dotfiles] # mpd.conf(5), the Files section: "$XDG_CONFIG_HOME/mpd/mpd.conf — User # configuration file (usually ~/.config/mpd/mpd.conf)". src/CommandLine.cxx # spells out the full search, in order: # # #ifdef _WIN32 # GetUserConfigDir() + "mpd\mpd.conf" # #else # GetUserConfigDir() + "mpd/mpd.conf" (USER_CONFIG_FILE_LOCATION_XDG) # GetHomeDir() + ".mpdconf" (USER_CONFIG_FILE_LOCATION1) # GetHomeDir() + ".mpd/mpd.conf" (USER_CONFIG_FILE_LOCATION2) # # The first is the user config directory under every platform's name for it, # which is what [configHome] stands for; the other two are plain home # dotfiles. MPD stops at the first that exists, so a machine has one of them — # a consumer skips the two that are absent. Homebrew's formula caveat points at # the same two dotfile spellings ("Please copy it ... into one of these paths: # ~/.mpd/mpd.conf, ~/.mpdconf"). paths = [ "[configHome]/mpd/mpd.conf", "~/.mpdconf", "~/.mpd/mpd.conf", ] exclude = [] # mpd.conf holds no credential. (MPD's `password` setting exists for its own # client protocol and lives in the system-wide file on the machines that use # it; nothing published documents it as a per-user setting, so it is not # claimed here.) secret = [] # Every spelling, because MPD reads whichever exists first: a rule naming only # the XDG file leaves the absolute paths below syncing from a machine that uses # a dotfile. ~/.mpdconf shares no last segment with the other two, so the # sibling check cannot pair it — this list is by hand, the way apps/pip.toml's # is. # # All seven names come from mpd.conf(5)'s own option list, and every one of # them is an absolute path into this machine's disk: music_directory ("where # music files are located"), playlist_directory ("the directory for saved # playlists"), db_file ("where the database file will be stored"), log_file, # pid_file ("file to store MPD's process ID"), state_file ("location for saving # MPD state on termination") and sticker_file. Audio outputs, replay gain, # volume normalisation and the rest of the file are preferences a user wants # carried, so they are deliberately not here. # The seven that are here are locations the user wrote out — their music, their # database, their logs — so they are kept for rebuilding this machine and # applied to no other. [[dotfiles.machine_lines]] file = [ "[configHome]/mpd/mpd.conf", "~/.mpdconf", "~/.mpd/mpd.conf", ] match = { prefix = [ "music_directory", "playlist_directory", "db_file", "log_file", "pid_file", "state_file", "sticker_file", ] } scope = "backup" [commands] format = 1 label = "Run MPD" description = "Start the Music Player Daemon with an optional config file. Output and playlist settings live in mpd.conf." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false } [[commands.source]] id = "manual" kind = "manual" url = "https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/master/doc/mpd.1.rst" revision = "master 2026-10" evidence = """ mpd [options] [CONF_FILE] --kill Kill the currently running mpd session. The pid_file parameter must be specified in the config file for this to work. --no-config Don't read from the configuration file. --no-daemon Don't detach from console. --stderr Print messages to stderr. --verbose Verbose logging. """ [[commands.field]] id = "conf_file" label = "Config file" type = "path" position = 0 path = { kind = "file", role = "input" } sources = ["manual"] [[commands.field]] id = "no_daemon" label = "Stay in foreground" type = "boolean" option = ["--no-daemon"] sources = ["manual"] [[commands.field]] id = "stderr" label = "Log to stderr" type = "boolean" option = ["--stderr"] sources = ["manual"] [[commands.field]] id = "verbose" label = "Verbose logging" type = "boolean" option = ["--verbose"] sources = ["manual"] [[commands.field]] id = "no_config" label = "Ignore config file" type = "boolean" option = ["--no-config"] sources = ["manual"] [[commands.field]] id = "kill" label = "Kill running instance" description = "Requires pid_file in the config." type = "boolean" option = ["--kill"] sources = ["manual"] [[commands.task]] id = "debug" label = "Foreground with logs" set = { no_daemon = [true], stderr = [true], verbose = [true] } fields = ["conf_file", "no_daemon", "stderr", "verbose"] required = [] [[commands.task]] id = "kill" label = "Stop running mpd" set = { kill = [true] } lock = ["kill"] fields = ["conf_file", "kill"] required = [] [[commands.group]] id = "basic" label = "Basic" fields = ["conf_file", "no_daemon", "stderr", "verbose"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["no_config", "kill"]