{ config, lib, ... }: with lib; with builtins; let cfg = config.vim.utility.surround; self = import ./surround.nix {inherit lib;}; mappingDefinitions = self.options.vim.utility.surround.mappings; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { config = mkIf cfg.enable { vim = { startPlugins = [ "nvim-surround" ]; luaConfigRC.surround = nvim.dag.entryAnywhere '' require('nvim-surround').setup() ''; maps = { insert = mkMerge [ (mkSetBinding mappings.insert "(nvim-surround-insert)") (mkSetBinding mappings.insertLine "(nvim-surround-insert-line)") ]; normal = mkMerge [ (mkSetBinding mappings.normal "(nvim-surround-normal)") (mkSetBinding mappings.normalCur "(nvim-surround-normal-cur)") (mkSetBinding mappings.normalLine "(nvim-surround-normal-line)") (mkSetBinding mappings.normalCurLine "(nvim-surround-normal-cur-line)") (mkSetBinding mappings.delete "(nvim-surround-delete)") (mkSetBinding mappings.change "(nvim-surround-change)") ]; visualOnly = mkMerge [ (mkSetBinding mappings.visual "(nvim-surround-visual)") (mkSetBinding mappings.visualLine "(nvim-surround-visual-line)") ]; }; }; }; }