diff --git a/module-list.nix b/module-list.nix index 1152ca5..840823a 100644 --- a/module-list.nix +++ b/module-list.nix @@ -7,6 +7,7 @@ ./modules/vim/keymap.nix ./modules/vim/augroup.nix + ./modules/buffer.nix ./modules/filetype.nix ./modules/input.nix ./modules/plugin.nix diff --git a/modules/buffer.nix b/modules/buffer.nix new file mode 100644 index 0000000..e03efa1 --- /dev/null +++ b/modules/buffer.nix @@ -0,0 +1,39 @@ +{ config, lib, ... }: + +let + options = import ./vim/options.nix { inherit lib; }; + + bufferOpts = { name, config, ... }: { + options = with lib; { + filetypes = mkOption { + type = types.extCommas; + description = "File types for which the buffer is enabled"; + }; + opt = options.buffer; + }; + config = { + filetypes = lib.mkDefault name; + }; + }; + + mkFiletypeBuffer = name: cfg: + lib.nameValuePair + "buffer-${name}" + { + event = "FileType"; + pattern = cfg.filetypes; + callback = with lib; with nix2lua; lambda ["ev"] (lib.flatten [ + (flip mapAttrsToList cfg.opt (k: v: if v == null then null else set "vim.opt.${k}" v)) + ]); + }; +in +{ + options.buffer = lib.mkOption { + type = with lib.types; attrsOf (submodule bufferOpts); + default = { }; + }; + + config = { + vim.augroup = lib.mkIf (config.buffer != {}) (lib.listToAttrs (lib.mapAttrsToList mkFiletypeBuffer config.buffer)); + }; +}