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