diff --git a/plugins/by-name/hex/default.nix b/plugins/by-name/hex/default.nix new file mode 100644 index 00000000..6ea5d0df --- /dev/null +++ b/plugins/by-name/hex/default.nix @@ -0,0 +1,45 @@ +{ lib, pkgs, ... }: +let + inherit (lib.nixvim) defaultNullOpts mkNullOrLuaFn; +in +lib.nixvim.neovim-plugin.mkNeovimPlugin { + name = "hex"; + originalName = "hex.nvim"; + package = "hex-nvim"; + + maintainers = [ lib.maintainers.GaetanLepage ]; + + extraOptions = { + xxdPackage = lib.mkPackageOption pkgs [ + "unixtools" + "xxd" + ] { nullable = true; }; + }; + + extraConfig = cfg: { extraPackages = [ cfg.xxdPackage ]; }; + + settingsOptions = { + dump_cmd = defaultNullOpts.mkStr "xxd -g 1 -u" '' + cli command used to dump hex data. + ''; + + assemble_cmd = defaultNullOpts.mkStr "xxd -r" '' + cli command used to dump hex data. + ''; + + is_buf_binary_pre_read = mkNullOrLuaFn '' + Function that runs on `BufReadPre` to determine if it's binary or not. + It should return a boolean value. + ''; + + is_buf_binary_post_read = mkNullOrLuaFn '' + Function that runs on `BufReadPost` to determine if it's binary or not. + It should return a boolean value. + ''; + }; + + settingsExample = { + dump_cmd = "xxd -g 1 -u"; + assemble_cmd = "xxd -r"; + }; +} diff --git a/tests/test-sources/plugins/by-name/hex/default.nix b/tests/test-sources/plugins/by-name/hex/default.nix new file mode 100644 index 00000000..7639a68f --- /dev/null +++ b/tests/test-sources/plugins/by-name/hex/default.nix @@ -0,0 +1,38 @@ +{ + empty = { + plugins.hex.enable = true; + }; + + defaults = { + plugins.hex = { + enable = true; + + settings = { + dump_cmd = "xxd -g 1 -u"; + assemble_cmd = "xxd -r"; + is_buf_binary_pre_read.__raw = '' + function() + binary_ext = { 'out', 'bin', 'png', 'jpg', 'jpeg', 'exe', 'dll' } + -- only work on normal buffers + if vim.bo.ft ~= "" then return false end + -- check -b flag + if vim.bo.bin then return true end + -- check ext within binary_ext + local filename = vim.fn.expand('%:t') + local ext = vim.fn.expand('%:e') + if vim.tbl_contains(binary_ext, ext) then return true end + -- none of the above + return false + end + ''; + is_buf_binary_post_read.__raw = '' + function() + local encoding = (vim.bo.fenc ~= "" and vim.bo.fenc) or vim.o.enc + if encoding ~= 'utf-8' then return true end + return false + end + ''; + }; + }; + }; +}