{ pkgs, lib, ... }:

{
  environment.systemPackages = with pkgs; [
    qjackctl
    libjack2 # needed for overtone with pipewire
    jack2 # needed for overtone with pipewire

    # GUI 
    carla

    # Plugins
    helm
    surge
    distrho
    orca-c
    supercollider
    dirt
    sunvox
    vcv-rack
    lmms
    bespokesynth
    lsp-plugins
    helio-workstation
    projectm # milkdrop visualizer

    # DAWs
    # ardour
    # reaper
    renoise
  ];

  hardware.pulseaudio.enable = lib.mkForce false;
  security.rtkit.enable = true;

  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    jack.enable = true;
    config = {
      pipewire."context.properties"."default.clock.rate" = "48000";
      pipewire-pulse."stream.properties"."resample.quality" = 15;
      client."stream.properties"."resample.quality" = 15;
      client-rt."stream.properties"."resample.quality" = 15;
      #jack."context.modules" = [];
    };
    #media-session.config.bluez-monitor.properties = {
    #  "bluez5.headset-roles" = [ "hsp_hs" "hsp_ag" ];
    #  "bluez5.codecs" = [ "aac" "ldac" "aptx_hd" ];
    #};
  };

  #systemd.services.bluethoot.serviceConfig.ExecStart = [
  #  ""
  #  "${config.hardware.bluetooth.package}/libexec/bluetooth/bluetoothd --noplugin=sap"
  #];
  boot.kernelModules = [ "snd-seq" "snd-rawmidi" ]; # midi sequence kernel mods
  hardware.pulseaudio.package = pkgs.pulseaudio.override { jackaudioSupport = true; };

}
