110 lines
3.0 KiB
Nix
110 lines
3.0 KiB
Nix
# SPDX-FileCopyrightText: 2020-2023 Simon Bruder <simon@sbruder.de>
|
|
#
|
|
# 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;
|
|
};
|
|
};
|
|
};
|
|
}
|