nix-community.nixvim/plugins/utils/rest.nix

403 lines
9.6 KiB
Nix
Raw Normal View History

2024-01-21 15:34:18 +01:00
{
lib,
helpers,
pkgs,
...
}:
2024-04-07 14:07:31 +02:00
with lib;
2024-09-01 12:52:28 +01:00
helpers.neovim-plugin.mkNeovimPlugin {
2024-05-05 19:39:35 +02:00
name = "rest";
originalName = "rest.nvim";
luaName = "rest-nvim";
package = "rest-nvim";
2024-05-05 19:39:35 +02:00
extraPackages = [ pkgs.curl ];
maintainers = [ maintainers.GaetanLepage ];
# TODO introduced 2024-04-07: remove 2024-06-07
deprecateExtraOptions = true;
optionsRenamedToSettings = [
"envFile"
"encodeUrl"
"skipSslVerification"
"customDynamicVariables"
[
"highlight"
"timeout"
]
];
imports =
let
basePluginPath = [
"plugins"
"rest"
];
settingsPath = basePluginPath ++ [ "settings" ];
in
[
(mkRenamedOptionModule (basePluginPath ++ [ "resultSplitHorizontal" ]) (
settingsPath
++ [
"result"
"split"
"horizontal"
]
))
(mkRenamedOptionModule (basePluginPath ++ [ "resultSplitInPlace" ]) (
settingsPath
++ [
"result"
"split"
"in_place"
]
))
(mkRenamedOptionModule (basePluginPath ++ [ "stayInCurrentWindowAfterSplit" ]) (
settingsPath
++ [
"result"
"split"
"stay_in_current_window_after_split"
]
))
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showUrl"
]
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"url"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showHeaders"
]
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"headers"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showHttpInfo"
]
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"http_info"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showCurlCommand"
]
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"curl_command"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRemovedOptionModule
(
basePluginPath
++ [
"result"
"showStatistics"
]
)
2024-04-07 14:07:31 +02:00
''
Use `plugins.rest.settings.result.behavior.statistics.{enable,stats}` instead.
Refer to the documentation for more information.
''
)
2024-05-05 19:39:35 +02:00
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"formatters"
]
)
(
settingsPath
++ [
"result"
"behavior"
"formatters"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRenamedOptionModule
(
basePluginPath
++ [
"highlight"
"enabled"
]
)
(
settingsPath
++ [
"highlight"
"enable"
]
)
2024-04-07 14:07:31 +02:00
)
2024-05-05 19:39:35 +02:00
(mkRemovedOptionModule (basePluginPath ++ [ "jumpToRequest" ]) ''
This option has been deprecated upstream.
'')
(mkRemovedOptionModule (basePluginPath ++ [ "yankDryRun" ]) ''
This option has been deprecated upstream.
'')
(mkRemovedOptionModule (basePluginPath ++ [ "searchBack" ]) ''
This option has been deprecated upstream.
'')
2024-04-07 14:07:31 +02:00
];
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
settingsOptions = {
client = helpers.defaultNullOpts.mkStr "curl" ''
The HTTP client to be used when running requests.
'';
env_file = helpers.defaultNullOpts.mkStr ".env" ''
Environment variables file to be used for the request variables in the document.
'';
env_pattern = helpers.defaultNullOpts.mkStr "\\.env$" ''
Environment variables file pattern for `telescope.nvim`.
'';
env_edit_command = helpers.defaultNullOpts.mkStr "tabedit" ''
Neovim command to edit an environment file.
'';
encode_url = helpers.defaultNullOpts.mkBool true ''
Encode URL before making request.
'';
skip_ssl_verification = helpers.defaultNullOpts.mkBool false ''
Skip SSL verification, useful for unknown certificates.
'';
custom_dynamic_variables = mkOption {
type = with helpers.nixvimTypes; nullOr (maybeRaw (attrsOf strLuaFn));
default = null;
example = {
"$timestamp" = "os.time";
"$randomInt" = ''
function()
return math.random(0, 1000)
end
'';
};
description = ''
Custom dynamic variables. Keys are variable names and values are lua functions.
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
default: `{}`
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
apply = v: if isAttrs v then mapAttrs (_: helpers.mkRaw) v else v;
};
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
logs = {
level = helpers.defaultNullOpts.mkNullable helpers.nixvimTypes.logLevel "info" ''
The logging level name, see `:h vim.log.levels`.
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
save = helpers.defaultNullOpts.mkBool true ''
Whether to save log messages into a `.log` file.
2024-04-07 14:07:31 +02:00
'';
2024-05-05 19:39:35 +02:00
};
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
result = {
split = {
horizontal = helpers.defaultNullOpts.mkBool false ''
Open request results in a horizontal split.
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
in_place = helpers.defaultNullOpts.mkBool false ''
Keep the HTTP file buffer above|left when split horizontal|vertical.
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
stay_in_current_window_after_split = helpers.defaultNullOpts.mkBool true ''
Stay in the current window (HTTP file) or change the focus to the results window.
2024-01-21 15:34:18 +01:00
'';
2024-04-07 14:07:31 +02:00
};
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
behavior = {
show_info = {
url = helpers.defaultNullOpts.mkBool true ''
Display the request URL.
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
headers = helpers.defaultNullOpts.mkBool true ''
Display the request headers.
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
http_info = helpers.defaultNullOpts.mkBool true ''
Display the request HTTP information.
2024-04-07 14:07:31 +02:00
'';
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
curl_command = helpers.defaultNullOpts.mkBool true ''
Display the cURL command that was used for the request.
'';
};
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
decode_url = helpers.defaultNullOpts.mkBool true ''
Whether to decode the request URL query parameters to improve readability.
'';
2024-01-21 15:34:18 +01:00
2024-05-05 19:39:35 +02:00
statistics = {
enable = helpers.defaultNullOpts.mkBool true ''
Whether to enable statistics or not.
2024-04-07 14:07:31 +02:00
'';
2024-01-21 15:34:18 +01:00
stats = helpers.defaultNullOpts.mkListOf (with types; attrsOf str) [
{
__unkeyed = "total_time";
title = "Time taken:";
}
{
__unkeyed = "size_download_t";
title = "Download size:";
}
] "See https://curl.se/libcurl/c/curl_easy_getinfo.html.";
2024-04-07 14:07:31 +02:00
};
2024-04-07 14:07:31 +02:00
2024-05-05 19:39:35 +02:00
formatters = {
json = helpers.defaultNullOpts.mkStr "jq" ''
JSON formatter.
2024-04-07 14:07:31 +02:00
'';
html = helpers.defaultNullOpts.mkStr {
__raw = ''
function(body)
if vim.fn.executable("tidy") == 0 then
return body, { found = false, name = "tidy" }
2024-05-05 19:39:35 +02:00
end
local fmt_body = vim.fn.system({
"tidy",
"-i",
"-q",
"--tidy-mark", "no",
"--show-body-only", "auto",
"--show-errors", "0",
"--show-warnings", "0",
"-",
}, body):gsub("\n$", "")
return fmt_body, { found = true, name = "tidy" }
end
'';
} "HTML formatter.";
2024-04-07 14:07:31 +02:00
};
2024-04-07 14:07:31 +02:00
};
2024-05-05 19:39:35 +02:00
keybinds = {
buffer_local = helpers.defaultNullOpts.mkBool false ''
Enable keybinds only in request result buffer.
2024-04-07 14:07:31 +02:00
'';
2024-05-05 19:39:35 +02:00
prev = helpers.defaultNullOpts.mkStr "H" ''
Mapping for cycle to previous result pane.
'';
next = helpers.defaultNullOpts.mkStr "L" ''
Mapping for cycle to next result pane.
2024-04-07 14:07:31 +02:00
'';
};
2024-05-05 19:39:35 +02:00
};
2024-04-07 14:07:31 +02:00
2024-05-05 19:39:35 +02:00
highlight = {
enable = helpers.defaultNullOpts.mkBool true ''
Whether current request highlighting is enabled or not.
'';
timeout = helpers.defaultNullOpts.mkUnsignedInt 750 ''
Duration time of the request highlighting in milliseconds.
'';
};
keybinds =
helpers.defaultNullOpts.mkListOf (with types; listOf str)
[
2024-04-07 14:07:31 +02:00
[
"<localleader>rr"
"<cmd>Rest run<cr>"
"Run request under the cursor"
2024-04-07 14:07:31 +02:00
]
[
"<localleader>rl"
"<cmd>Rest run last<cr>"
"Re-run latest request"
]
]
2024-04-07 14:07:31 +02:00
''
Declare some keybindings.
Format: list of 3 strings lists: key, action and description.
'';
2024-05-05 19:39:35 +02:00
};
settingsExample = {
client = "curl";
env_file = ".env";
logs = {
level = "info";
save = true;
2024-04-07 14:07:31 +02:00
};
2024-05-05 19:39:35 +02:00
result = {
split = {
horizontal = false;
in_place = false;
stay_in_current_window_after_split = true;
2024-04-07 14:07:31 +02:00
};
};
2024-05-05 19:39:35 +02:00
keybinds = [
[
"<localleader>rr"
"<cmd>Rest run<cr>"
"Run request under the cursor"
]
[
"<localleader>rl"
"<cmd>Rest run last<cr>"
"Re-run latest request"
]
];
};
}