nix-community.nixvim/plugins/telescope/extensions/media-files.nix

132 lines
3.1 KiB
Nix

{
lib,
helpers,
config,
pkgs,
...
}:
with lib;
(
import ./_helpers.nix {inherit lib helpers config pkgs;}
)
.mkExtension {
name = "media-files";
extensionName = "media_files";
defaultPackage = pkgs.vimPlugins.telescope-media-files-nvim;
# TODO: introduced 2024-03-24, remove on 2024-05-24
imports = let
telescopeExtensionsPath = ["plugins" "telescope" "extensions"];
in
mapAttrsToList
(
oldOptionName: newOptionPath:
mkRenamedOptionModule
(telescopeExtensionsPath ++ ["media_files" oldOptionName])
(telescopeExtensionsPath ++ ["media-files"] ++ newOptionPath)
)
{
enable = ["enable"];
package = ["package"];
filetypes = ["settings" "filetypes"];
find_cmd = ["settings" "find_cmd"];
};
extraOptions = {
dependencies = let
mkDepOption = {
name,
desc,
package ? pkgs.${name},
enabledByDefault ? false,
}: {
enable = mkOption {
type = types.bool;
default = enabledByDefault;
description = ''
Whether to install the ${name} dependency.
${desc}
'';
};
package = mkOption {
type = types.package;
default = package;
description = "The package to use for the ${name} dependency.";
};
};
in {
chafa = mkDepOption {
name = "chafa";
enabledByDefault = true;
desc = "Required for image support.";
};
imageMagick = mkDepOption {
name = "ImageMagick";
package = pkgs.imagemagick;
desc = "Required for svg previews.";
};
ffmpegthumbnailer = mkDepOption {
name = "ffmpegthumbnailer";
desc = "Required for video preview support.";
};
pdftoppm = mkDepOption {
name = "pdmtoppm";
package = pkgs.poppler_utils;
desc = "Required for pdf preview support.";
};
epub-thumbnailer = mkDepOption {
name = "epub-thumbnailer";
desc = "Required for epub preview support";
};
fontpreview = mkDepOption {
name = "fontpreview";
desc = "Required for font preview support.";
};
};
};
extraConfig = cfg: {
extraPackages = flatten (
mapAttrsToList
(
name: {
enable,
package,
}:
optional enable package
)
cfg.dependencies
);
};
settingsOptions = {
filetypes =
helpers.defaultNullOpts.mkListOf types.str
''
[
"png"
"jpg"
"gif"
"mp4"
"webm"
"pdf"
]
''
"Filetypes whitelist.";
find_cmd = helpers.defaultNullOpts.mkStr "fd" ''
Which find command to use.
'';
};
settingsExample = {
filetypes = ["png" "webp" "jpg" "jpeg"];
find_cmd = "rg";
};
}