1
0
Fork 0
mirror of https://github.com/nix-community/nixvim.git synced 2025-11-08 11:36:07 +01:00
nixvim/plugins/by-name/image/default.nix
saygo-png c4b27080a6 treewide: infer packPathName menial work
Signed-off-by: saygo-png <saygo.mail@proton.me>
2025-09-27 23:49:59 +00:00

146 lines
4 KiB
Nix

{
lib,
config,
...
}:
let
inherit (lib) types;
inherit (lib.nixvim) defaultNullOpts;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "image";
package = "image-nvim";
description = "This plugin adds image support to Neovim using Kitty's Graphics Protocol or ueberzugpp.";
maintainers = [ lib.maintainers.GaetanLepage ];
# TODO: option deprecations added 2025-03-20. Remove after 25.05
# TODO: curlPackage and ueberzugPackage deprecations added 2025-04-06. Remove after 25.05
inherit (import ./deprecations.nix lib)
deprecateExtraOptions
optionsRenamedToSettings
imports
;
settingsOptions = {
backend =
defaultNullOpts.mkEnumFirstDefault
[
"kitty"
"ueberzug"
"sixel"
]
''
All the backends support rendering inside Tmux.
- kitty - best in class, works great and is very snappy
- ueberzug - backed by ueberzugpp, supports any terminal, but has lower performance
- Supports multiple images thanks to @jstkdng.
- sixel - uses the Sixel graphics protocol, widely supported by many terminals
- Works with XTerm, WezTerm, foot, and other Sixel-compatible terminals
- ImageMagick is required for Sixel encoding
> [!Note]
> When choosing the `"ueberzug"` backend, nixvim will automatically add `ueberzugpp` as a dependency.
> Set `ueberzugPackage = null` to disable this behavior.
'';
integrations =
defaultNullOpts.mkAttrsOf types.anything
{
markdown.enabled = true;
typst.enabled = true;
neorg.enabled = true;
syslang.enabled = true;
html.enabled = false;
css.enabled = false;
}
''
Per-filetype integrations.
'';
max_width = defaultNullOpts.mkUnsignedInt null ''
Image maximum width.
'';
max_height = defaultNullOpts.mkUnsignedInt null ''
Image maximum height.
'';
max_width_window_percentage = defaultNullOpts.mkUnsignedInt 100 ''
Image maximum width as a percentage of the window width.
'';
max_height_window_percentage = defaultNullOpts.mkUnsignedInt 50 ''
Image maximum height as a percentage of the window height.
'';
window_overlap_clear_enabled = defaultNullOpts.mkBool false ''
Toggles images when windows are overlapped.
'';
window_overlap_clear_ft_ignore =
defaultNullOpts.mkListOf types.str
[
"cmp_menu"
"cmp_docs"
"snacks_notif"
"scrollview"
"scrollview_sign"
]
''
Toggles images when windows are overlapped.
'';
editor_only_render_when_focused = defaultNullOpts.mkBool false ''
Auto show/hide images when the editor gains/looses focus.
'';
tmux_show_only_in_active_window = defaultNullOpts.mkBool false ''
Auto show/hide images in the correct Tmux window (needs visual-activity off).
'';
hijack_file_patterns =
defaultNullOpts.mkListOf types.str
[
"*.png"
"*.jpg"
"*.jpeg"
"*.gif"
"*.webp"
"*.avif"
]
''
Render image files as images when opened.
'';
};
settingsExample = {
backend = "kitty";
max_width = 100;
max_height = 12;
max_height_window_percentage.__raw = "math.huge";
max_width_window_percentage.__raw = "math.huge";
window_overlap_clear_enabled = true;
window_overlap_clear_ft_ignore = [
"cmp_menu"
"cmp_docs"
""
];
};
dependencies = [
# In theory, we could remove that if the user explicitly disables `downloadRemoteImages` for
# all integrations but shipping `curl` is not too heavy.
"curl"
{
name = "ueberzug";
enable = config.plugins.image.settings.backend == "ueberzug";
}
{
name = "imagemagick";
enable = config.plugins.image.settings.backend == "sixel";
}
];
}