mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-09-06 18:31:35 +00:00
80 lines
2.6 KiB
Nix
80 lines
2.6 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (lib.modules) mkIf;
|
|
inherit (lib.options) mkOption mkEnableOption mkPackageOption;
|
|
inherit (lib.types) str submodule;
|
|
inherit (lib.attrsets) mapAttrs mapAttrsToList filterAttrs;
|
|
cfg = config.vim.clipboard;
|
|
in {
|
|
options = {
|
|
vim = {
|
|
clipboard = {
|
|
enable = mkEnableOption ''
|
|
clipboard management for Neovim. Users may still choose to manage their
|
|
clipboard through [](#opt-vim.options) should they wish to avoid using
|
|
this module.
|
|
'';
|
|
|
|
registers = mkOption {
|
|
type = str;
|
|
default = "";
|
|
example = "unnamedplus";
|
|
description = ''
|
|
The register to be used by the Neovim clipboard. Recognized types are:
|
|
|
|
* unnamed: Vim will use the clipboard register `"*"` for all yank, delete,
|
|
change and put operations which would normally go to the unnamed register.
|
|
|
|
* unnamedplus: A variant of the "unnamed" flag which uses the clipboard register
|
|
`"+"` ({command}`:h quoteplus`) instead of register `"*"` for all yank, delete,
|
|
change and put operations which would normally go to the unnamed register.
|
|
|
|
When `unnamed` and `unnamedplus` is included simultaneously as `"unnamed,unnamedplus"`,
|
|
yank and delete operations (but not put) will additionally copy the text into register `"*"`.
|
|
|
|
Please see {command}`:h clipboard` for more details.
|
|
|
|
'';
|
|
};
|
|
|
|
providers = mkOption {
|
|
type = submodule {
|
|
options = let
|
|
clipboards = {
|
|
# name = "package name";
|
|
wl-copy = "wl-clipboard";
|
|
xclip = "xclip";
|
|
xsel = "xsel";
|
|
};
|
|
in
|
|
mapAttrs (name: pname: {
|
|
enable = mkEnableOption name;
|
|
package = mkPackageOption pkgs pname {nullable = true;};
|
|
})
|
|
clipboards;
|
|
};
|
|
default = {};
|
|
description = ''
|
|
Clipboard providers for which packages will be added to nvf's
|
|
{option}`extraPackages`. The `package` field may be set to `null`
|
|
if related packages are already found in system packages to
|
|
potentially reduce closure sizes.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
vim = {
|
|
options.clipboard = cfg.registers;
|
|
extraPackages = mapAttrsToList (_: v: v.package) (
|
|
filterAttrs (_: v: v.enable && v.package != null) cfg.providers
|
|
);
|
|
};
|
|
};
|
|
}
|