diff --git a/plugins/by-name/overseer/default.nix b/plugins/by-name/overseer/default.nix new file mode 100644 index 00000000..5fd9cc50 --- /dev/null +++ b/plugins/by-name/overseer/default.nix @@ -0,0 +1,132 @@ +{ + lib, + ... +}: +let + inherit (lib.nixvim) defaultNullOpts; + inherit (lib) types; +in +lib.nixvim.neovim-plugin.mkNeovimPlugin { + name = "overseer"; + originalName = "overseer.nvim"; + package = "overseer-nvim"; + + maintainers = [ lib.maintainers.khaneliman ]; + + settingsOptions = { + strategy = defaultNullOpts.mkStr "terminal" '' + Default task strategy. + ''; + + templates = defaultNullOpts.mkListOf types.str [ "builtin" ] '' + Template modules to load. + ''; + + auto_detect_success_color = defaultNullOpts.mkBool true '' + When true, tries to detect a green color from your colorscheme to use for success highlight. + ''; + + dap = defaultNullOpts.mkBool true '' + Whether to patch nvim-dap to support preLaunchTask and postDebugTask + ''; + + task_list = + defaultNullOpts.mkAttrsOf types.anything + { + default_detail = 1; + max_width = [ + 100 + 0.2 + ]; + min_width = [ + 40 + 0.1 + ]; + width = null; + max_height = [ + 20 + 0.1 + ]; + min_height = 8; + height = null; + separator = "────────────────────────────────────────"; + direction = "bottom"; + bindings = { + "?" = "ShowHelp"; + "g?" = "ShowHelp"; + "" = "RunAction"; + "" = "Edit"; + "o" = "Open"; + "" = "OpenVsplit"; + "" = "OpenSplit"; + "" = "OpenFloat"; + "" = "OpenQuickFix"; + "p" = "TogglePreview"; + "" = "IncreaseDetail"; + "" = "DecreaseDetail"; + "L" = "IncreaseAllDetail"; + "H" = "DecreaseAllDetail"; + "[" = "DecreaseWidth"; + "]" = "IncreaseWidth"; + "{" = "PrevTask"; + "}" = "NextTask"; + "" = "ScrollOutputUp"; + "" = "ScrollOutputDown"; + "q" = "Close"; + }; + } + ''The task list displays all tasks that have been created. It shows the task status, name, and a summary of the task output.''; + + task_editor = { + bindings = + defaultNullOpts.mkAttrsOf types.anything + { + i = { + "" = "NextOrSubmit"; + "" = "Submit"; + "" = "Next"; + "" = "Prev"; + "" = "Cancel"; + }; + n = { + "" = "NextOrSubmit"; + "" = "Submit"; + "" = "Next"; + "" = "Prev"; + "q" = "Cancel"; + "?" = "ShowHelp"; + }; + } + '' + Set keymap to false to remove default behavior. + You can add custom keymaps here as well (anything vim.keymap.set accepts). + ''; + }; + + task_launcher = { + bindings = + defaultNullOpts.mkAttrsOf types.anything + { + i = { + "" = "Submit"; + "" = "Cancel"; + }; + n = { + "" = "Submit"; + "" = "Submit"; + "q" = "Cancel"; + "?" = "ShowHelp"; + }; + } + '' + Set keymap to false to remove default behavior. + You can add custom keymaps here as well (anything vim.keymap.set accepts). + ''; + }; + + actions = defaultNullOpts.mkAttrsOf types.anything { } '' + They are simply a custom function that will do something to or with a task. + Please refer to the documentation for details of available builtin actions. + ''; + }; +} diff --git a/tests/test-sources/plugins/by-name/overseer/default.nix b/tests/test-sources/plugins/by-name/overseer/default.nix new file mode 100644 index 00000000..b3d57908 --- /dev/null +++ b/tests/test-sources/plugins/by-name/overseer/default.nix @@ -0,0 +1,177 @@ +{ + empty = { + plugins.overseer.enable = true; + }; + + default = { + plugins.overseer = { + settings = { + strategy = "terminal"; + templates = [ "builtin" ]; + auto_detect_success_color = true; + dap = true; + task_list = { + default_detail = 1; + max_width = [ + 100 + 0.2 + ]; + min_width = [ + 40 + 0.1 + ]; + width = null; + max_height = [ + 20 + 0.1 + ]; + min_height = 8; + height = null; + separator = "────────────────────────────────────────"; + direction = "bottom"; + bindings = { + "?" = "ShowHelp"; + "g?" = "ShowHelp"; + "" = "RunAction"; + "" = "Edit"; + "o" = "Open"; + "" = "OpenVsplit"; + "" = "OpenSplit"; + "" = "OpenFloat"; + "" = "OpenQuickFix"; + "p" = "TogglePreview"; + "" = "IncreaseDetail"; + "" = "DecreaseDetail"; + "L" = "IncreaseAllDetail"; + "H" = "DecreaseAllDetail"; + "[" = "DecreaseWidth"; + "]" = "IncreaseWidth"; + "{" = "PrevTask"; + "}" = "NextTask"; + "" = "ScrollOutputUp"; + "" = "ScrollOutputDown"; + "q" = "Close"; + }; + }; + actions = { }; + form = { + border = "rounded"; + zindex = 40; + min_width = 80; + max_width = 0.9; + width = null; + min_height = 10; + max_height = 0.9; + height = null; + win_opts = { + winblend = 0; + }; + }; + task_launcher = { + bindings = { + i = { + "" = "Submit"; + "" = "Cancel"; + }; + n = { + "" = "Submit"; + "" = "Submit"; + "q" = "Cancel"; + "?" = "ShowHelp"; + }; + }; + }; + task_editor = { + bindings = { + i = { + "" = "NextOrSubmit"; + "" = "Submit"; + "" = "Next"; + "" = "Prev"; + "" = "Cancel"; + }; + n = { + "" = "NextOrSubmit"; + "" = "Submit"; + "" = "Next"; + "" = "Prev"; + "q" = "Cancel"; + "?" = "ShowHelp"; + }; + }; + }; + confirm = { + border = "rounded"; + zindex = 40; + min_width = 20; + max_width = 0.5; + width = null; + min_height = 6; + max_height = 0.9; + height = null; + win_opts = { + winblend = 0; + }; + }; + task_win = { + padding = 2; + border = "rounded"; + win_opts = { + winblend = 0; + }; + }; + help_win = { + border = "rounded"; + win_opts = { }; + }; + component_aliases = { + default = [ + { + __unkeyed-1 = "display_duration"; + detail_level = 2; + } + "on_output_summarize" + "on_exit_set_status" + "on_complete_notify" + { + __unkeyed-2 = "on_complete_dispose"; + require_view = [ + "SUCCESS" + "FAILURE" + ]; + } + ]; + default_vscode = [ + "default" + "on_result_diagnostics" + ]; + }; + bundles = { + save_task_opts = { + bundleable = true; + }; + autostart_on_load = true; + }; + preload_components = [ ]; + default_template_prompt = "allow"; + template_timeout = 3000; + template_cache_threshold = 100; + }; + }; + }; + + keymaps = { + plugins.overseer = { + enable = true; + settings = { + task_launcher = { + "" = false; + "" = { + action = "make"; + options.silent = true; + }; + }; + }; + }; + }; +}