{lib, ...}: let inherit (lib.options) mkEnableOption mkOption; inherit (lib.types) bool attrsOf str; inherit (lib.nvim.binds) mkMappingOption; inherit (lib.nvim.types) mkPluginSetupOption; in { options.vim.debugger.nvim-dap = { enable = mkEnableOption "debugging via nvim-dap"; ui = { enable = mkEnableOption "UI extension for nvim-dap"; setupOpts = mkPluginSetupOption "nvim-dap-ui" {}; autoStart = mkOption { type = bool; default = true; description = "Automatically Opens and Closes DAP-UI upon starting/closing a debugging session"; }; }; sources = mkOption { default = {}; description = "List of debuggers to install"; type = attrsOf str; }; mappings = { continue = mkMappingOption config.vim.enableNvfKeymaps "Continue" "dc"; restart = mkMappingOption config.vim.enableNvfKeymaps "Restart" "dR"; terminate = mkMappingOption config.vim.enableNvfKeymaps "Terminate" "dq"; runLast = mkMappingOption config.vim.enableNvfKeymaps "Re-run Last Debug Session" "d."; toggleRepl = mkMappingOption config.vim.enableNvfKeymaps "Toggle Repl" "dr"; hover = mkMappingOption config.vim.enableNvfKeymaps "Hover" "dh"; toggleBreakpoint = mkMappingOption config.vim.enableNvfKeymaps "Toggle breakpoint" "db"; runToCursor = mkMappingOption config.vim.enableNvfKeymaps "Continue to the current cursor" "dgc"; stepInto = mkMappingOption config.vim.enableNvfKeymaps "Step into function" "dgi"; stepOut = mkMappingOption config.vim.enableNvfKeymaps "Step out of function" "dgo"; stepOver = mkMappingOption config.vim.enableNvfKeymaps "Next step" "dgj"; stepBack = mkMappingOption config.vim.enableNvfKeymaps "Step back" "dgk"; goUp = mkMappingOption config.vim.enableNvfKeymaps "Go up stacktrace" "dvo"; goDown = mkMappingOption config.vim.enableNvfKeymaps "Go down stacktrace" "dvi"; toggleDapUI = mkMappingOption config.vim.enableNvfKeymaps "Toggle DAP-UI" "du"; }; }; }