{ config, lib, ... }:

let
  nixvimCfg = config.nixvimConfigs.trovebelt;
  cfg = nixvimCfg.setups.debugging;
in
{
  options.nixvimConfigs.trovebelt.setups.debugging.enable =
    lib.mkEnableOption "debugging setup";

  config = lib.mkIf cfg.enable {
    # The main star of the show.
    plugins.dap.enable = true;

    # All of the configurations that we typically/rarely needed.
    plugins.dap.adapters.executables = {
      gdb = {
        command = "gdb";
        args = [ "-i" "dap" ];
      };

      lldb = {
        command = "lldb-dap";
        name = "lldb";
      };

      dart = {
        command = "dart";
        args = [ "debug_adapter" ];
      };

      flutter = {
        command = "flutter";
        args = [ "debug_adapter" ];
      };
    };

    # Enable all of the debugging extensoins.
    plugins.dap.extensions.dap-go.enable = true;
    plugins.dap.extensions.dap-python.enable = true;
    plugins.rustaceanvim.enable = true;
  };
}