diff --git a/plugins/bufferlines/bufferline.nix b/plugins/bufferlines/bufferline.nix new file mode 100644 index 00000000..b5f25d4d --- /dev/null +++ b/plugins/bufferlines/bufferline.nix @@ -0,0 +1,177 @@ +{ config, pkgs, lib, ... }: +with lib; +let + cfg = config.programs.nixvim.plugins.bufferline; + helpers = import ../helpers.nix { inherit lib; }; +in +{ + options = { + programs.nixvim.plugins.bufferline = { + enable = mkEnableOption "Enable bufferline"; + numbers = mkOption { + type = types.lines; + description = "A lua function customizing the styling of numbers."; + default = ""; + }; + closeCommand = mkOption { + type = types.lines; + description = "Command or function run when closing a buffer."; + default = ""; + }; + rightMouseCommand = mkOption { + type = types.lines; + description = "Command or function run when right clicking on a buffer."; + default = ""; + }; + leftMouseCommand = mkOption { + type = types.lines; + description = "Command or function run when clicking on a buffer."; + default = ""; + }; + middleMouseCommand = mkOption { + type = types.lines; + description = "Command or function run when middle clicking on a buffer."; + default = ""; + }; + indicatorIcon = mkOption { + type = types.str; + description = "The Icon shown as a indicator for buffer. Changing it is NOT recommended, + this is intended to be an escape hatch for people who cannot bear it for whatever reason."; + }; + bufferCloseIcon = mkOption { + type = types.str; + description = "The close icon for each buffer."; + }; + modifiedIcon = mkOption { + type = types.str; + description = "The icon indicating a buffer was modified."; + }; + closeIcon = mkOption { + type = types.str; + description = "The close icon."; + }; + leftTruncMarker = mkOption { + type = types.str; + }; + rightTruncMarker = mkOption { + type = types.str; + }; + nameFormatter = mkOption { + type = types.lines; + description = "A lua function that can be used to modify the buffer's lable. The argument 'buf' containing a name, path and bufnr is supplied."; + default = ""; + }; + maxNameLength = mkOption { + type = types.int; + description = "Max length of a buffer name."; + default = 18; + }; + maxPrefixLength = mkOption { + type = types.int; + description = "Max length of a buffer prefix (used when a buffer is de-duplicated)"; + default = 15; + }; + tabSize = mkOption { + type = types.int; + description = "Size of the tabs"; + default = 18; + }; + diagnostics = mkOption { + type = types.enum [ false "nvim_lsp" "coc" ]; + default = false; + }; + diagnosticsUpdateInInsert = mkOption { + type = types.bool; + default = false; + }; + diagnosticsIndicator = mkOption { + type = types.lines; + default = ""; + }; + customFilter = mkOption { + type = types.lines; + default = ""; + }; + showBufferIcons = mkOption { + type = types.bool; + default = true; + }; + showBufferCloseIcons = mkOption { + type = types.bool; + default = true; + }; + showCloseIcon = mkOption { + type = types.bool; + default = true; + }; + showTabIndicators = mkOption { + type = types.bool; + default = true; + }; + persistBufferSort = mkOption { + type = types.bool; + default = true; + }; + separatorStyle = mkOption { + type = types.enum [ "slant" "thick" "thin" ]; + }; + enforceRegularTabs = mkOption { + type = types.bool; + default = false; + }; + alwaysShowBufferline = mkOption { + type = types.bool; + default = true; + }; + sortBy = mkOption { + type = types.enum [ "id" "extension" "relative_directory" "directory" "tabs" ]; + }; + }; + }; + + config = let + setupOptions = { + options = { + numbers = cfg.numbers; + close_command = cfg.closeCommand; + right_mouse_command = cfg.rightMouseCommand; + left_mouse_command = cfg.leftMouseCommand; + middle_mouse_command = cfg.middleMouseCommand; + indicator_icon = cfg.indicatorIcon; + buffer_close_icon = cfg.bufferCloseIcon; + modified_icon = cfg.modifiedIcon; + close_icon = cfg.closeIcon; + left_trunc_marker = cfg.leftTruncMarker; + right_trunc_marker = cfg.rightTruncMarker; + name_formatter = cfg.nameFormatter; + max_name_length = cfg.maxNameLength; + max_prefix_length = cfg.maxPrefixLength; + tab_size = cfg.tabSize; + diagnostics = cfg.diagnostics; + diagnostics_update_in_insert = cfg.diagnosticsUpdateInInsert; + diagnostics_indicator = cfg.diagnosticsIndicator; + custom_filter = cfg.customFilter; + show_buffer_icons = cfg.showBufferIcons; + show_buffer_close_icons = cfg.showBufferCloseIcons; + show_close_icon = cfg.showCloseIcon; + show_tab_indicators = cfg.showTabIndicators; + persist_buffer_sort = cfg.persistBufferSort; + separator_style = cfg.separatorStyle; + enforce_regular_tabs = cfg.enforceRegularTabs; + always_show_bufferline = cfg.alwaysShowBufferline; + sort_by = cfg.sortBy; + }; + }; + in mkIf cfg.enable { + programs.nixvim = { + extraPlugins = with pkgs.vimPlugins; [ + bufferline-nvim + nvim-web-devicons + ]; + options.termguicolors = true; + extraConfigLua = '' + require('bufferline').setup{${helpers.toLuaObject setupOptions}} + ''; + }; + }; +} diff --git a/plugins/default.nix b/plugins/default.nix index c4d3d81b..aef71746 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -1,5 +1,7 @@ { imports = [ + ./bufferlines/bufferline.nix + ./colorschemes/gruvbox.nix ./colorschemes/onedark.nix ./colorschemes/one.nix