{ pkgs, lib, config, ... }:
{
  config = lib.mkIf config.frogeye.desktop.xorg {
    home = {
      packages = with pkgs; [
        ashuffle
        mpc-cli
        vimpc
        playerctl
      ];
      sessionVariables = {
        MPD_PORT = "${toString config.services.mpd.network.port}";
      };
    };
    services = {
      mpd = {
        enable = true;
        network = {
          listenAddress = "0.0.0.0"; # Can be controlled remotely, determined with firewall
          startWhenNeeded = true;
        };
        extraConfig = ''
          restore_paused "yes"
          audio_output {
            type "pipewire"
            name "PipeWire Sound Server"
          }
        '';
        # UPST auto audio_output ?
        musicDirectory = "${config.home.homeDirectory}/Musiques";
      };
      # Expose mpd to mpris
      # mpd-mpris also exists but is MIT and make playerctld not pick up on play/pause events
      mpdris2.enable = true;
      # Allow control from headset
      mpris-proxy.enable = true;
      # Remember the last player
      playerctld.enable = true;
    };
    xdg = {
      configFile = {
        "vimpc/vimpcrc" = {
          text = ''
            map FF :browse<C-M>gg/
            map à :set add next<C-M>a:set add end<C-M>
            map @ :set add next<C-M>a:set add end<C-M>:next<C-M>
            map ° D:browse<C-M>A:shuffle<C-M>:play<C-M>:playlist<C-M>
            set songformat {%a - %b: %t}|{%f}$E$R $H[$H%l$H]$H
            set libraryformat %n \| {%t}|{%f}$E$R $H[$H%l$H]$H
            set ignorecase
            set sort library
          '';
        };
      };
    };
    xsession.windowManager.i3.config.keybindings =
      {
        "XF86AudioPrev" = "exec ${lib.getExe pkgs.playerctl} previous";
        "XF86AudioPlay" = "exec ${lib.getExe pkgs.playerctl} play-pause";
        "XF86AudioNext" = "exec ${lib.getExe pkgs.playerctl} next";
      };
  };
}