mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
plugins/distant: init
This commit is contained in:
parent
e1b39b725e
commit
93b5fb0478
2 changed files with 479 additions and 0 deletions
373
plugins/by-name/distant/default.nix
Normal file
373
plugins/by-name/distant/default.nix
Normal file
|
@ -0,0 +1,373 @@
|
|||
{ lib, pkgs, ... }:
|
||||
let
|
||||
inherit (lib) types;
|
||||
inherit (lib.nixvim)
|
||||
defaultNullOpts
|
||||
literalLua
|
||||
mkNullOrOption
|
||||
mkNullOrStr
|
||||
;
|
||||
in
|
||||
lib.nixvim.plugins.mkNeovimPlugin {
|
||||
name = "distant";
|
||||
packPathName = "distant.nvim";
|
||||
package = "distant-nvim";
|
||||
|
||||
maintainers = [ lib.maintainers.GaetanLepage ];
|
||||
|
||||
setup = ":setup";
|
||||
|
||||
extraOptions = {
|
||||
distantPackage = lib.mkPackageOption pkgs "distant" {
|
||||
nullable = true;
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = cfg: {
|
||||
extraPackages = [ cfg.distantPackage ];
|
||||
};
|
||||
|
||||
settingsOptions = {
|
||||
buffer = {
|
||||
watch = {
|
||||
enabled = defaultNullOpts.mkBool true ''
|
||||
If true, will watch buffers for changes.
|
||||
'';
|
||||
retry_timeout = defaultNullOpts.mkUnsignedInt 5000 ''
|
||||
Time in milliseconds between attempts to retry a watch request for a buffer when the path
|
||||
represented by the buffer does not exist.
|
||||
|
||||
Set to `0` to disable.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
client = {
|
||||
bin = defaultNullOpts.mkStr' {
|
||||
example = lib.literalMD ''"\$\{lib.getExe distant}"'';
|
||||
pluginDefault = literalLua ''
|
||||
(function()
|
||||
local os_name = require('distant-core').utils.detect_os_arch()
|
||||
return os_name == 'windows' and 'distant.exe' or 'distant'
|
||||
end)()
|
||||
'';
|
||||
description = ''
|
||||
Binary to use locally with the client.
|
||||
|
||||
Defaults to `"distant"` on Unix platforms and `"distant.exe"` on Windows.
|
||||
'';
|
||||
};
|
||||
|
||||
log_file = defaultNullOpts.mkStr null ''
|
||||
Log file path.
|
||||
'';
|
||||
|
||||
log_level =
|
||||
defaultNullOpts.mkEnum
|
||||
[
|
||||
"trace"
|
||||
"debug"
|
||||
"info"
|
||||
"warn"
|
||||
"error"
|
||||
"off"
|
||||
]
|
||||
null
|
||||
''
|
||||
Log level.
|
||||
'';
|
||||
};
|
||||
|
||||
keymap =
|
||||
let
|
||||
keymapType = with types; either str (listOf str);
|
||||
mkKeymap = defaultNullOpts.mkNullable keymapType;
|
||||
in
|
||||
{
|
||||
dir = {
|
||||
enabled = defaultNullOpts.mkBool true ''
|
||||
If true, will apply keybindings when the buffer is created.
|
||||
'';
|
||||
|
||||
copy = mkKeymap "C" ''
|
||||
Keymap to copy the file or directory under the cursor.
|
||||
'';
|
||||
|
||||
edit = mkKeymap "<Return>" ''
|
||||
Keymap to edit the file or directory under the cursor.
|
||||
'';
|
||||
|
||||
tabedit = mkKeymap "<C-t>" ''
|
||||
Keymap to open the file or directory under the cursor in a new tab.
|
||||
'';
|
||||
|
||||
metadata = mkKeymap "M" ''
|
||||
Keymap to display metadata for the file or directory under the cursor.
|
||||
'';
|
||||
|
||||
newdir = mkKeymap "K" ''
|
||||
Keymap to create a new directory within the open directory.
|
||||
'';
|
||||
|
||||
newfile = mkKeymap "N" ''
|
||||
Keymap to create a new file within the open directory.
|
||||
'';
|
||||
|
||||
rename = mkKeymap "R" ''
|
||||
Keymap to rename the file or directory under the cursor.
|
||||
'';
|
||||
|
||||
remove = mkKeymap "D" ''
|
||||
Keymap to remove the file or directory under the cursor.
|
||||
'';
|
||||
|
||||
up = mkKeymap "-" ''
|
||||
Keymap to navigate up into the parent directory.
|
||||
'';
|
||||
};
|
||||
|
||||
file = {
|
||||
enabled = defaultNullOpts.mkBool true ''
|
||||
If true, will apply keybindings when the buffer is created.
|
||||
'';
|
||||
|
||||
up = mkKeymap "-" ''
|
||||
Keymap to navigate up into the parent directory.
|
||||
'';
|
||||
};
|
||||
|
||||
ui = {
|
||||
exit = mkKeymap [ "q" "<Esc>" ] ''
|
||||
Keymap used to exit the window.
|
||||
'';
|
||||
|
||||
main = {
|
||||
connections = {
|
||||
kill = mkKeymap "K" ''
|
||||
Kill the connection under cursor.
|
||||
'';
|
||||
|
||||
toggle_info = mkKeymap "I" ''
|
||||
Toggle information about the server/connection under cursor.
|
||||
'';
|
||||
};
|
||||
|
||||
tabs = {
|
||||
goto_connections = mkKeymap "1" ''
|
||||
Keymap used to bring up the connections tab.
|
||||
'';
|
||||
|
||||
goto_system_info = mkKeymap "2" ''
|
||||
Keymap used to bring up the system info tab.
|
||||
'';
|
||||
|
||||
goto_help = mkKeymap "?" ''
|
||||
Keymap used to bring up the help menu.
|
||||
'';
|
||||
|
||||
refresh = mkKeymap "R" ''
|
||||
Keymap used to refresh data in a tab.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
manager = {
|
||||
daemon = defaultNullOpts.mkBool false ''
|
||||
If true, when neovim starts a manager, it will be run as a daemon, which will detach it
|
||||
from the neovim process.
|
||||
This means that the manager will persist after neovim itself exits.
|
||||
'';
|
||||
|
||||
lazy = defaultNullOpts.mkBool true ''
|
||||
If true, will avoid starting the manager until first needed.
|
||||
'';
|
||||
|
||||
log_file = defaultNullOpts.mkStr null ''
|
||||
Log file path.
|
||||
'';
|
||||
|
||||
log_level =
|
||||
defaultNullOpts.mkEnum
|
||||
[
|
||||
"trace"
|
||||
"debug"
|
||||
"info"
|
||||
"warn"
|
||||
"error"
|
||||
"off"
|
||||
]
|
||||
null
|
||||
''
|
||||
Log level.
|
||||
'';
|
||||
|
||||
user = defaultNullOpts.mkBool false ''
|
||||
If true, when neovim starts a manager, it will listen on a user-local domain socket or
|
||||
windows pipe rather than the globally-accessible variant.
|
||||
'';
|
||||
};
|
||||
|
||||
network = {
|
||||
private = defaultNullOpts.mkBool false ''
|
||||
If true, will create a private network for all operations associated with a singular
|
||||
neovim instance.
|
||||
'';
|
||||
|
||||
timeout = {
|
||||
max = defaultNullOpts.mkUnsignedInt 15000 ''
|
||||
Maximum time to wait (in milliseconds) for requests to finish.
|
||||
'';
|
||||
|
||||
interval = defaultNullOpts.mkUnsignedInt 256 ''
|
||||
Time to wait (in milliseconds) inbetween checks to see if a request timed out
|
||||
'';
|
||||
};
|
||||
|
||||
windows_pipe = defaultNullOpts.mkStr null ''
|
||||
If provided, will overwrite the pipe name used for network communication on Windows
|
||||
machines.
|
||||
'';
|
||||
|
||||
unix_socket = defaultNullOpts.mkStr null ''
|
||||
If provided, will overwrite the unix socket path used for network communication on Unix
|
||||
machines.
|
||||
'';
|
||||
};
|
||||
|
||||
servers = defaultNullOpts.mkNullable' {
|
||||
type = types.attrsOf (
|
||||
types.submodule {
|
||||
freeformType = with types; attrsOf anything;
|
||||
|
||||
options = {
|
||||
connect = {
|
||||
default = {
|
||||
scheme = mkNullOrStr ''
|
||||
Scheme to use in place of letting distant infer an appropriate scheme (e.g. `"ssh"`).
|
||||
'';
|
||||
|
||||
port = mkNullOrOption types.ints.unsigned ''
|
||||
Port to use when connecting.
|
||||
'';
|
||||
|
||||
username = mkNullOrStr ''
|
||||
Username when connecting to the server (defaults to user running neovim).
|
||||
'';
|
||||
|
||||
options = mkNullOrStr ''
|
||||
Options to pass along to distant when connecting (e.g. ssh backend).
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
cwd = defaultNullOpts.mkStr null ''
|
||||
If specified, will apply the current working directory to any cases of spawning
|
||||
processes, opening directories & files, starting shells, and wrapping commands.
|
||||
|
||||
Will be overwritten if an explicit `cwd` or absolute path is provided in those
|
||||
situations.
|
||||
'';
|
||||
|
||||
launch = {
|
||||
default = {
|
||||
scheme = mkNullOrStr ''
|
||||
Scheme to use in place of letting distant infer an appropriate scheme (e.g. `"ssh"`).
|
||||
'';
|
||||
|
||||
port = mkNullOrOption types.ints.unsigned ''
|
||||
Port to use when launching (not same as what server listens on).
|
||||
'';
|
||||
|
||||
username = mkNullOrStr ''
|
||||
Username when accessing machine to launch server (defaults to user running
|
||||
neovim).
|
||||
'';
|
||||
|
||||
bin = mkNullOrStr ''
|
||||
Path to distant binary on remote machine.
|
||||
'';
|
||||
|
||||
args = mkNullOrOption (with types; listOf str) ''
|
||||
Additional CLI arguments for binary upon launch.
|
||||
'';
|
||||
|
||||
options = mkNullOrStr ''
|
||||
Options to pass along to distant when launching (e.g. ssh backend).
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
lsp =
|
||||
defaultNullOpts.mkAttrsOf
|
||||
(types.submodule {
|
||||
freeformType = with types; attrsOf anything;
|
||||
options = {
|
||||
cmd = mkNullOrOption (with types; either str (listOf str)) ''
|
||||
LSP command to run.
|
||||
'';
|
||||
|
||||
root_dir = mkNullOrOption (with types; either str (listOf str)) ''
|
||||
Path to the root directory or a function to locate it:
|
||||
```lua
|
||||
fun(path:string, bufnr:number):string
|
||||
```
|
||||
'';
|
||||
|
||||
filetypes = mkNullOrOption (with types; listOf str) ''
|
||||
List of filetypes for which to enable this LSP server.
|
||||
'';
|
||||
|
||||
on_exit = mkNullOrOption types.rawLua ''
|
||||
Callback when exiting the LSP server.
|
||||
|
||||
```lua
|
||||
fun(code:number, signal?:number, client_id:string)
|
||||
```
|
||||
'';
|
||||
};
|
||||
})
|
||||
{ }
|
||||
''
|
||||
Settings to use to start LSP instances.
|
||||
Mapping of a label to the settings for that specific LSP server
|
||||
'';
|
||||
};
|
||||
}
|
||||
);
|
||||
description = ''
|
||||
Collection of settings for servers defined by their hostname.
|
||||
|
||||
A key of `"*"` is special in that it is considered the default for all servers and will be
|
||||
applied first with any host-specific settings overwriting the default.
|
||||
'';
|
||||
example = {
|
||||
"192.168.1.42" = {
|
||||
default = {
|
||||
username = "me";
|
||||
port = 11451;
|
||||
};
|
||||
};
|
||||
};
|
||||
pluginDefault = {
|
||||
"*" = {
|
||||
connect.default = { };
|
||||
cwd = null;
|
||||
launch.default = { };
|
||||
lsp = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
settingsExample = {
|
||||
"network.unix_socket" = "/tmp/distant.sock";
|
||||
servers."192.168.1.42" = {
|
||||
default = {
|
||||
username = "me";
|
||||
port = 11451;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
106
tests/test-sources/plugins/by-name/distant/default.nix
Normal file
106
tests/test-sources/plugins/by-name/distant/default.nix
Normal file
|
@ -0,0 +1,106 @@
|
|||
{
|
||||
empty = {
|
||||
plugins.distant.enable = true;
|
||||
};
|
||||
|
||||
defaults = {
|
||||
plugins.distant = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
buffer = {
|
||||
watch = {
|
||||
enabled = true;
|
||||
retry_timeout = 5000;
|
||||
};
|
||||
};
|
||||
client = {
|
||||
bin.__raw = ''
|
||||
(function()
|
||||
local os_name = require('distant-core').utils.detect_os_arch()
|
||||
return os_name == 'windows' and 'distant.exe' or 'distant'
|
||||
end)()
|
||||
'';
|
||||
log_file = null;
|
||||
log_level = null;
|
||||
};
|
||||
keymap = {
|
||||
dir = {
|
||||
enabled = true;
|
||||
copy = "C";
|
||||
edit = "<Return>";
|
||||
tabedit = "<C-t>";
|
||||
metadata = "M";
|
||||
newdir = "K";
|
||||
newfile = "N";
|
||||
rename = "R";
|
||||
remove = "D";
|
||||
up = "-";
|
||||
};
|
||||
file = {
|
||||
enabled = true;
|
||||
up = "-";
|
||||
};
|
||||
ui = {
|
||||
exit = [
|
||||
"q"
|
||||
"<Esc>"
|
||||
];
|
||||
main = {
|
||||
connections = {
|
||||
kill = "K";
|
||||
toggle_info = "I";
|
||||
};
|
||||
tabs = {
|
||||
goto_connections = "1";
|
||||
goto_system_info = "2";
|
||||
goto_help = "?";
|
||||
refresh = "R";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
manager = {
|
||||
daemon = false;
|
||||
lazy = true;
|
||||
log_file = null;
|
||||
log_level = null;
|
||||
user = false;
|
||||
};
|
||||
network = {
|
||||
private = false;
|
||||
timeout = {
|
||||
max = 15000;
|
||||
interval = 256;
|
||||
};
|
||||
windows_pipe = null;
|
||||
unix_socket = null;
|
||||
};
|
||||
servers = {
|
||||
"*" = {
|
||||
connect.default = { };
|
||||
cwd = null;
|
||||
launch.default = { };
|
||||
lsp = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
example = {
|
||||
plugins.distant = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
"network.unix_socket" = "/tmp/distant.sock";
|
||||
servers."192.168.1.42" = {
|
||||
default = {
|
||||
username = "me";
|
||||
port = 11451;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue