From a4b85b9601be68c66d3bf33bf05c1ef1c0032526 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sun, 17 Nov 2024 10:29:06 +0100 Subject: refactor(legacy/conf/mpd): Move to a unified `mpd` by-name module --- flake/nixosConfigurations/common.nix | 15 + modules/by-name/mp/mpd/module.nix | 86 +++++ modules/by-name/mp/mpd/mpc.nix | 37 +++ modules/by-name/mp/mpd/mpdconf.example | 418 +++++++++++++++++++++++++ modules/home.legacy/conf/default.nix | 1 - modules/home.legacy/conf/mpd/default.nix | 50 --- modules/home.legacy/conf/mpd/mpdconf.example | 418 ------------------------- modules/home.legacy/pkgs/default.nix | 15 - pkgs/by-name/mp/mpc-beetrm/mpc-beetrm.sh | 11 - pkgs/by-name/mp/mpc-beetrm/package.nix | 16 - pkgs/by-name/mp/mpc-lyrics/mpc-lyrics.sh | 11 - pkgs/by-name/mp/mpc-lyrics/package.nix | 27 -- pkgs/by-name/mp/mpc-searchadd/mpc-searchadd.sh | 14 - pkgs/by-name/mp/mpc-searchadd/package.nix | 16 - pkgs/by-name/mp/mpp-beetrm/mpp-beetrm.sh | 11 + pkgs/by-name/mp/mpp-beetrm/package.nix | 16 + pkgs/by-name/mp/mpp-lyrics/mpp-lyrics.sh | 11 + pkgs/by-name/mp/mpp-lyrics/package.nix | 27 ++ pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh | 14 + pkgs/by-name/mp/mpp-searchadd/package.nix | 16 + pkgs/by-name/mp/mpp/mpp.sh | 6 +- 21 files changed, 654 insertions(+), 582 deletions(-) create mode 100644 modules/by-name/mp/mpd/module.nix create mode 100644 modules/by-name/mp/mpd/mpc.nix create mode 100644 modules/by-name/mp/mpd/mpdconf.example delete mode 100644 modules/home.legacy/conf/mpd/default.nix delete mode 100644 modules/home.legacy/conf/mpd/mpdconf.example delete mode 100755 pkgs/by-name/mp/mpc-beetrm/mpc-beetrm.sh delete mode 100644 pkgs/by-name/mp/mpc-beetrm/package.nix delete mode 100755 pkgs/by-name/mp/mpc-lyrics/mpc-lyrics.sh delete mode 100644 pkgs/by-name/mp/mpc-lyrics/package.nix delete mode 100755 pkgs/by-name/mp/mpc-searchadd/mpc-searchadd.sh delete mode 100644 pkgs/by-name/mp/mpc-searchadd/package.nix create mode 100755 pkgs/by-name/mp/mpp-beetrm/mpp-beetrm.sh create mode 100644 pkgs/by-name/mp/mpp-beetrm/package.nix create mode 100755 pkgs/by-name/mp/mpp-lyrics/mpp-lyrics.sh create mode 100644 pkgs/by-name/mp/mpp-lyrics/package.nix create mode 100755 pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh create mode 100644 pkgs/by-name/mp/mpp-searchadd/package.nix diff --git a/flake/nixosConfigurations/common.nix b/flake/nixosConfigurations/common.nix index d4660ef7..f2df9957 100644 --- a/flake/nixosConfigurations/common.nix +++ b/flake/nixosConfigurations/common.nix @@ -35,6 +35,21 @@ user = "soispha"; }; fwupd.enable = true; + mpd = { + enable = true; + directories = let + data = "${config.home-manager.users.soispha.xdg.dataHome}/mpd"; + in { + inherit data; + playlists = "${data}/playlists"; + runtime = "/run/user/${builtins.toString config.users.users.soispha.uid}/mpd"; + music = config.home-manager.users.soispha.programs.beets.settings.directory; + }; + mpc = { + enable = true; + beetsPkg = config.home-manager.users.soispha.programs.beets.package; + }; + }; postgresql.enable = false; printing.enable = true; scanning.enable = true; 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" + ''; + }; + }; +} diff --git a/modules/by-name/mp/mpd/mpc.nix b/modules/by-name/mp/mpd/mpc.nix new file mode 100644 index 00000000..031465fe --- /dev/null +++ b/modules/by-name/mp/mpd/mpc.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.soispha.services.mpd.mpc; + parentCfg = config.soispha.services.mpd; +in { + options.soispha.services.mpd.mpc = { + enable = lib.mkEnableOption "mpc with extensions"; + + beetsPkg = lib.mkOption { + type = lib.types.package; + description = "The package to use, when calling `beet`"; + }; + }; + + config = lib.mkIf cfg.enable { + home-manager.users.soispha.home.packages = [ + pkgs.mpp # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}` (below) without the `-` + + # Removes the currently playing song from the disk and storage + (pkgs.mpp-beetrm.override { + beets = cfg.beetsPkg; + }) + # Works like normal `mpc searchadd` but uses the `beets` query syntax + (pkgs.mpp-searchadd.override { + beets = cfg.beetsPkg; + }) + # Displays the lyrics of the currently playing song + (pkgs.mpp-lyrics.override { + mpd_music_dir = parentCfg.directories.music; + }) + ]; + }; +} diff --git a/modules/by-name/mp/mpd/mpdconf.example b/modules/by-name/mp/mpd/mpdconf.example new file mode 100644 index 00000000..eaa5e641 --- /dev/null +++ b/modules/by-name/mp/mpd/mpdconf.example @@ -0,0 +1,418 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +#music_directory "~/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +#playlist_directory "~/.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +#db_file "~/.mpd/database" + +# These settings are the locations for the daemon log files for the daemon. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +# If you use systemd, do not configure a log_file. With systemd, MPD +# defaults to the systemd journal, which is fine. +# +#log_file "~/.mpd/log" + +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +# If you use systemd, do not configure a pid_file. +# +#pid_file "~/.mpd/pid" + +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +#state_file "~/.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other than the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activation is in use. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# Suppress all messages below the given threshold. Use "verbose" for +# troubleshooting. Available setting arguments are "notice", "info", "verbose", +# "warning" and "error". +# +#log_level "notice" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# +# An example of a database section instead of the old 'db_file' setting. +# It enables mounting other storages into the music directory. +# +#database { +# plugin "simple" +# path "~/.local/share/mpd/db +# cache_directory "~/.local/share/mpd/cache" +#} +# +# An example of database config for a satellite setup +# +#music_directory "nfs://fileserver.local/srv/mp3" +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +## media_role "media_role" #optional +#} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of a wasapi output (Windows multimedia API). +# +#audio_output { +# type "wasapi" +# name "My WASAPI output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## Exclusive mode blocks all other audio source, and get best audio quality without resampling. +## exclusive "no" # optional +## Enumerate all devices in log. +## enumerate "no" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for +# more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/modules/home.legacy/conf/default.nix b/modules/home.legacy/conf/default.nix index e943f7b6..9d6d00ed 100644 --- a/modules/home.legacy/conf/default.nix +++ b/modules/home.legacy/conf/default.nix @@ -17,7 +17,6 @@ ./mail ./mako ./mbsync - ./mpd ./mpv ./mumble ./neomutt diff --git a/modules/home.legacy/conf/mpd/default.nix b/modules/home.legacy/conf/mpd/default.nix deleted file mode 100644 index b30f6995..00000000 --- a/modules/home.legacy/conf/mpd/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - pkgs, - lib, - osConfig, - ... -}: let - dataDir = "${config.xdg.dataHome}/mpd"; - playlistDirectory = "${dataDir}/playlists"; - runtimeDir = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd"; -in { - home.sessionVariables = { - MPD_HOST = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd/socket"; - }; - - systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce '' - ${pkgs.coreutils}/bin/mkdir --parents "${dataDir}" "${playlistDirectory}" "${runtimeDir}" - ''; - - services.mpd = { - enable = true; - inherit dataDir playlistDirectory; - musicDirectory = config.programs.beets.settings.directory; - network = { - listenAddress = "${runtimeDir}/socket"; - }; - - 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" - ''; - }; -} diff --git a/modules/home.legacy/conf/mpd/mpdconf.example b/modules/home.legacy/conf/mpd/mpdconf.example deleted file mode 100644 index eaa5e641..00000000 --- a/modules/home.legacy/conf/mpd/mpdconf.example +++ /dev/null @@ -1,418 +0,0 @@ -# An example configuration file for MPD. -# Read the user manual for documentation: http://www.musicpd.org/doc/user/ - - -# Files and directories ####################################################### -# -# This setting controls the top directory which MPD will search to discover the -# available audio files and add them to the daemon's online database. This -# setting defaults to the XDG directory, otherwise the music directory will be -# be disabled and audio files will only be accepted over ipc socket (using -# file:// protocol) or streaming files over an accepted protocol. -# -#music_directory "~/music" -# -# This setting sets the MPD internal playlist directory. The purpose of this -# directory is storage for playlists created by MPD. The server will use -# playlist files not created by the server but only if they are in the MPD -# format. This setting defaults to playlist saving being disabled. -# -#playlist_directory "~/.mpd/playlists" -# -# This setting sets the location of the MPD database. This file is used to -# load the database at server start up and store the database while the -# server is not up. This setting defaults to disabled which will allow -# MPD to accept files over ipc socket (using file:// protocol) or streaming -# files over an accepted protocol. -# -#db_file "~/.mpd/database" - -# These settings are the locations for the daemon log files for the daemon. -# -# The special value "syslog" makes MPD use the local syslog daemon. This -# setting defaults to logging to syslog. -# -# If you use systemd, do not configure a log_file. With systemd, MPD -# defaults to the systemd journal, which is fine. -# -#log_file "~/.mpd/log" - -# This setting sets the location of the file which stores the process ID -# for use of mpd --kill and some init scripts. This setting is disabled by -# default and the pid file will not be stored. -# -# If you use systemd, do not configure a pid_file. -# -#pid_file "~/.mpd/pid" - -# This setting sets the location of the file which contains information about -# most variables to get MPD back into the same general shape it was in before -# it was brought down. This setting is disabled by default and the server -# state will be reset on server start up. -# -#state_file "~/.mpd/state" -# -# The location of the sticker database. This is a database which -# manages dynamic information attached to songs. -# -#sticker_file "~/.mpd/sticker.sql" -# -############################################################################### - - -# General music daemon options ################################################ -# -# This setting specifies the user that MPD will run as. MPD should never run as -# root and you may use this setting to make MPD change its user ID after -# initialization. This setting is disabled by default and MPD is run as the -# current user. -# -#user "nobody" -# -# This setting specifies the group that MPD will run as. If not specified -# primary group of user specified with "user" setting will be used (if set). -# This is useful if MPD needs to be a member of group such as "audio" to -# have permission to use sound card. -# -#group "nogroup" -# -# This setting sets the address for the daemon to listen on. Careful attention -# should be paid if this is assigned to anything other than the default, any. -# This setting can deny access to control of the daemon. Not effective if -# systemd socket activation is in use. -# -# For network -#bind_to_address "any" -# -# And for Unix Socket -#bind_to_address "~/.mpd/socket" -# -# This setting is the TCP port that is desired for the daemon to get assigned -# to. -# -#port "6600" -# -# Suppress all messages below the given threshold. Use "verbose" for -# troubleshooting. Available setting arguments are "notice", "info", "verbose", -# "warning" and "error". -# -#log_level "notice" -# -# Setting "restore_paused" to "yes" puts MPD into pause mode instead -# of starting playback after startup. -# -#restore_paused "no" -# -# This setting enables MPD to create playlists in a format usable by other -# music players. -# -#save_absolute_paths_in_playlists "no" -# -# This setting defines a list of tag types that will be extracted during the -# audio file discovery process. The complete list of possible values can be -# found in the user manual. -#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" -# -# This example just enables the "comment" tag without disabling all -# the other supported tags: -#metadata_to_use "+comment" -# -# This setting enables automatic update of MPD's database when files in -# music_directory are changed. -# -#auto_update "yes" -# -# Limit the depth of the directories being watched, 0 means only watch -# the music directory itself. There is no limit by default. -# -#auto_update_depth "3" -# -############################################################################### - - -# Symbolic link behavior ###################################################### -# -# If this setting is set to "yes", MPD will discover audio files by following -# symbolic links outside of the configured music_directory. -# -#follow_outside_symlinks "yes" -# -# If this setting is set to "yes", MPD will discover audio files by following -# symbolic links inside of the configured music_directory. -# -#follow_inside_symlinks "yes" -# -############################################################################### - - -# Zeroconf / Avahi Service Discovery ########################################## -# -# If this setting is set to "yes", service information will be published with -# Zeroconf / Avahi. -# -#zeroconf_enabled "yes" -# -# The argument to this setting will be the Zeroconf / Avahi unique name for -# this MPD server on the network. %h will be replaced with the hostname. -# -#zeroconf_name "Music Player @ %h" -# -############################################################################### - - -# Permissions ################################################################# -# -# If this setting is set, MPD will require password authorization. The password -# setting can be specified multiple times for different password profiles. -# -#password "password@read,add,control,admin" -# -# This setting specifies the permissions a user has who has not yet logged in. -# -#default_permissions "read,add,control,admin" -# -############################################################################### - - -# Database ####################################################################### -# -# An example of a database section instead of the old 'db_file' setting. -# It enables mounting other storages into the music directory. -# -#database { -# plugin "simple" -# path "~/.local/share/mpd/db -# cache_directory "~/.local/share/mpd/cache" -#} -# -# An example of database config for a satellite setup -# -#music_directory "nfs://fileserver.local/srv/mp3" -#database { -# plugin "proxy" -# host "other.mpd.host" -# port "6600" -#} - -# Input ####################################################################### -# -input { - plugin "curl" -# proxy "proxy.isp.com:8080" -# proxy_user "user" -# proxy_password "password" -} - -# -############################################################################### - -# Audio Output ################################################################ -# -# MPD supports various audio output types, as well as playing through multiple -# audio outputs at the same time, through multiple audio_output settings -# blocks. Setting this block is optional, though the server will only attempt -# autodetection for one sound card. -# -# An example of an ALSA output: -# -#audio_output { -# type "alsa" -# name "My ALSA Device" -## device "hw:0,0" # optional -## mixer_type "hardware" # optional -## mixer_device "default" # optional -## mixer_control "PCM" # optional -## mixer_index "0" # optional -#} -# -# An example of an OSS output: -# -#audio_output { -# type "oss" -# name "My OSS Device" -## device "/dev/dsp" # optional -## mixer_type "hardware" # optional -## mixer_device "/dev/mixer" # optional -## mixer_control "PCM" # optional -#} -# -# An example of a shout output (for streaming to Icecast): -# -#audio_output { -# type "shout" -# encoder "vorbis" # optional -# name "My Shout Stream" -# host "localhost" -# port "8000" -# mount "/mpd.ogg" -# password "hackme" -# quality "5.0" -# bitrate "128" -# format "44100:16:1" -## protocol "icecast2" # optional -## user "source" # optional -## description "My Stream Description" # optional -## url "http://example.com" # optional -## genre "jazz" # optional -## public "no" # optional -## timeout "2" # optional -## mixer_type "software" # optional -#} -# -# An example of a recorder output: -# -#audio_output { -# type "recorder" -# name "My recorder" -# encoder "vorbis" # optional, vorbis or lame -# path "/var/lib/mpd/recorder/mpd.ogg" -## quality "5.0" # do not define if bitrate is defined -# bitrate "128" # do not define if quality is defined -# format "44100:16:1" -#} -# -# An example of a httpd output (built-in HTTP streaming server): -# -#audio_output { -# type "httpd" -# name "My HTTP Stream" -# encoder "vorbis" # optional, vorbis or lame -# port "8000" -# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 -## quality "5.0" # do not define if bitrate is defined -# bitrate "128" # do not define if quality is defined -# format "44100:16:1" -# max_clients "0" # optional 0=no limit -#} -# -# An example of a pulseaudio output (streaming to a remote pulseaudio server) -# -#audio_output { -# type "pulse" -# name "My Pulse Output" -## server "remote_server" # optional -## sink "remote_server_sink" # optional -## media_role "media_role" #optional -#} -# -# An example of a winmm output (Windows multimedia API). -# -#audio_output { -# type "winmm" -# name "My WinMM output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -# or -## device "0" # optional -## mixer_type "hardware" # optional -#} -# -# An example of a wasapi output (Windows multimedia API). -# -#audio_output { -# type "wasapi" -# name "My WASAPI output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -# or -## device "0" # optional -## Exclusive mode blocks all other audio source, and get best audio quality without resampling. -## exclusive "no" # optional -## Enumerate all devices in log. -## enumerate "no" # optional -#} -# -# An example of an openal output. -# -#audio_output { -# type "openal" -# name "My OpenAL output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -#} -# -# An example of an sndio output. -# -#audio_output { -# type "sndio" -# name "sndio output" -# mixer_type "hardware" -#} -# -# An example of an OS X output: -# -#audio_output { -# type "osx" -# name "My OS X Device" -## device "Built-in Output" # optional -## channel_map "-1,-1,0,1" # optional -#} -# -## Example "pipe" output: -# -#audio_output { -# type "pipe" -# name "my pipe" -# command "aplay -f cd 2>/dev/null" -## Or if you're want to use AudioCompress -# command "AudioCompress -m | aplay -f cd 2>/dev/null" -## Or to send raw PCM stream through PCM: -# command "nc example.org 8765" -# format "44100:16:2" -#} -# -## An example of a null output (for no audio output): -# -#audio_output { -# type "null" -# name "My Null Output" -# mixer_type "none" # optional -#} -# -############################################################################### - - -# Normalization automatic volume adjustments ################################## -# -# This setting specifies the type of ReplayGain to use. This setting can have -# the argument "off", "album", "track" or "auto". "auto" is a special mode that -# chooses between "track" and "album" depending on the current state of -# random playback. If random playback is enabled then "track" mode is used. -# See for -# more details about ReplayGain. -# This setting is off by default. -# -#replaygain "album" -# -# This setting sets the pre-amp used for files that have ReplayGain tags. By -# default this setting is disabled. -# -#replaygain_preamp "0" -# -# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. -# By default this setting is disabled. -# -#replaygain_missing_preamp "0" -# -# This setting enables or disables ReplayGain limiting. -# MPD calculates actual amplification based on the ReplayGain tags -# and replaygain_preamp / replaygain_missing_preamp setting. -# If replaygain_limit is enabled MPD will never amplify audio signal -# above its original level. If replaygain_limit is disabled such amplification -# might occur. By default this setting is enabled. -# -#replaygain_limit "yes" -# -# This setting enables on-the-fly normalization volume adjustment. This will -# result in the volume of all playing audio to be adjusted so the output has -# equal "loudness". This setting is disabled by default. -# -#volume_normalization "no" -# -############################################################################### - -# Character Encoding ########################################################## -# -# If file or directory names do not display correctly for your locale then you -# may need to modify this setting. -# -#filesystem_charset "UTF-8" -# -############################################################################### diff --git a/modules/home.legacy/pkgs/default.nix b/modules/home.legacy/pkgs/default.nix index 2018805f..3d48287f 100644 --- a/modules/home.legacy/pkgs/default.nix +++ b/modules/home.legacy/pkgs/default.nix @@ -121,21 +121,6 @@ with pkgs; let Listen = [ spodi # Wrapper around `spotdl`. sort_song # Sorts songs in the current directory. - - mpp # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}` (below) without the `-` - - # Removes the currently playing song from the disk and storage - (mpc-beetrm.override { - beets = config.programs.beets.package; - }) - # Works like normal `mpc searchadd` but uses the `beets` query syntax - (mpc-searchadd.override { - beets = config.programs.beets.package; - }) - # Displays the lyrics of the currently playing song - (mpc-lyrics.override { - mpd_music_dir = config.services.mpd.musicDirectory; - }) ]; }; diff --git a/pkgs/by-name/mp/mpc-beetrm/mpc-beetrm.sh b/pkgs/by-name/mp/mpc-beetrm/mpc-beetrm.sh deleted file mode 100755 index 3209503c..00000000 --- a/pkgs/by-name/mp/mpc-beetrm/mpc-beetrm.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -beet remove --delete \ - title:"$(mpc --format '%title%' current)" \ - album:"$(mpc --format '%album%' current)" -mpc del 0 - -# vim: ft=sh diff --git a/pkgs/by-name/mp/mpc-beetrm/package.nix b/pkgs/by-name/mp/mpc-beetrm/package.nix deleted file mode 100644 index 99ca8bbd..00000000 --- a/pkgs/by-name/mp/mpc-beetrm/package.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - sysLib, - mpc, - beets, -}: -sysLib.writeShellScript { - name = "mpc-beetrm"; - src = ./mpc-beetrm.sh; - generateCompletions = false; - keepPath = false; - - dependencies = [ - mpc - beets - ]; -} diff --git a/pkgs/by-name/mp/mpc-lyrics/mpc-lyrics.sh b/pkgs/by-name/mp/mpc-lyrics/mpc-lyrics.sh deleted file mode 100755 index 004c67c7..00000000 --- a/pkgs/by-name/mp/mpc-lyrics/mpc-lyrics.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -( - cd "%MPD_MUSIC_DIR" || die "No music dir!" - exiftool "$(mpc --format '%file%' current)" -json | jq '.[0].Lyrics' -r | less -) - -# vim: ft=sh diff --git a/pkgs/by-name/mp/mpc-lyrics/package.nix b/pkgs/by-name/mp/mpc-lyrics/package.nix deleted file mode 100644 index 08cc8e48..00000000 --- a/pkgs/by-name/mp/mpc-lyrics/package.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - sysLib, - exiftool, - mpc, - jq, - less, - locale, # dependency of less - mpd_music_dir ? "\${XDG_MUSIC_DIR}", -}: -sysLib.writeShellScript { - name = "mpc-lyrics"; - src = ./mpc-lyrics.sh; - generateCompletions = false; - keepPath = false; - - replacementStrings = { - MPD_MUSIC_DIR = mpd_music_dir; - }; - - dependencies = [ - exiftool - mpc - jq - less - locale # dependency of less - ]; -} diff --git a/pkgs/by-name/mp/mpc-searchadd/mpc-searchadd.sh b/pkgs/by-name/mp/mpc-searchadd/mpc-searchadd.sh deleted file mode 100755 index 3fe9a6b6..00000000 --- a/pkgs/by-name/mp/mpc-searchadd/mpc-searchadd.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -tracks="$(mktmp)" -beet list "$@" --path >"$tracks" - -while read -r track; do - mpc add "$track" -done <"$tracks" - -mpc playlist -# vim: ft=sh diff --git a/pkgs/by-name/mp/mpc-searchadd/package.nix b/pkgs/by-name/mp/mpc-searchadd/package.nix deleted file mode 100644 index fd9f94e6..00000000 --- a/pkgs/by-name/mp/mpc-searchadd/package.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - sysLib, - mpc, - beets, -}: -sysLib.writeShellScript { - name = "mpc-searchadd"; - src = ./mpc-searchadd.sh; - generateCompletions = false; - keepPath = false; - - dependencies = [ - mpc - beets - ]; -} diff --git a/pkgs/by-name/mp/mpp-beetrm/mpp-beetrm.sh b/pkgs/by-name/mp/mpp-beetrm/mpp-beetrm.sh new file mode 100755 index 00000000..3209503c --- /dev/null +++ b/pkgs/by-name/mp/mpp-beetrm/mpp-beetrm.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +beet remove --delete \ + title:"$(mpc --format '%title%' current)" \ + album:"$(mpc --format '%album%' current)" +mpc del 0 + +# vim: ft=sh diff --git a/pkgs/by-name/mp/mpp-beetrm/package.nix b/pkgs/by-name/mp/mpp-beetrm/package.nix new file mode 100644 index 00000000..24b56606 --- /dev/null +++ b/pkgs/by-name/mp/mpp-beetrm/package.nix @@ -0,0 +1,16 @@ +{ + sysLib, + mpc, + beets, +}: +sysLib.writeShellScript { + name = "mpp-beetrm"; + src = ./mpp-beetrm.sh; + generateCompletions = false; + keepPath = false; + + dependencies = [ + mpc + beets + ]; +} diff --git a/pkgs/by-name/mp/mpp-lyrics/mpp-lyrics.sh b/pkgs/by-name/mp/mpp-lyrics/mpp-lyrics.sh new file mode 100755 index 00000000..004c67c7 --- /dev/null +++ b/pkgs/by-name/mp/mpp-lyrics/mpp-lyrics.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +( + cd "%MPD_MUSIC_DIR" || die "No music dir!" + exiftool "$(mpc --format '%file%' current)" -json | jq '.[0].Lyrics' -r | less +) + +# vim: ft=sh diff --git a/pkgs/by-name/mp/mpp-lyrics/package.nix b/pkgs/by-name/mp/mpp-lyrics/package.nix new file mode 100644 index 00000000..76b590c7 --- /dev/null +++ b/pkgs/by-name/mp/mpp-lyrics/package.nix @@ -0,0 +1,27 @@ +{ + sysLib, + exiftool, + mpc, + jq, + less, + locale, # dependency of less + mpd_music_dir ? "\${XDG_MUSIC_DIR}", +}: +sysLib.writeShellScript { + name = "mpp-lyrics"; + src = ./mpp-lyrics.sh; + generateCompletions = false; + keepPath = false; + + replacementStrings = { + MPD_MUSIC_DIR = mpd_music_dir; + }; + + dependencies = [ + exiftool + mpc + jq + less + locale # dependency of less + ]; +} diff --git a/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh b/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh new file mode 100755 index 00000000..3fe9a6b6 --- /dev/null +++ b/pkgs/by-name/mp/mpp-searchadd/mpp-searchadd.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +tracks="$(mktmp)" +beet list "$@" --path >"$tracks" + +while read -r track; do + mpc add "$track" +done <"$tracks" + +mpc playlist +# vim: ft=sh diff --git a/pkgs/by-name/mp/mpp-searchadd/package.nix b/pkgs/by-name/mp/mpp-searchadd/package.nix new file mode 100644 index 00000000..a98472d1 --- /dev/null +++ b/pkgs/by-name/mp/mpp-searchadd/package.nix @@ -0,0 +1,16 @@ +{ + sysLib, + mpc, + beets, +}: +sysLib.writeShellScript { + name = "mpp-searchadd"; + src = ./mpp-searchadd.sh; + generateCompletions = false; + keepPath = false; + + dependencies = [ + mpc + beets + ]; +} diff --git a/pkgs/by-name/mp/mpp/mpp.sh b/pkgs/by-name/mp/mpp/mpp.sh index 0d636ac5..538a56ee 100755 --- a/pkgs/by-name/mp/mpp/mpp.sh +++ b/pkgs/by-name/mp/mpp/mpp.sh @@ -6,15 +6,15 @@ SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH case "$1" in "searchadd") shift 1 - mpc-searchadd "$@" + mpp-searchadd "$@" ;; "lyrics") shift 1 - mpc-lyrics "$@" + mpp-lyrics "$@" ;; "beetrm") shift 1 - mpc-beetrm "$@" + mpp-beetrm "$@" ;; *) mpc "$@" -- cgit 1.4.1