{ config, lib, ... }: let inherit (lib.modules) mkIf mkMerge; inherit (lib.nvim.binds) mkLuaBinding mkBinding pushDownDefault; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.tabline.nvimBufferline; self = import ./nvim-bufferline.nix {inherit lib;}; inherit (self.options.vim.tabline.nvimBufferline) mappings; in { config = mkIf cfg.enable { vim = { startPlugins = [ "nvim-bufferline-lua" "bufdelete-nvim" ]; # Soft-dependency for bufferline. # Recommended by upstream, so enabled here. visuals.nvim-web-devicons.enable = true; maps.normal = mkMerge [ (mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description) (mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext" mappings.cycleNext.description) (mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext" mappings.cycleNext.description) (mkBinding cfg.mappings.cyclePrevious ":BufferLineCyclePrev" mappings.cyclePrevious.description) (mkBinding cfg.mappings.pick ":BufferLinePick" mappings.pick.description) (mkBinding cfg.mappings.sortByExtension ":BufferLineSortByExtension" mappings.sortByExtension.description) (mkBinding cfg.mappings.sortByDirectory ":BufferLineSortByDirectory" mappings.sortByDirectory.description) (mkLuaBinding cfg.mappings.sortById "function() require(\"bufferline\").sort_buffers_by(function (buf_a, buf_b) return buf_a.id < buf_b.id end) end" mappings.sortById.description) (mkBinding cfg.mappings.moveNext ":BufferLineMoveNext" mappings.moveNext.description) (mkBinding cfg.mappings.movePrevious ":BufferLineMovePrev" mappings.movePrevious.description) ]; binds.whichKey.register = pushDownDefault { "b" = "+Buffer"; "bm" = "BufferLineMove"; "bs" = "BufferLineSort"; "bsi" = "BufferLineSortById"; }; pluginRC.nvimBufferline = entryAnywhere '' require("bufferline").setup(${toLuaObject cfg.setupOpts}) ''; }; }; }