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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

444 lines
10 KiB
Nix
Raw Normal View History

2024-01-21 15:34:18 +01:00
{
config,
2024-01-21 15:34:18 +01:00
lib,
pkgs,
...
}:
2024-09-09 17:18:43 -05:00
let
inherit (lib) mkRemovedOptionModule mkRenamedOptionModule types;
inherit (lib.nixvim) defaultNullOpts;
in
lib.nixvim.neovim-plugin.mkNeovimPlugin {
2024-04-07 14:07:31 +02:00
name = "rest";
originalName = "rest.nvim";
luaName = "rest-nvim";
package = "rest-nvim";
2024-05-05 19:39:35 +02:00
2024-09-09 17:18:43 -05:00
maintainers = [ lib.maintainers.GaetanLepage ];
2024-05-05 19:39:35 +02:00
2024-04-07 14:07:31 +02:00
# 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"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
))
(mkRenamedOptionModule (basePluginPath ++ [ "resultSplitInPlace" ]) (
settingsPath
++ [
"result"
"split"
"in_place"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
))
(mkRenamedOptionModule (basePluginPath ++ [ "stayInCurrentWindowAfterSplit" ]) (
settingsPath
++ [
"result"
"split"
"stay_in_current_window_after_split"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
))
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showUrl"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"url"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
)
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showHeaders"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"headers"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
)
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showHttpInfo"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"http_info"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
)
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"showCurlCommand"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
(
settingsPath
++ [
"result"
"behavior"
"show_info"
"curl_command"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
)
(mkRemovedOptionModule
(
basePluginPath
++ [
"result"
"showStatistics"
2024-05-05 19:39:35 +02:00
]
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.
''
)
(mkRenamedOptionModule
(
basePluginPath
++ [
"result"
"formatters"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
(
settingsPath
++ [
"result"
"behavior"
"formatters"
2024-05-05 19:39:35 +02:00
]
2024-04-07 14:07:31 +02:00
)
)
(mkRenamedOptionModule
(
basePluginPath
++ [
"highlight"
"enabled"
2024-05-05 19:39:35 +02:00
]
)
(
2024-04-07 14:07:31 +02:00
settingsPath
2024-05-05 19:39:35 +02:00
++ [
2024-04-07 14:07:31 +02:00
"highlight"
2024-05-05 19:39:35 +02:00
"enable"
]
)
2024-04-07 14:07:31 +02:00
)
(mkRemovedOptionModule (basePluginPath ++ [ "jumpToRequest" ]) ''
This option has been deprecated upstream.
2024-05-05 19:39:35 +02:00
'')
2024-04-07 14:07:31 +02:00
(mkRemovedOptionModule (basePluginPath ++ [ "yankDryRun" ]) ''
This option has been deprecated upstream.
2024-05-05 19:39:35 +02:00
'')
2024-04-07 14:07:31 +02:00
(mkRemovedOptionModule (basePluginPath ++ [ "searchBack" ]) ''
This option has been deprecated upstream.
2024-05-05 19:39:35 +02:00
'')
2024-04-07 14:07:31 +02:00
];
2024-01-21 15:34:18 +01:00
2024-04-07 14:07:31 +02:00
settingsOptions = {
2024-09-09 17:18:43 -05:00
custom_dynamic_variables = lib.mkOption {
type = with types; nullOr (maybeRaw (attrsOf strLuaFn));
2024-04-07 14:07:31 +02:00
default = null;
example = {
"$timestamp" = "os.time";
"$randomInt" = ''
function()
return math.random(0, 1000)
2024-05-05 19:39:35 +02:00
end
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
};
2024-04-07 14:07:31 +02:00
description = ''
Custom dynamic variables. Keys are variable names and values are lua functions.
2024-01-21 15:34:18 +01:00
2024-04-07 14:07:31 +02:00
default: `{}`
2024-01-21 15:34:18 +01:00
'';
2024-05-05 19:39:35 +02:00
};
2024-01-21 15:34:18 +01:00
2024-09-10 22:25:11 -05:00
request = {
skip_ssl_verification = defaultNullOpts.mkBool false ''
Skip SSL verification, useful for unknown certificates.
2024-01-21 15:34:18 +01:00
'';
2024-09-10 22:25:11 -05:00
hooks = {
encode_url = defaultNullOpts.mkBool true ''
Encode URL before making request.
2024-01-21 15:34:18 +01:00
'';
2024-09-10 22:25:11 -05:00
user_agent = defaultNullOpts.mkStr (lib.nixvim.mkRaw ''"rest.nvim v" .. require("rest-nvim.api").VERSION'') ''
Set `User-Agent` header when it is empty.
2024-01-21 15:34:18 +01:00
'';
2024-09-10 22:25:11 -05:00
set_content_type = defaultNullOpts.mkBool true ''
Set `Content-Type` header when it is empty and body is provided.
2024-01-21 15:34:18 +01:00
'';
2024-04-07 14:07:31 +02:00
};
2024-09-10 22:25:11 -05:00
};
2024-01-21 15:34:18 +01:00
2024-09-10 22:25:11 -05:00
response = {
hooks = {
2024-09-09 17:18:43 -05:00
decode_url = defaultNullOpts.mkBool true ''
2024-09-10 22:25:11 -05:00
Encode URL before making request.
2024-04-07 14:07:31 +02:00
'';
2024-01-21 15:34:18 +01:00
2024-09-10 22:25:11 -05:00
format = defaultNullOpts.mkBool true ''
Format the response body using `gq` command.
'';
};
2024-04-07 14:07:31 +02:00
2024-09-10 22:25:11 -05:00
};
2024-09-10 22:25:11 -05:00
clients = defaultNullOpts.mkAttrsOf types.anything {
curl = {
statistics = [
{
id = "time_total";
winbar = "take";
title = "Time taken";
}
{
id = "size_download";
winbar = "size";
title = "Download size";
}
];
opts = {
set_compressed = false;
2024-04-07 14:07:31 +02:00
};
2024-04-07 14:07:31 +02:00
};
2024-09-10 22:25:11 -05:00
} ''Table of client configurations.'';
2024-04-07 14:07:31 +02:00
2024-09-10 22:25:11 -05:00
cookies = {
enable = defaultNullOpts.mkBool true ''
Whether to enable cookies support or not.
'';
2024-04-07 14:07:31 +02:00
2024-09-10 22:25:11 -05:00
path = defaultNullOpts.mkStr (lib.nixvim.mkRaw ''vim.fs.joinpath(vim.fn.stdpath("data") --[[@as string]], "rest-nvim.cookies")'') ''
Environment variables file pattern for `telescope.nvim`.
'';
};
2024-05-05 19:39:35 +02:00
2024-09-10 22:25:11 -05:00
env = {
enable = defaultNullOpts.mkBool true ''
Whether to enable env file support or not.
'';
pattern = defaultNullOpts.mkStr "\\.env$" ''
Environment variables file pattern for `telescope.nvim`.
'';
2024-05-05 19:39:35 +02:00
};
2024-04-07 14:07:31 +02:00
highlight = {
2024-09-09 17:18:43 -05:00
enable = defaultNullOpts.mkBool true ''
2024-04-07 14:07:31 +02:00
Whether current request highlighting is enabled or not.
2024-05-05 19:39:35 +02:00
'';
2024-09-09 17:18:43 -05:00
timeout = defaultNullOpts.mkUnsignedInt 750 ''
2024-04-07 14:07:31 +02:00
Duration time of the request highlighting in milliseconds.
2024-05-05 19:39:35 +02:00
'';
};
2024-09-10 22:25:11 -05:00
_log_level = defaultNullOpts.mkNullableWithRaw types.logLevel "warn" ''
The logging level name, see `:h vim.log.levels`.
'';
2024-04-07 14:07:31 +02:00
keybinds =
2024-09-09 17:18:43 -05:00
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
};
2024-04-07 14:07:31 +02:00
settingsExample = {
2024-09-10 22:25:11 -05:00
request = {
skip_ssl_verification = true;
2024-04-07 14:07:31 +02:00
};
2024-09-10 22:25:11 -05:00
response = {
hooks = {
format = false;
2024-04-07 14:07:31 +02:00
};
};
2024-09-10 22:25:11 -05:00
clients = {
curl = {
opts = {
set_compressed = true;
};
};
};
cookies = {
enable = false;
};
env = {
enable = false;
};
ui = {
winbar = false;
};
_log_level = "info";
2024-05-05 19:39:35 +02:00
};
extraOptions = {
curlPackage = lib.mkPackageOption pkgs "curl" {
nullable = true;
};
enableHttpFiletypeAssociation = lib.mkOption {
type = types.bool;
default = true;
description = ''
Sets up the filetype association of `.http` files to trigger treesitter support to enable `rest` functionality.
'';
};
enableTelescope = lib.mkEnableOption "telescope integration";
};
2024-09-10 22:25:11 -05:00
# NOTE: plugin uses globals table for configuration
callSetup = false;
extraConfig = cfg: {
assertions = [
{
assertion = config.plugins.treesitter.enable;
message = ''
Nixvim (plugins.rest): Requires the `http` parser from `plugins.treesitter`, please set `plugins.treesitter.enable`.
'';
}
{
assertion = cfg.enableTelescope -> config.plugins.telescope.enable;
message = ''
Nixvim (plugins.rest): You have `plugins.rest.enableTelescope` set to true, but `plugins.telescope.enable` is false.
Either disable the telescope integration or enable telescope.
'';
}
];
2024-09-10 22:25:11 -05:00
# TODO: introduced 2024-09-23: remove after 24.11
warnings =
let
definedOpts = lib.filter (opt: lib.hasAttrByPath (lib.toList opt) cfg.settings) [
"client"
"env_file"
"env_pattern"
"env_edit_command"
"encode_url"
"skip_ssl_verification"
[
"logs"
"level"
]
[
"logs"
"save"
]
[
"result"
"split"
]
[
"result"
"behavior"
]
[
"result"
"statistics"
]
[
"result"
"decode_url"
]
[
"result"
"formatters"
]
[
"result"
"keybinds"
]
];
in
lib.optional (definedOpts != [ ]) ''
Nixvim(plugins.rest): The following v2 settings options are no longer supported in v3:
${lib.concatMapStringsSep "\n" (opt: " - ${lib.showOption (lib.toList opt)}") definedOpts}
'';
# TODO: There may be some interactions between this & telescope, maybe requiring #2292
plugins.rest.luaConfig.post = lib.mkIf cfg.enableTelescope ''require("telescope").load_extension("rest")'';
2024-09-10 22:25:11 -05:00
globals.rest_nvim = cfg.settings;
extraPackages = [ cfg.curlPackage ];
filetype = lib.mkIf cfg.enableHttpFiletypeAssociation {
extension.http = "http";
};
};
2024-04-07 14:07:31 +02:00
}