mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
plugins/barbar: switch to mkNeovimPlugin + update options
This commit is contained in:
parent
513b3c76e2
commit
1c270521ad
2 changed files with 733 additions and 281 deletions
|
@ -7,54 +7,6 @@
|
||||||
}:
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
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 = {
|
keymapsActions = {
|
||||||
previous = "Previous";
|
previous = "Previous";
|
||||||
next = "Next";
|
next = "Next";
|
||||||
|
@ -79,239 +31,589 @@ let
|
||||||
orderByWindowNumber = "OrderByWindowNumber";
|
orderByWindowNumber = "OrderByWindowNumber";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
helpers.neovim-plugin.mkNeovimPlugin config {
|
||||||
options.plugins.barbar = helpers.neovim-plugin.extraOptionsOptions // {
|
name = "barbar";
|
||||||
enable = mkEnableOption "barbar.nvim";
|
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 = "<Cmd>Buffer${funcName}<CR>";
|
||||||
|
};
|
||||||
|
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 ''
|
clickable = helpers.defaultNullOpts.mkBool true ''
|
||||||
Enable clickable tabs
|
If set, you can left-click on a tab to switch to that buffer, and middle-click to delete it.
|
||||||
- left-click: go to buffer
|
|
||||||
- middle-click: delete buffer
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
excludeFileTypes = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
exclude_ft = helpers.defaultNullOpts.mkListOf types.str [ ] ''
|
||||||
Excludes buffers of certain filetypes from the tabline
|
Excludes filetypes from appearing in the tabs.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
excludeFileNames = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
exclude_name = helpers.defaultNullOpts.mkListOf types.str [ ] ''
|
||||||
Excludes buffers with certain filenames from the tabline
|
Excludes buffers matching name from appearing in the tabs.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
focusOnClose =
|
focus_on_close =
|
||||||
helpers.defaultNullOpts.mkEnumFirstDefault
|
helpers.defaultNullOpts.mkEnumFirstDefault
|
||||||
[
|
[
|
||||||
"left"
|
"left"
|
||||||
|
"previous"
|
||||||
"right"
|
"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 = {
|
hide = {
|
||||||
alternate = helpers.mkNullOrOption types.bool "Hide alternate buffers";
|
alternate = helpers.defaultNullOpts.mkBool false ''
|
||||||
current = helpers.mkNullOrOption types.bool "Hide current buffer";
|
Controls the visibility of the `|alternate-file|`.
|
||||||
extensions = helpers.mkNullOrOption types.bool "Hide file extensions";
|
`highlight_alternate` must be `true`.
|
||||||
inactive = helpers.mkNullOrOption types.bool "Hide inactive buffers";
|
'';
|
||||||
visible = helpers.mkNullOrOption types.bool "Hide visible buffers";
|
|
||||||
|
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 ''
|
highlight_alternate = helpers.defaultNullOpts.mkBool false ''
|
||||||
If true, new buffers will be inserted at the end of the list.
|
Enables highlighting of alternate buffers.
|
||||||
Default is to insert after current buffer.
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
insertAtStart = helpers.defaultNullOpts.mkBool false ''
|
highlight_inactive_file_icons = helpers.defaultNullOpts.mkBool false ''
|
||||||
If true, new buffers will be inserted at the start of the list.
|
Enables highlighting the file icons of inactive buffers.
|
||||||
Default is to insert after current buffer.
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
maximumPadding =
|
highlight_visible = helpers.defaultNullOpts.mkBool true ''
|
||||||
helpers.defaultNullOpts.mkInt 4
|
Enables highlighting of visible buffers.
|
||||||
"Sets the maximum padding width with which to surround each tab";
|
'';
|
||||||
|
|
||||||
minimumPadding =
|
icons = {
|
||||||
helpers.defaultNullOpts.mkInt 1
|
buffer_index =
|
||||||
"Sets the minimum padding width with which to surround each tab";
|
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 ''
|
button = helpers.defaultNullOpts.mkNullableWithRaw (with types; either str (enum [ false ])) "" ''
|
||||||
If set, the letters for each buffer in buffer-pick mode will be assigned based on their
|
The button which is clicked to close / save a buffer, or indicate that it is pinned.
|
||||||
name.
|
Use `false` to disable it.
|
||||||
Otherwise or in case all letters are already assigned, the behavior is to assign letters in
|
'';
|
||||||
order of usability (see `letters` option)
|
|
||||||
|
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 `Buffer<status>Icon` 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" ''
|
letters = helpers.defaultNullOpts.mkStr "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP" ''
|
||||||
New buffer letters are assigned in this order.
|
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 (
|
maximum_padding = helpers.defaultNullOpts.mkUnsignedInt 4 ''
|
||||||
with types;
|
Sets the maximum padding width with which to surround each tab.
|
||||||
attrsOf (
|
'';
|
||||||
either (enum [ true ]) (
|
|
||||||
types.submodule {
|
|
||||||
options = {
|
|
||||||
text = helpers.mkNullOrOption types.str "The text used for the offset";
|
|
||||||
|
|
||||||
event = helpers.mkNullOrOption types.str "The event which the sidebar executes when leaving.";
|
maximum_length = helpers.defaultNullOpts.mkUnsignedInt 30 ''
|
||||||
};
|
Sets the maximum buffer name length.
|
||||||
}
|
'';
|
||||||
)
|
|
||||||
)
|
|
||||||
) "Set the filetypes which barbar will offset itself for";
|
|
||||||
|
|
||||||
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.
|
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 =
|
semantic_letters = helpers.defaultNullOpts.mkBool true ''
|
||||||
{
|
If `true`, the letters for each buffer in buffer-pick mode will be assigned based on their name.
|
||||||
silent = mkEnableOption "silent keymaps for barbar";
|
|
||||||
}
|
Otherwise (or in case all letters are already assigned), the behavior is to assign letters in
|
||||||
// (mapAttrs (
|
the order of provided to `letters`.
|
||||||
optionName: funcName: helpers.mkNullOrOption types.str "Keymap for function Buffer${funcName}"
|
'';
|
||||||
) keymapsActions);
|
|
||||||
|
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.<name>.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 =
|
settingsExample = {
|
||||||
let
|
animation = false;
|
||||||
setupOptions = {
|
exclude_ft = [
|
||||||
inherit (cfg) animation;
|
"oil"
|
||||||
auto_hide = cfg.autoHide;
|
"qf"
|
||||||
inherit (cfg) tabpages;
|
"fugitive"
|
||||||
inherit (cfg) clickable;
|
];
|
||||||
exclude_ft = cfg.excludeFileTypes;
|
exclude_name = [ "UnicodeTable.txt" ];
|
||||||
exclude_name = cfg.excludeFileNames;
|
icons = {
|
||||||
focus_on_close = cfg.focusOnClose;
|
button = false;
|
||||||
highlight_alternate = cfg.highlightAlternate;
|
separator_at_end = false;
|
||||||
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 = "<Cmd>Buffer${funcName}<CR>";
|
|
||||||
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})
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
highlight_alternate = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,12 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
keymaps = {
|
keymaps = {
|
||||||
silent = true;
|
next.key = "<TAB>";
|
||||||
|
previous.key = "<S-TAB>";
|
||||||
next = "<TAB>";
|
close = {
|
||||||
previous = "<S-TAB>";
|
key = "<C-w>";
|
||||||
close = "<C-w>";
|
options.desc = "Barbar close tab";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -21,51 +22,200 @@
|
||||||
plugins.barbar = {
|
plugins.barbar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
animation = true;
|
settings = {
|
||||||
autoHide = false;
|
animation = true;
|
||||||
clickable = true;
|
auto_hide = -1;
|
||||||
excludeFileTypes = [ ];
|
clickable = true;
|
||||||
excludeFileNames = [ ];
|
exclude_ft = [ ];
|
||||||
focusOnClose = "left";
|
exclude_name = [ ];
|
||||||
hide = { };
|
focus_on_close = "left";
|
||||||
highlightAlternate = false;
|
hide = {
|
||||||
highlightInactiveFileIcons = false;
|
alternate = false;
|
||||||
highlightVisible = true;
|
current = false;
|
||||||
icons = {
|
extensions = false;
|
||||||
bufferIndex = false;
|
inactive = false;
|
||||||
bufferNumber = false;
|
visible = false;
|
||||||
button = "";
|
|
||||||
diagnostics = { };
|
|
||||||
filetype = {
|
|
||||||
enable = true;
|
|
||||||
};
|
};
|
||||||
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 = {
|
separator = {
|
||||||
left = "▎";
|
left = "▎";
|
||||||
right = "";
|
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 = {
|
insert_at_end = false;
|
||||||
button = "●";
|
insert_at_start = false;
|
||||||
};
|
maximum_padding = 1;
|
||||||
pinned = {
|
minimum_padding = 1;
|
||||||
button = "";
|
maximum_length = 30;
|
||||||
};
|
minimum_length = 0;
|
||||||
separator = {
|
semantic_letters = true;
|
||||||
left = "▎";
|
sidebar_filetypes = {
|
||||||
right = "";
|
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;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue