# SPDX-FileCopyrightText: 2020-2023 Simon Bruder # # SPDX-License-Identifier: AGPL-3.0-or-later { config, lib, nixosConfig, pkgs, ... }: # I only use mpd on gui systems. If I should ever need it on a headless system, # I will add a separate option. lib.mkIf nixosConfig.sbruder.gui.enable { services.mpd = { enable = true; package = pkgs.mpd; musicDirectory = "${config.home.homeDirectory}/Music"; playlistDirectory = "${config.services.mpd.musicDirectory}/playlists"; network.listenAddress = "${config.services.mpd.dataDir}/socket"; extraConfig = '' zeroconf_enabled "no" restore_paused "yes" audio_output { type "pipewire" name "pipewire" } audio_output { type "fifo" name "fifo" path "${config.services.mpd.dataDir}/fifo" format "44100:16:2" } ''; }; programs.ncmpcpp = { enable = true; package = (pkgs.ncmpcpp.override { visualizerSupport = true; taglibSupport = false; }); mpdMusicDir = null; # does not work (not of type `null or path') settings = { # Connection mpd_host = config.services.mpd.network.listenAddress; # Visualizer visualizer_autoscale = true; visualizer_data_source = "${config.services.mpd.dataDir}/fifo"; visualizer_in_stereo = "yes"; visualizer_look = "●█"; visualizer_output_name = "fifo"; visualizer_spectrum_dft_size = 1; # Song list formatting song_columns_list_format = lib.concatStringsSep " " [ "(6f)[green]{NE}" "(45)[white]{t|f:Title}" "(20)[]{a}" "(25)[cyan]{b}" "(5f)[blue]{P}" "(7f)[magenta]{l}" ]; # Display lists in column mode by default browser_display_mode = "columns"; search_engine_display_mode = "columns"; # Faster seeking seek_time = 5; # More modern UI user_interface = "alternative"; # Lyrics lyrics_directory = "${config.services.mpd.musicDirectory}/lyrics"; follow_now_playing_lyrics = true; # Misc external_editor = "nvim"; }; bindings = [ # not really speaking bindings, though t(op), h(ate) and d(elete) are somewhat memorizable { key = "t"; command = ''run_external_command "mpc sendmessage listenbrainz_feedback love"''; } { key = "h"; command = ''run_external_command "mpc sendmessage listenbrainz_feedback hate"''; } { key = "d"; command = ''run_external_command "mpc sendmessage listenbrainz_feedback clear"''; } ]; }; home.packages = with pkgs; [ listenbrainz-content-resolver mpc_cli ]; home.sessionVariables.MPD_HOST = config.services.mpd.network.listenAddress; services.listenbrainz-mpd = lib.mkIf nixosConfig.sbruder.trusted { enable = true; package = pkgs.unstable.listenbrainz-mpd; settings = { submission = { token_file = "/run/secrets/listenbrainz-token"; }; mpd = { address = config.services.mpd.network.listenAddress; }; }; }; }