nix-community.nixvim/plugins/by-name/dap/dap-ui.nix

247 lines
6.1 KiB
Nix
Raw Permalink Normal View History

{
lib,
helpers,
config,
pkgs,
...
}:
2024-05-05 19:39:35 +02:00
with lib;
let
cfg = config.plugins.dap.extensions.dap-ui;
2024-05-05 19:39:35 +02:00
mkSizeOption = helpers.mkNullOrOption (with types; either int (numbers.between 0.0 1.0));
2024-05-05 19:39:35 +02:00
mkKeymapOptions =
name:
mapAttrs (
key: default:
helpers.defaultNullOpts.mkNullable (
with types; either str (listOf str)
) default "Map `${key}` for ${name}"
);
elementOption = types.submodule {
options = {
id = helpers.mkNullOrOption types.str "Element ID.";
size = mkSizeOption "Size of the element in lines/columns or as proportion of total editor size (0-1).";
};
};
layoutOption = types.submodule {
options = {
elements = mkOption {
2024-05-05 19:39:35 +02:00
default = [ ];
description = "Elements to display in this layout.";
type = with types; listOf (either str elementOption);
};
size = mkOption {
default = 10;
description = "Size of the layout in lines/columns.";
type = types.int;
};
position = mkOption {
default = "left";
description = "Which side of editor to open layout on.";
2024-05-05 19:39:35 +02:00
type = types.enum [
"left"
"right"
"top"
"bottom"
];
};
};
};
2024-05-05 19:39:35 +02:00
in
{
options.plugins.dap.extensions.dap-ui = helpers.neovim-plugin.extraOptionsOptions // {
enable = mkEnableOption "dap-ui";
package = lib.mkPackageOption pkgs "dap-ui" {
default = [
"vimPlugins"
"nvim-dap-ui"
];
};
2024-05-05 19:39:35 +02:00
controls = {
enabled = helpers.defaultNullOpts.mkBool true "Enable controls";
element = helpers.defaultNullOpts.mkEnumFirstDefault [
"repl"
"scopes"
"stacks"
"watches"
"breakpoints"
"console"
] "Element to show the controls on.";
icons = {
disconnect = helpers.defaultNullOpts.mkStr "" "";
pause = helpers.defaultNullOpts.mkStr "" "";
play = helpers.defaultNullOpts.mkStr "" "";
run_last = helpers.defaultNullOpts.mkStr "" "";
step_into = helpers.defaultNullOpts.mkStr "" "";
step_over = helpers.defaultNullOpts.mkStr "" "";
step_out = helpers.defaultNullOpts.mkStr "" "";
step_back = helpers.defaultNullOpts.mkStr "" "";
terminate = helpers.defaultNullOpts.mkStr "" "";
};
2024-05-05 19:39:35 +02:00
};
2024-05-05 19:39:35 +02:00
elementMappings = helpers.mkNullOrOption (types.attrsOf (
types.submodule {
options = mkKeymapOptions "element mapping overrides" {
edit = "e";
expand = [
"<CR>"
"<2-LeftMouse>"
];
2024-05-05 19:39:35 +02:00
open = "o";
remove = "d";
repl = "r";
toggle = "t";
};
}
)) "Per-element overrides of global mappings.";
2024-05-05 19:39:35 +02:00
expandLines = helpers.defaultNullOpts.mkBool true "Expand current line to hover window if larger than window size.";
2024-05-05 19:39:35 +02:00
floating = {
maxHeight = mkSizeOption "Maximum height of the floating window.";
2024-05-05 19:39:35 +02:00
maxWidth = mkSizeOption "Maximum width of the floating window.";
2024-05-05 19:39:35 +02:00
border = helpers.defaultNullOpts.mkBorder "single" "dap-ui floating window" "";
2024-05-05 19:39:35 +02:00
mappings = helpers.mkNullOrOption (types.submodule {
options = mkKeymapOptions "dap-ui floating" {
close = [
"<ESC>"
"q"
];
};
2024-05-05 19:39:35 +02:00
}) "Keys to trigger actions in elements.";
};
2024-05-05 19:39:35 +02:00
forceBuffers = helpers.defaultNullOpts.mkBool true "Prevents other buffers being loaded into dap-ui windows.";
2024-05-05 19:39:35 +02:00
icons = {
collapsed = helpers.defaultNullOpts.mkStr "" "";
current_frame = helpers.defaultNullOpts.mkStr "" "";
expanded = helpers.defaultNullOpts.mkStr "" "";
};
layouts = helpers.defaultNullOpts.mkListOf layoutOption [
{
elements = [
{
id = "scopes";
size = 0.25;
}
2024-05-05 19:39:35 +02:00
{
id = "breakpoints";
size = 0.25;
2024-05-05 19:39:35 +02:00
}
{
id = "stacks";
size = 0.25;
}
{
id = "watches";
size = 0.25;
2024-05-05 19:39:35 +02:00
}
];
position = "left";
size = 40;
}
{
elements = [
{
id = "repl";
size = 0.5;
}
{
id = "console";
size = 0.5;
}
];
position = "bottom";
size = 10;
}
] "List of layouts for dap-ui.";
2024-05-05 19:39:35 +02:00
mappings = helpers.mkNullOrOption (types.submodule {
options = mkKeymapOptions "dap-ui" {
edit = "e";
expand = [
"<CR>"
"<2-LeftMouse>"
];
2024-05-05 19:39:35 +02:00
open = "o";
remove = "d";
repl = "r";
toggle = "t";
};
}) "Keys to trigger actions in elements.";
2024-05-05 19:39:35 +02:00
render = {
indent = helpers.defaultNullOpts.mkInt 1 "Default indentation size.";
2024-05-05 19:39:35 +02:00
maxTypeLength = helpers.mkNullOrOption types.int "Maximum number of characters to allow a type name to fill before trimming.";
flake.lock: Update Flake lock file updates: • Updated input 'flake-parts': 'github:hercules-ci/flake-parts/506278e768c2a08bec68eb62932193e341f55c90?narHash=sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS%2Bb4tfNFCwE%3D' (2024-11-01) → 'github:hercules-ci/flake-parts/205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9?narHash=sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c%3D' (2024-12-04) • Updated input 'git-hooks': 'github:cachix/git-hooks.nix/3308484d1a443fc5bc92012435d79e80458fe43c?narHash=sha256-mnTbjpdqF0luOkou8ZFi2asa1N3AA2CchR/RqCNmsGE%3D' (2024-11-19) → 'github:cachix/git-hooks.nix/6f4e2a2112050951a314d2733a994fbab94864c6?narHash=sha256-SVQVsbafSM1dJ4fpgyBqLZ%2BLft%2BjcQuMtEL3lQWx2Sk%3D' (2024-12-04) • Updated input 'home-manager': 'github:nix-community/home-manager/62d536255879be574ebfe9b87c4ac194febf47c5?narHash=sha256-lYnT%2BEYE47f5yY3KS/Kd4pJ6CO9fhCqumkYYkQ3TK20%3D' (2024-12-01) → 'github:nix-community/home-manager/c7ffc9727d115e433fd884a62dc164b587ff651d?narHash=sha256-zjO6m5BqxXIyjrnUziAzk4%2BT4VleqjstNudSqWcpsHI%3D' (2024-12-07) • Updated input 'nix-darwin': 'github:lnl7/nix-darwin/c6b65d946097baf3915dd51373251de98199280d?narHash=sha256-Qs3YmoLYUJ8g4RkFj2rMrzrP91e4ShAioC9s%2BvG6ENM%3D' (2024-12-02) → 'github:lnl7/nix-darwin/a35b08d09efda83625bef267eb24347b446c80b8?narHash=sha256-sQJAxY1TYWD1UyibN/FnN97paTFuwBw3Vp3DNCyKsMk%3D' (2024-12-07) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/f9f0d5c5380be0a599b1fb54641fa99af8281539?narHash=sha256-En%2BgSoVJ3iQKPDU1FHrR6zIxSLXKjzKY%2Bpnh9tt%2BYts%3D' (2024-12-02) → 'github:NixOS/nixpkgs/4dc2fc4e62dbf62b84132fe526356fbac7b03541?narHash=sha256-FillH0qdWDt/nlO6ED7h4cmN%2BG9uXwGjwmCnHs0QVYM%3D' (2024-12-05) • Updated input 'nuschtosSearch': 'github:NuschtOS/search/16307548b7a1247291c84ae6a12c0aacb07dfba2?narHash=sha256-BC1CecAQISV5Q4LZK72Gx0%2BfaemOwaChiD9rMVfDPoA%3D' (2024-11-30) → 'github:NuschtOS/search/68e9fad70d95d08156cf10a030bd39487bed8ffe?narHash=sha256-315rJ7O9cOllPDaFscnJhcMleORHbxon0Kq9LAKJ5p4%3D' (2024-12-05) • Updated input 'treefmt-nix': 'github:numtide/treefmt-nix/6209c381904cab55796c5d7350e89681d3b2a8ef?narHash=sha256-2qbdorpq0TXHBWbVXaTqKoikN4bqAtAplTwGuII%2BoAc%3D' (2024-11-29) → 'github:numtide/treefmt-nix/50862ba6a8a0255b87377b9d2d4565e96f29b410?narHash=sha256-qKL3vjO%2BIXFQ0nTinFDqNq/sbbnnS5bMI1y0xX215fU%3D' (2024-12-05)
2024-12-07 12:35:11 +00:00
maxValueLines = helpers.defaultNullOpts.mkInt 100 "Maximum number of lines to allow a value to fill before trimming.";
};
selectWindow = helpers.defaultNullOpts.mkLuaFn null ''
2024-05-05 19:39:35 +02:00
A function which returns a window to be used for opening buffers such as a stack frame location.
'';
};
2024-05-05 19:39:35 +02:00
config =
let
options =
with cfg;
{
inherit
controls
icons
layouts
mappings
;
element_mappings = elementMappings;
floating = with floating; {
inherit border mappings;
max_height = maxHeight;
max_width = maxWidth;
};
2024-05-05 19:39:35 +02:00
force_buffers = forceBuffers;
2024-05-05 19:39:35 +02:00
render = with render; {
inherit indent;
max_type_length = maxTypeLength;
max_value_lines = maxValueLines;
};
2024-05-05 19:39:35 +02:00
select_window = selectWindow;
}
// cfg.extraOptions;
in
mkIf cfg.enable {
2024-05-05 19:39:35 +02:00
extraPlugins = [ cfg.package ];
plugins.dap = {
enable = true;
extensionConfigLua = ''
require("dapui").setup(${helpers.toLuaObject options});
'';
};
};
}