nixos-config/users/simon/modules/mpd.nix

94 lines
2.7 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{ 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;
musicDirectory = "~/Music";
network.listenAddress = "${config.services.mpd.dataDir}/socket";
extraConfig = ''
zeroconf_enabled "no"
restore_paused "yes"
audio_output {
type "pulse"
name "pulse"
}
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;
}).overrideAttrs (o: o // {
nativeBuildInputs = o.nativeBuildInputs ++ (with pkgs; [ makeWrapper ]);
# !!! HACK: ncurses uses terminfos rs1 for alacritty (\033c\033]104\007)
# to reset the terminal when the window is resized. For achieving the
# required effect (clearing the terminal), \033c would be enough.
# \033]104\007 additionally resets colours set by dynamic-colors. This
# makes text written in those colours almost unreadable. Since xterm only
# uses \033c to reset the terminal and does not make ncmpcpp misbehave in
# alacritty, this wrapper tricks ncurses into thinking it is running in
# xterm.
postInstall = ''
wrapProgram $out/bin/ncmpcpp \
--run '[ "$TERM" = "alacritty" ] && export TERM="xterm"'
'';
});
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";
# Misc
external_editor = "nvim";
};
};
home.packages = with pkgs; [
mpc_cli
];
home.sessionVariables.MPD_HOST = config.services.mpd.network.listenAddress;
}