{
  lib,
  pkgs,
  config,
  ...
}:
with lib; let
  cfg = config.roles.mpd;
in {
  options.roles.mpd = {
    enable = mkEnableOption "setup mpd client";
    host = mkOption {default = "192.168.1.2";};
  };

  config = mkIf cfg.enable {
    programs.ncmpcpp = {
      enable = true;
      settings.mpd_host = cfg.host;
      bindings = [
        {
          key = "j";
          command = "scroll_down";
        }
        {
          key = "k";
          command = "scroll_up";
        }
        {
          key = "l";
          command = "next_column";
        }
        {
          key = "h";
          command = "previous_column";
        }
        {
          key = "J";
          command = ["select_item" "scroll_down"];
        }
        {
          key = "K";
          command = ["select_item" "scroll_up"];
        }
      ];
    };
    services.mpd-mpris = {
      enable = true;
      mpd.host = cfg.host;
    };
    programs.waybar.settings.mainBar.mpd.server = cfg.host;
    systemd.user.services = {
      snapclient = {
        Unit = {
          Description = "Snapclient";
        };
        Service = {
          ExecStart = "${pkgs.snapcast}/bin/snapclient -h ${cfg.host}";
        };
        Install = {
          WantedBy = ["graphical-session.target"];
        };
      };
    };
  };
}
