diff --git a/plugins/bufferlines/barbar.nix b/plugins/bufferlines/barbar.nix index 95d3c2ff..309b5b5b 100644 --- a/plugins/bufferlines/barbar.nix +++ b/plugins/bufferlines/barbar.nix @@ -7,54 +7,6 @@ }: with lib; let - cfg = config.plugins.barbar; - - bufferOptions = { - bufferIndex = helpers.mkNullOrOption types.bool '' - Whether to show the index of the associated buffer with respect to the ordering of the - buffers in the tabline. - ''; - - bufferNumber = helpers.mkNullOrOption types.bool "Whether to show the `bufnr` for the associated buffer."; - - button = helpers.mkNullOrOption ( - with types; either str (enum [ false ]) - ) "the button which is clicked to close / save a buffer, or indicate that it is pinned."; - - diagnostics = - genAttrs - [ - "error" - "warn" - "info" - "hint" - ] - ( - name: - helpers.mkCompositeOption "${name} diagnostic icon." { - enable = helpers.defaultNullOpts.mkBool false "Enable the ${name} diagnostic symbol"; - - icon = helpers.mkNullOrOption types.str "${name} diagnostic symbol"; - } - ); - - filetype = { - customColors = helpers.defaultNullOpts.mkBool false "Sets the icon's highlight group. If false, will use nvim-web-devicons colors"; - - enable = helpers.defaultNullOpts.mkBool true "Show the filetype icon."; - }; - - separator = { - left = helpers.defaultNullOpts.mkStr "▎" "Left separator"; - right = helpers.defaultNullOpts.mkStr "" "Right separator"; - }; - }; - - stateOptions = { - modified = bufferOptions; - pinned = bufferOptions; - } // bufferOptions; - keymapsActions = { previous = "Previous"; next = "Next"; @@ -79,239 +31,589 @@ let orderByWindowNumber = "OrderByWindowNumber"; }; in -{ - options.plugins.barbar = helpers.neovim-plugin.extraOptionsOptions // { - enable = mkEnableOption "barbar.nvim"; +helpers.neovim-plugin.mkNeovimPlugin config { + name = "barbar"; + originalName = "barbar.nvim"; + defaultPackage = pkgs.vimPlugins.barbar-nvim; + extraPlugins = [ pkgs.vimPlugins.nvim-web-devicons ]; - package = helpers.mkPluginPackageOption "barbar" pkgs.vimPlugins.barbar-nvim; + maintainers = [ maintainers.GaetanLepage ]; - animation = helpers.defaultNullOpts.mkBool true "Enable/disable animations"; + # TODO: introduced 2024-05-30, remove on 2024-07-30 + deprecateExtraOptions = true; + optionsRenamedToSettings = [ + "animation" + "autoHide" + "clickable" + "focusOnClose" + [ + "hide" + "alternate" + ] + [ + "hide" + "current" + ] + [ + "hide" + "extensions" + ] + [ + "hide" + "inactive" + ] + [ + "hide" + "visible" + ] + "highlightAlternate" + "highlightInactiveFileIcons" + "highlightVisible" + [ + "icons" + "bufferIndex" + ] + [ + "icons" + "bufferNumber" + ] + [ + "icons" + "button" + ] + [ + "icons" + "filetype" + "customColors" + ] + [ + "icons" + "separator" + "left" + ] + [ + "icons" + "separator" + "right" + ] + "insertAtStart" + "insertAtEnd" + "maximumPadding" + "minimumPadding" + "maximumLength" + "semanticLetters" + "letters" + "sidebarFiletypes" + "noNameTitle" + "tabpages" + ]; + imports = + let + basePluginPath = [ + "plugins" + "barbar" + ]; + settingsPath = basePluginPath ++ [ "settings" ]; + in + [ + (mkRemovedOptionModule ( + basePluginPath + ++ [ + "keymaps" + "silent" + ] + ) "Keymaps will be silent anyways. This option has always been useless.") + (mkRenamedOptionModule (basePluginPath ++ [ "excludeFileTypes" ]) ( + settingsPath ++ [ "exclude_ft" ] + )) + (mkRenamedOptionModule (basePluginPath ++ [ "excludeFileNames" ]) ( + settingsPath ++ [ "exclude_name" ] + )) + (mkRemovedOptionModule ( + basePluginPath + ++ [ + "icons" + "diagnostics" + ] + ) "Use `settings.icons.diagnostics` instead, but pay attention as the keys have changed.") + (mkRenamedOptionModule + ( + basePluginPath + ++ [ + "icons" + "filetype" + "enable" + ] + ) + ( + settingsPath + ++ [ + "icons" + "filetype" + "enabled" + ] + ) + ) + ] + ++ (map + ( + name: + mkRemovedOptionModule ( + basePluginPath + ++ [ + "icons" + name + ] + ) "Use `settings.icons.${name}` instead, but you should now use the real `snake_case` key names." + ) + [ + "alternate" + "current" + "inactive" + "modified" + "pinned" + "visible" + ] + ); - autoHide = helpers.defaultNullOpts.mkBool false "Enable/disable auto-hiding the tab bar when there is a single buffer."; + extraOptions = { + keymaps = mapAttrs ( + optionName: funcName: + helpers.mkNullOrOption (helpers.keymaps.mkMapOptionSubmodule { + defaults = { + mode = "n"; + action = "Buffer${funcName}"; + }; + hasKey = true; + hasAction = true; + }) "Keymap for function Buffer${funcName}" + ) keymapsActions; + }; - tabpages = helpers.defaultNullOpts.mkBool true "Enable/disable current/total tabpages indicator (top right corner)."; + extraConfig = cfg: { + keymaps = filter (keymap: keymap != null) ( + # TODO: switch to `attrValues cfg.keymaps` when removing the deprecation warnings above: + attrValues (filterAttrs (n: v: n != "silent") cfg.keymaps) + ); + }; + + settingsOptions = { + animation = helpers.defaultNullOpts.mkBool true '' + Enable/disable animations. + ''; + + auto_hide = + helpers.defaultNullOpts.mkNullableWithRaw (with types; either int (enum [ false ])) (-1) + '' + Automatically hide the 'tabline' when there are this many buffers left. + Set to any value less than `0` to disable. + + For example: `auto_hide = 0` hides the 'tabline' when there would be zero buffers shown, + `auto_hide = 1` hides the 'tabline' when there would only be one, etc. + ''; clickable = helpers.defaultNullOpts.mkBool true '' - Enable clickable tabs - - left-click: go to buffer - - middle-click: delete buffer + If set, you can left-click on a tab to switch to that buffer, and middle-click to delete it. ''; - excludeFileTypes = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" '' - Excludes buffers of certain filetypes from the tabline + exclude_ft = helpers.defaultNullOpts.mkListOf types.str [ ] '' + Excludes filetypes from appearing in the tabs. ''; - excludeFileNames = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" '' - Excludes buffers with certain filenames from the tabline + exclude_name = helpers.defaultNullOpts.mkListOf types.str [ ] '' + Excludes buffers matching name from appearing in the tabs. ''; - focusOnClose = + focus_on_close = helpers.defaultNullOpts.mkEnumFirstDefault [ "left" + "previous" "right" ] '' - A buffer to this direction will be focused (if it exists) when closing the current buffer. + The algorithm to use for getting the next buffer after closing the current + one: + + - `'left'`: focus the buffer to the left of the current buffer. + - `'previous'`: focus the previous buffer. + - `'right'`: focus the buffer to the right of the current buffer. ''; - highlightAlternate = helpers.defaultNullOpts.mkBool false "Highlight alternate buffers"; - - highlightInactiveFileIcons = helpers.defaultNullOpts.mkBool false "Highlight file icons in inactive buffers"; - - highlightVisible = helpers.defaultNullOpts.mkBool true "Highlight visible buffers"; - - icons = - stateOptions - // (mapAttrs - ( - name: description: - mkOption { - type = types.submodule { options = stateOptions; }; - default = { }; - inherit description; - } - ) - { - alternate = "The icons used for an alternate buffer."; - current = "The icons for the current buffer."; - inactive = "The icons for inactive buffers."; - visible = "The icons for visible buffers."; - } - ); - hide = { - alternate = helpers.mkNullOrOption types.bool "Hide alternate buffers"; - current = helpers.mkNullOrOption types.bool "Hide current buffer"; - extensions = helpers.mkNullOrOption types.bool "Hide file extensions"; - inactive = helpers.mkNullOrOption types.bool "Hide inactive buffers"; - visible = helpers.mkNullOrOption types.bool "Hide visible buffers"; + alternate = helpers.defaultNullOpts.mkBool false '' + Controls the visibility of the `|alternate-file|`. + `highlight_alternate` must be `true`. + ''; + + current = helpers.defaultNullOpts.mkBool false '' + Controls the visibility of the current buffer. + ''; + + extensions = helpers.defaultNullOpts.mkBool false '' + Controls the visibility of file extensions. + ''; + + inactive = helpers.defaultNullOpts.mkBool false '' + Controls visibility of `|hidden-buffer|`s and `|inactive-buffer|`s. + ''; + + visible = helpers.defaultNullOpts.mkBool false '' + Controls visibility of `|active-buffer|`s. + `highlight_visible` must be `true`. + ''; }; - insertAtEnd = helpers.defaultNullOpts.mkBool false '' - If true, new buffers will be inserted at the end of the list. - Default is to insert after current buffer. + highlight_alternate = helpers.defaultNullOpts.mkBool false '' + Enables highlighting of alternate buffers. ''; - insertAtStart = helpers.defaultNullOpts.mkBool false '' - If true, new buffers will be inserted at the start of the list. - Default is to insert after current buffer. + highlight_inactive_file_icons = helpers.defaultNullOpts.mkBool false '' + Enables highlighting the file icons of inactive buffers. ''; - maximumPadding = - helpers.defaultNullOpts.mkInt 4 - "Sets the maximum padding width with which to surround each tab"; + highlight_visible = helpers.defaultNullOpts.mkBool true '' + Enables highlighting of visible buffers. + ''; - minimumPadding = - helpers.defaultNullOpts.mkInt 1 - "Sets the minimum padding width with which to surround each tab"; + icons = { + buffer_index = + helpers.defaultNullOpts.mkNullableWithRaw + ( + with types; + either bool (enum [ + "superscript" + "subscript" + ]) + ) + false + "If `true`, show the index of the buffer with respect to the ordering of the buffers in the tabline."; - maximumLength = helpers.defaultNullOpts.mkInt 30 "Sets the maximum buffer name length."; + buffer_number = helpers.defaultNullOpts.mkNullableWithRaw ( + with types; + either bool (enum [ + "superscript" + "subscript" + ]) + ) false "If `true`, show the `bufnr` for the associated buffer."; - semanticLetters = helpers.defaultNullOpts.mkBool true '' - If set, the letters for each buffer in buffer-pick mode will be assigned based on their - name. - Otherwise or in case all letters are already assigned, the behavior is to assign letters in - order of usability (see `letters` option) + button = helpers.defaultNullOpts.mkNullableWithRaw (with types; either str (enum [ false ])) "" '' + The button which is clicked to close / save a buffer, or indicate that it is pinned. + Use `false` to disable it. + ''; + + diagnostics = mkOption { + type = types.submodule { + freeformType = with types; attrsOf anything; + options = + let + mkDiagnosticIconOptions = iconDefault: { + enabled = helpers.defaultNullOpts.mkBool false '' + Enable showing diagnostics of this `|diagnostic-severity|` in the 'tabline'. + ''; + + icon = helpers.defaultNullOpts.mkStr iconDefault '' + The icon which accompanies the number of diagnostics. + ''; + }; + in + { + "vim.diagnostic.severity.ERROR" = mkDiagnosticIconOptions " "; + "vim.diagnostic.severity.HINT" = mkDiagnosticIconOptions "󰌶 "; + "vim.diagnostic.severity.INFO" = mkDiagnosticIconOptions " "; + "vim.diagnostic.severity.WARN" = mkDiagnosticIconOptions " "; + }; + }; + apply = helpers.toRawKeys; + default = { }; + description = + helpers.defaultNullOpts.mkDesc + { + "vim.diagnostic.severity.ERROR" = { + enabled = false; + icon = " "; + }; + "vim.diagnostic.severity.HINT" = { + enabled = false; + icon = "󰌶 "; + }; + "vim.diagnostic.severity.INFO" = { + enabled = false; + icon = " "; + }; + "vim.diagnostic.severity.WARN" = { + enabled = false; + icon = " "; + }; + } + '' + Set the icon for each diagnostic level. + + The keys will be automatically translated to raw lua: + ```nix + { + "vim.diagnostic.severity.INFO".enabled = true; + "vim.diagnostic.severity.WARN".enabled = true; + } + ``` + will result in the following lua: + ```lua + { + -- Note the table keys are not string literals: + [vim.diagnostic.severity.INFO] = { ['enabled'] = true }, + [vim.diagnostic.severity.WARN] = { ['enabled'] = true }, + } + ``` + ''; + }; + + gitsigns = + helpers.defaultNullOpts.mkAttrsOf + ( + with types; + submodule { + freeformType = with types; attrsOf anything; + options = { + enabled = helpers.defaultNullOpts.mkBool true '' + Enables showing git changes of this type. + Requires `|gitsigns.nvim|`. + ''; + + icon = helpers.mkNullOrStr '' + The icon which accompanies the number of git status. + + To disable the icon but still show the count, set to an empty string. + ''; + }; + } + ) + { + added = { + enabled = true; + icon = "+"; + }; + changed = { + enabled = true; + icon = "~"; + }; + deleted = { + enabled = true; + icon = "-"; + }; + } + "Gitsigns icons."; + + filename = helpers.defaultNullOpts.mkBool true '' + If `true`, show the name of the file. + ''; + + filetype = { + custom_colors = helpers.defaultNullOpts.mkBool false '' + If `true`, the `BufferIcon` color will be used for icon colors. + ''; + + enabled = helpers.defaultNullOpts.mkBool true '' + Filetype `true`, show the `devicons` for the associated buffer's `filetype`. + ''; + }; + + separator = { + left = helpers.defaultNullOpts.mkStr "▎" '' + The left separator between buffers in the tabline. + ''; + + right = helpers.defaultNullOpts.mkStr "" '' + The right separator between buffers in the tabline. + ''; + + separator_at_end = helpers.defaultNullOpts.mkBool true '' + If true, add an additional separator at the end of the buffer list. + Can be used to create a visual separation when the inactive buffer background color is the + same as the fill region background color. + ''; + }; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + modified = helpers.defaultNullOpts.mkAttrsOf types.anything { button = "●"; } '' + The icons which should be used for a 'modified' buffer. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc). + ''; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + pinned = + helpers.defaultNullOpts.mkAttrsOf types.anything + { + button = false; + filename = false; + separator.right = " "; + } + '' + The icons which should be used for a pinned buffer. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc). + ''; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + alternate = helpers.mkNullOrOption (with helpers.nixvimTypes; maybeRaw (attrsOf anything)) '' + The icons which should be used for the `|alternate-file|`. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc) as well as + `modified` and `pinned`. + ''; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + current = helpers.mkNullOrOption (with helpers.nixvimTypes; maybeRaw (attrsOf anything)) '' + The icons which should be used for current buffer. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc) as well as + `modified` and `pinned`. + ''; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + inactive = + helpers.defaultNullOpts.mkAttrsOf types.anything + { + separator = { + left = "▎"; + right = ""; + }; + } + '' + The icons which should be used for `|hidden-buffer|`s and `|inactive-buffer|`s. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc) as well as + `modified` and `pinned`. + ''; + + # Knowingly not bothering declaring all sub-options: + # - It would make the module way more complex + # - Most users will not be setting a lot of options under this category + # -> `attrsOf anything` + visible = helpers.mkNullOrOption (with helpers.nixvimTypes; maybeRaw (attrsOf anything)) '' + The icons which should be used for `|active-buffer|`s. + Supports all the base options (e.g. `buffer_index`, `filetype.enabled`, etc) as well as + `modified` and `pinned`. + ''; + + preset = + helpers.defaultNullOpts.mkEnumFirstDefault + [ + "default" + "powerline" + "slanted" + ] + '' + Base all `|barbar-setup.icons|` configuration off of this set of defaults. + + - `'default'`: the classic `|barbar.nvim|` look. + - `'powerline'`: like (https://github.com/powerline/powerline) + - `'slanted'`: like old Google Chrome tabs + ''; + }; + + insert_at_start = helpers.defaultNullOpts.mkBool false '' + If `true`, new buffers appear at the start of the list. + Default is to open after the current buffer. + + Has priority over `insert_at_end`. + ''; + + insert_at_end = helpers.defaultNullOpts.mkBool false '' + If `true`, new buffers appear at the end of the list. + Default is to open after the current buffer. ''; letters = helpers.defaultNullOpts.mkStr "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP" '' New buffer letters are assigned in this order. - This order is optimal for the qwerty keyboard layout but might need adjustment for other layouts. + This order is optimal for the QWERTY keyboard layout but might need adjustment for other layouts. ''; - sidebarFiletypes = helpers.mkNullOrOption ( - with types; - attrsOf ( - either (enum [ true ]) ( - types.submodule { - options = { - text = helpers.mkNullOrOption types.str "The text used for the offset"; + maximum_padding = helpers.defaultNullOpts.mkUnsignedInt 4 '' + Sets the maximum padding width with which to surround each tab. + ''; - event = helpers.mkNullOrOption types.str "The event which the sidebar executes when leaving."; - }; - } - ) - ) - ) "Set the filetypes which barbar will offset itself for"; + maximum_length = helpers.defaultNullOpts.mkUnsignedInt 30 '' + Sets the maximum buffer name length. + ''; - noNameTitle = helpers.mkNullOrOption types.str '' + minimum_length = helpers.defaultNullOpts.mkUnsignedInt 0 '' + Sets the minimum buffer name length. + ''; + + minimum_padding = helpers.defaultNullOpts.mkUnsignedInt 1 '' + Sets the minimum padding width with which to surround each tab. + ''; + + no_name_title = helpers.defaultNullOpts.mkStr null '' Sets the name of unnamed buffers. - By default format is "[Buffer X]" where X is the buffer number. - But only a static string is accepted here. + + By default format is `'[Buffer X]'` where `X` is the buffer number. + However, only a static string is accepted here. ''; - keymaps = - { - silent = mkEnableOption "silent keymaps for barbar"; - } - // (mapAttrs ( - optionName: funcName: helpers.mkNullOrOption types.str "Keymap for function Buffer${funcName}" - ) keymapsActions); + semantic_letters = helpers.defaultNullOpts.mkBool true '' + If `true`, the letters for each buffer in buffer-pick mode will be assigned based on their name. + + Otherwise (or in case all letters are already assigned), the behavior is to assign letters in + the order of provided to `letters`. + ''; + + sidebar_filetypes = helpers.defaultNullOpts.mkAttrsOf ( + with types; + either (enum [ true ]) (submodule { + freeformType = with types; attrsOf anything; + options = { + align = + helpers.defaultNullOpts.mkEnumFirstDefault + [ + "left" + "center" + "right" + ] + '' + Aligns the `sidebar_filetypes..text`. + ''; + + event = helpers.defaultNullOpts.mkStr "BufWinLeave" '' + The event which the sidebar executes when leaving. + The `event` which is `|autocmd-execute|`d when the sidebar closes. + ''; + + text = helpers.defaultNullOpts.mkStr null '' + The text which will fill the offset. + ''; + }; + }) + ) { } "Control which filetypes will cause barbar to add an offset."; + + tabpages = helpers.defaultNullOpts.mkBool true '' + Enable/disable current/total tabpages indicator (top right corner). + ''; }; - config = - let - setupOptions = { - inherit (cfg) animation; - auto_hide = cfg.autoHide; - inherit (cfg) tabpages; - inherit (cfg) clickable; - exclude_ft = cfg.excludeFileTypes; - exclude_name = cfg.excludeFileNames; - focus_on_close = cfg.focusOnClose; - highlight_alternate = cfg.highlightAlternate; - highlight_inactive_file_icons = cfg.highlightInactiveFileIcons; - highlight_visible = cfg.highlightVisible; - icons = - let - handleBufferOption = - bufferOption: with bufferOption; { - buffer_index = bufferIndex; - buffer_number = bufferNumber; - inherit button; - diagnostics = - /* - Because the keys of this lua table are not strings (but - `vim.diagnostic.severity.XXXX`), we have to manually build a raw lua string here. - */ - let - setIcons = filterAttrs (n: v: v != null) cfg.icons.diagnostics; - setIconsList = mapAttrsToList (name: value: { - key = "vim.diagnostic.severity.${strings.toUpper name}"; - value = helpers.ifNonNull' value ( - helpers.toLuaObject { - enabled = value.enable; - inherit (value) icon; - } - ); - }) setIcons; - in - helpers.mkRaw ( - "{" - + concatStringsSep "," (map (iconOption: "[${iconOption.key}] = ${iconOption.value}") setIconsList) - + "}" - ); - filetype = with filetype; { - custom_color = customColors; - enabled = enable; - }; - inherit separator; - }; - - handleStateOption = - stateOption: - with stateOption; - { - modified = handleBufferOption modified; - pinned = handleBufferOption pinned; - } - // (handleBufferOption (getAttrs (attrNames stateOption) stateOption)); - in - (handleStateOption (getAttrs (attrNames stateOptions) cfg.icons)) - // (genAttrs [ - "alternate" - "current" - "inactive" - "visible" - ] (optionName: handleStateOption cfg.icons.${optionName})); - inherit (cfg) hide; - insert_at_end = cfg.insertAtEnd; - insert_at_start = cfg.insertAtStart; - maximum_padding = cfg.maximumPadding; - minimum_padding = cfg.minimumPadding; - maximum_length = cfg.maximumLength; - semantic_letters = cfg.semanticLetters; - inherit (cfg) letters; - no_name_title = cfg.noNameTitle; - sidebar_filetypes = cfg.sidebarFiletypes; - } // cfg.extraOptions; - - keymaps = flatten ( - mapAttrsToList ( - optionName: funcName: - let - key = cfg.keymaps.${optionName}; - in - optional (key != null) { - mode = "n"; - inherit key; - action = "Buffer${funcName}"; - options.silent = cfg.keymaps.silent; - } - ) keymapsActions - ); - in - mkIf cfg.enable { - extraPlugins = with pkgs.vimPlugins; [ - cfg.package - nvim-web-devicons - ]; - - inherit keymaps; - - extraConfigLua = '' - require('barbar').setup(${helpers.toLuaObject setupOptions}) - ''; + settingsExample = { + animation = false; + exclude_ft = [ + "oil" + "qf" + "fugitive" + ]; + exclude_name = [ "UnicodeTable.txt" ]; + icons = { + button = false; + separator_at_end = false; }; + highlight_alternate = true; + }; } diff --git a/tests/test-sources/plugins/bufferlines/barbar.nix b/tests/test-sources/plugins/bufferlines/barbar.nix index 39b71559..1680e92b 100644 --- a/tests/test-sources/plugins/bufferlines/barbar.nix +++ b/tests/test-sources/plugins/bufferlines/barbar.nix @@ -8,11 +8,12 @@ enable = true; keymaps = { - silent = true; - - next = ""; - previous = ""; - close = ""; + next.key = ""; + previous.key = ""; + close = { + key = ""; + options.desc = "Barbar close tab"; + }; }; }; }; @@ -21,51 +22,200 @@ plugins.barbar = { enable = true; - animation = true; - autoHide = false; - clickable = true; - excludeFileTypes = [ ]; - excludeFileNames = [ ]; - focusOnClose = "left"; - hide = { }; - highlightAlternate = false; - highlightInactiveFileIcons = false; - highlightVisible = true; - icons = { - bufferIndex = false; - bufferNumber = false; - button = ""; - diagnostics = { }; - filetype = { - enable = true; + settings = { + animation = true; + auto_hide = -1; + clickable = true; + exclude_ft = [ ]; + exclude_name = [ ]; + focus_on_close = "left"; + hide = { + alternate = false; + current = false; + extensions = false; + inactive = false; + visible = false; }; - inactive = { + highlight_alternate = false; + highlight_inactive_file_icons = false; + highlight_visible = true; + icons = { + buffer_index = false; + buffer_number = false; + button = ""; + diagnostics = { + "vim.diagnostic.severity.ERROR" = { + enabled = false; + icon = " "; + }; + "vim.diagnostic.severity.HINT" = { + enabled = false; + icon = "󰌶 "; + }; + "vim.diagnostic.severity.INFO" = { + enabled = false; + icon = " "; + }; + "vim.diagnostic.severity.WARN" = { + enabled = false; + icon = " "; + }; + }; + gitsigns = { + added = { + enabled = true; + icon = "+"; + }; + changed = { + enabled = true; + icon = "~"; + }; + deleted = { + enabled = true; + icon = "-"; + }; + }; + filename = true; + filetype = { + custom_colors = false; + enabled = true; + }; + separator = { + left = "▎"; + right = ""; + separator_at_end = true; + }; + pinned = { + button = false; + filename = false; + separator.right = " "; + }; + alternate = { }; + current = { }; + inactive = { }; + visible = { }; + preset = "default"; + }; + insert_at_start = false; + insert_at_end = false; + letters = "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP"; + maximum_padding = 4; + maximum_length = 30; + minimum_length = 0; + minimum_padding = 1; + no_name_title = null; + semantic_letters = true; + sidebar_filetypes = { }; + tabpages = true; + }; + }; + }; + + readme-example = { + plugins.barbar = { + enable = true; + + settings = { + animation = true; + auto_hide = false; + tabpages = true; + clickable = true; + exclude_ft = [ "javascript" ]; + exclude_name = [ "package.json" ]; + focus_on_close = "left"; + hide = { + extensions = true; + inactive = true; + }; + highlight_alternate = false; + highlight_inactive_file_icons = false; + highlight_visible = true; + icons = { + buffer_index = false; + buffer_number = false; + button = ""; + diagnostics = { + "vim.diagnostic.severity.ERROR" = { + enabled = true; + icon = "ff"; + }; + "vim.diagnostic.severity.WARN".enabled = false; + "vim.diagnostic.severity.INFO".enabled = false; + "vim.diagnostic.severity.HINT".enabled = true; + }; + gitsigns = { + added = { + enabled = true; + icon = "+"; + }; + changed = { + enabled = true; + icon = "~"; + }; + deleted = { + enabled = true; + icon = "-"; + }; + }; + filetype = { + custom_colors = false; + enabled = true; + }; separator = { left = "▎"; right = ""; }; + separator_at_end = true; + modified = { + button = "●"; + }; + pinned = { + button = ""; + filename = true; + }; + preset = "default"; + alternate = { + filetype = { + enabled = false; + }; + }; + current = { + buffer_index = true; + }; + inactive = { + button = "×"; + }; + visible = { + modified = { + buffer_number = false; + }; + }; }; - modified = { - button = "●"; - }; - pinned = { - button = ""; - }; - separator = { - left = "▎"; - right = ""; + insert_at_end = false; + insert_at_start = false; + maximum_padding = 1; + minimum_padding = 1; + maximum_length = 30; + minimum_length = 0; + semantic_letters = true; + sidebar_filetypes = { + NvimTree = true; + undotree = { + text = "undotree"; + align = "center"; + }; + neo-tree = { + event = "BufWipeout"; + }; + Outline = { + event = "BufWinLeave"; + text = "symbols-outline"; + align = "right"; + }; }; + letters = "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP"; + no_name_title = null; }; - insertAtEnd = false; - insertAtStart = false; - letters = "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP"; - maximumLength = 30; - maximumPadding = 4; - minimumPadding = 1; - noNameTitle = null; - semanticLetters = true; - sidebarFiletypes = { }; - tabpages = true; }; }; }