Compare commits

...

32 Commits

Author SHA1 Message Date
raf d3ef353557
Merge 2bfedb14dc into 3f5ed9e979 2024-07-03 22:43:01 -04:00
Ching Pei Yang 3f5ed9e979
languages/go: use `dap-go` for dap configurations (#319)
* deps: add nvim-dap-go

* go: use dap-go plugin for dap configurations

* docs: update release notes

---------

Co-authored-by: Pei Yang Ching <pei.ching@check24.de>
2024-07-03 18:42:26 +00:00
Frothy 9c4aabd0a6
Merge pull request #305 from diniamo/finish-bufferline-setupopts
tabline/bufferline: add missing options, add back bindings
2024-06-28 15:19:21 -04:00
diniamo a20d860b45 docs: add release note entry for bufferline setupOpts 2024-06-28 16:45:37 +02:00
diniamo 72ff44c1eb tabline/bufferline: fix default value of `highlights` 2024-06-28 16:09:19 +02:00
diniamo dde2b5cac4 tabline/bufferline: add missing separator_style variations 2024-06-27 10:03:22 +02:00
diniamo d9a62eff17 fixup! tabline/bufferline: add separator_style 2024-06-27 10:03:22 +02:00
diniamo 7df75f5b55 tabline/bufferline: fix grammar mistakes 2024-06-27 10:03:22 +02:00
diniamo 71064e8865 tabline/bufferline: enable auto_toggle_bufferline by default
This is due because this function is also used to show the bar intially.
2024-06-27 10:03:22 +02:00
diniamo 42447cd3bf tabline/bufferline: add highlights 2024-06-27 10:03:22 +02:00
diniamo c66854fc7f tabline/bufferline: add separator_style 2024-06-27 10:03:21 +02:00
diniamo 187d924509 tabline/bufferline: fix default mode 2024-06-27 10:03:21 +02:00
Ching Pei Yang 415954595e lib/lua: picked wrong conflict version 2024-06-27 10:03:21 +02:00
diniamo 83b7632297 tabline/bufferline: add back bindings 2024-06-27 10:03:21 +02:00
diniamo c96181e739 tabline/bufferline: add missing options 2024-06-27 10:03:21 +02:00
Frothy 506b29c726 lib: avoid filtering null values to be used as nil 2024-06-27 10:03:21 +02:00
NotAShelf 954470581e tabline/bufferline: convert to setupOpts
this is pretty much WIP and contains a bunch of bugs that I haven't tackled yet.
2024-06-27 10:03:21 +02:00
raf b0af809b95
Merge pull request #320 from diniamo/catppuccin-set-term-colors
themes/catppuccin: set term colors
2024-06-26 17:55:36 +00:00
NotAShelf 1bb901edeb
languages/clang: unpin clang-tools package 2024-06-25 22:32:12 +03:00
diniamo bb2a78272b themes/catppuccin: set term colors 2024-06-25 19:19:58 +02:00
raf 155bc8e1cc
Merge pull request #317 from diniamo/autopairs-use-booltostring
modules/autopairs: use boolToString instead of toLuaObject
2024-06-25 12:12:40 +00:00
diniamo a145f997f3 modules/autopairs: use boolToString instead of toLuaObject 2024-06-25 14:01:44 +02:00
raf 688a457a3d
Merge pull request #316 from diniamo/fix-autopairs-cr
modules/nvim-cmp: add edge case for autopairs in cr mapping
2024-06-25 09:09:04 +00:00
diniamo c2c85d70ee modules/nvim-cmp: add edge case for autopairs in cr mapping 2024-06-25 11:06:18 +02:00
raf 335fbea0c0
Merge pull request #315 from FrothyMarrow/fix-smartcolumn
ui/smartcolumn: change `custom_colorcolumn` type to expected type string
2024-06-24 20:06:54 +00:00
Frothy 216cb34caf docs: add entry for changed `smartcolumn.setupOpts.custom_colorcolumn` type 2024-06-24 14:26:00 -04:00
Frothy 2e99a21010 ui/smartcolumn: change `custom_colorcolumn` type to expected type string 2024-06-24 14:23:55 -04:00
NotAShelf 2bfedb14dc
flake/tests: also expose nixos machine tests as a package 2024-05-09 00:54:29 +03:00
NotAShelf aa62e904d6
flake/tests: pass testProfile as a shared arg 2024-05-06 23:30:48 +03:00
NotAShelf c3c76afda4
flake/tests: initial test script 2024-05-06 17:25:58 +03:00
NotAShelf 198a36f3d4
flake/tests: add missing imports 2024-05-06 16:43:05 +03:00
NotAShelf 3aa02e8524
flake: add machine tests 2024-05-06 16:13:38 +03:00
17 changed files with 658 additions and 153 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
result
result/
.direnv
.nixos-test-history
# Ignore files generated by common IDEs
.vscode/*

View File

@ -222,10 +222,10 @@ inputs: let
enable = true;
setupOpts.custom_colorcolumn = {
# this is a freeform module, it's `buftype = int;` for configuring column position
nix = 110;
ruby = 120;
java = 130;
go = [90 130];
nix = "110";
ruby = "120";
java = "130";
go = ["90" "130"];
};
};
};

View File

@ -12,18 +12,24 @@ Release notes for release 0.7
[frothymarrow](https://github.com/frothymarrow):
- Modified type for
[](#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides) from
`anything` to a `submodule` for better type checking.
[vim.visuals.fidget-nvim.setupOpts.progress.display.overrides](#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides)
from `anything` to a `submodule` for better type checking.
- Fix null `vim.lsp.mappings` generating an error and not being filtered out.
- Add basic transparency support for `oxocarbon` theme by setting the highlight
group for `Normal`, `NormalFloat`, `LineNr`, `SignColumn` and optionally
`NvimTreeNormal` to `none`.
- Fix [vim.ui.smartcolumn.setupOpts.custom_colorcolumn](#opt-vim.ui.smartcolumn.setupOpts.custom_colorcolumn)
using the wrong type `int` instead of the expected type `string`.
[horriblename](https://github.com/horriblename):
- Fix broken treesitter-context keybinds in visual mode
- Deprecate use of `__empty` to define empty tables in lua. Empty attrset are no
longer filtered and thus should be used instead.
- Add dap-go for better dap configurations
[jacekpoz](https://github.com/jacekpoz):
@ -35,9 +41,13 @@ Release notes for release 0.7
- Move the `theme` dag entry to before `luaScript`.
- Add rustfmt as the default formatter for Rust
- Add rustfmt as the default formatter for Rust.
[NotAShelf](https://github.com/notashelf)
- Enabled the terminal integration of catppuccin for theming Neovim's built-in terminal (this also affects toggleterm).
- Migrate bufferline to setupOpts for more customizability
[NotAShelf](https://github.com/notashelf):
- Add `deno fmt` as the default Markdown formatter. This will be enabled
automatically if you have autoformatting enabled, but can be disabled manually

View File

@ -67,6 +67,26 @@
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1714981474,
"narHash": "sha256-b3/U21CJjCjJKmA9WqUbZGZgCvospO3ArOUTgJugkOY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "6ebe7be2e67be7b9b54d61ce5704f6fb466c536f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": [
@ -1069,6 +1089,22 @@
"type": "github"
}
},
"plugin-nvim-dap-go": {
"flake": false,
"locked": {
"lastModified": 1716775637,
"narHash": "sha256-B8A+ven18YgePLxAN3Q/j5NFb0FeTHCQak1uzaNDX9c=",
"owner": "leoluz",
"repo": "nvim-dap-go",
"rev": "a0c5a2b991d7e9304a9a032cf177e22a4b0acda1",
"type": "github"
},
"original": {
"owner": "leoluz",
"repo": "nvim-dap-go",
"type": "github"
}
},
"plugin-nvim-dap-ui": {
"flake": false,
"locked": {
@ -1765,6 +1801,7 @@
"inputs": {
"flake-parts": "flake-parts",
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"nil": "nil",
"nixpkgs": "nixpkgs",
"nmd": "nmd",
@ -1823,6 +1860,7 @@
"plugin-nvim-colorizer-lua": "plugin-nvim-colorizer-lua",
"plugin-nvim-cursorline": "plugin-nvim-cursorline",
"plugin-nvim-dap": "plugin-nvim-dap",
"plugin-nvim-dap-go": "plugin-nvim-dap-go",
"plugin-nvim-dap-ui": "plugin-nvim-dap-ui",
"plugin-nvim-docs-view": "plugin-nvim-docs-view",
"plugin-nvim-lightbulb": "plugin-nvim-lightbulb",

View File

@ -14,6 +14,8 @@
imports = [
# add lib to module args
{_module.args = {inherit (nixpkgs) lib;};}
./flake/tests # machine tests for nvf
./flake/apps.nix
./flake/legacyPackages.nix
./flake/overlays.nix
@ -88,6 +90,12 @@
flake = false;
};
# Primarily used for testing nvf.
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
# TODO: get zig from the zig overlay instead of nixpkgs
zig.url = "github:mitchellh/zig-overlay";
@ -216,6 +224,11 @@
flake = false;
};
plugin-nvim-dap-go = {
url = "github:leoluz/nvim-dap-go";
flake = false;
};
# Filetrees
plugin-nvim-tree-lua = {
url = "github:nvim-tree/nvim-tree.lua";

View File

@ -0,0 +1,33 @@
{
inputs,
nixosTest,
homeManagerModules,
testProfile,
...
}:
nixosTest {
name = "home-manager-test";
skipLint = true;
nodes.machine = {
imports = [
testProfile
inputs.home-manager.nixosModules.home-manager
];
config = {
home-manager = {
sharedModules = [
homeManagerModules.nvf
];
users.test = {
home.stateVersion = "24.05";
programs.nvf.enable = true;
};
};
};
};
testScript = "";
}

View File

@ -0,0 +1,56 @@
{
nixosTest,
nixosModules,
testProfile,
...
}:
nixosTest {
name = "nixos-test";
nodes.machine = {
imports = [
testProfile
nixosModules.nvf
];
config = {
programs.nvf.enable = true;
};
};
testScript = ''
import subprocess
machine.wait_for_unit("default.target")
def check_errs(process):
# Check for errors
print("Connecting to Neovim process")
# Capture stdout and stderr
stdout, stderr = process.communicate()
# Print captured stdout and stderr
if stdout:
print("Captured stdout:")
print(stdout.decode('utf-8'))
if stderr:
print("Captured stderr:")
print(stderr.decode('utf-8'))
def run_neovim_headless():
print("Running Neovim in headless mode.")
# Run Neovim in headless mode
nvim_process = subprocess.Popen(['nvim', '--headless'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
check_errs(nvim_process)
# Load configuration file
nvim_process.stdin.write(b':NonExistentCommand\n')
nvim_process.stdin.flush()
# run Neovim in headless mode
# and expect it to return sucessfully
machine.succeed(run_neovim_headless())
'';
}

35
flake/tests/default.nix Normal file
View File

@ -0,0 +1,35 @@
{
inputs,
config,
lib,
...
}: {
perSystem = {
pkgs,
self',
...
}: let
inherit (lib.filesystem) packagesFromDirectoryRecursive;
inherit (lib.customisation) callPackageWith;
inherit (lib.attrsets) recursiveUpdate;
defaultInherits = {
inherit (config.flake) homeManagerModules nixosModules;
inherit inputs;
testProfile = ./profiles/minimal.nix;
};
callPackage = callPackageWith (recursiveUpdate pkgs defaultInherits);
in {
checks = packagesFromDirectoryRecursive {
inherit callPackage;
directory = ./checks;
};
# expose checks as packages to be built
packages = {
test-home-manager-module = self'.checks.homeManagerModule.driverInteractive;
test-nixos-module = self'.checks.nixosModule.driverInteractive;
};
};
}

View File

@ -0,0 +1,13 @@
{
# he's a thicc boi
virtualisation = {
cores = 2;
memorySize = 2048;
qemu.options = ["-vga none -enable-kvm -device virtio-gpu-pci,xres=720,yres=1440"];
};
users.users.test = {
isNormalUser = true;
password = "";
};
}

View File

@ -4,9 +4,8 @@
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString;
inherit (lib.trivial) boolToString;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.autopairs;
in {
@ -14,7 +13,7 @@ in {
vim.startPlugins = ["nvim-autopairs"];
vim.luaConfigRC.autopairs = entryAnywhere ''
require("nvim-autopairs").setup{}
require("nvim-autopairs").setup({ map_cr = ${boolToString (!config.vim.autocomplete.enable)} })
'';
};
}

View File

@ -61,15 +61,19 @@ in {
(mkSetLuaBinding mappings.complete ''
require('cmp').complete
'')
(mkSetLuaBinding mappings.confirm ''
function()
if not require('cmp').confirm({ select = true }) then
local termcode = vim.api.nvim_replace_termcodes(${toJSON mappings.confirm.value}, true, false, true)
vim.fn.feedkeys(termcode, 'n')
(let
defaultKeys =
if config.vim.autopairs.enable
then "require('nvim-autopairs').autopairs_cr()"
else "vim.api.nvim_replace_termcodes(${toJSON mappings.confirm.value}, true, false, true)";
in
mkSetLuaBinding mappings.confirm ''
function()
if not require('cmp').confirm({ select = true }) then
vim.fn.feedkeys(${defaultKeys}, 'n')
end
end
end
'')
'')
(mkSetLuaBinding mappings.next ''
function()
local has_words_before = function()

View File

@ -35,7 +35,7 @@
'';
};
clangd = {
package = pkgs.clang-tools_16;
package = pkgs.clang-tools;
lspConfig = ''
local clangd_cap = capabilities
-- use same offsetEncoding as null-ls

View File

@ -12,6 +12,7 @@
inherit (lib.types) bool enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.languages.go;
@ -37,40 +38,6 @@
debuggers = {
delve = {
package = pkgs.delve;
dapConfig = ''
dap.adapters.delve = {
type = "server",
port = "''${port}",
executable = {
command = "${getExe cfg.dap.package}",
args = { "dap", "-l", "127.0.0.1:''${port}" },
},
}
dap.configurations.go = {
{
type = "delve",
name = "Debug",
request = "launch",
program = "''${file}",
},
{
type = "delve",
name = "Debug test", -- configuration for debugging test files
request = "launch",
mode = "test",
program = "''${file}",
},
-- works with go.mod packages and sub packages
{
type = "delve",
name = "Debug test (go.mod)",
request = "launch",
mode = "test",
program = "./''${relativeFileDirname}",
},
}
'';
};
};
in {
@ -102,15 +69,17 @@ in {
dap = {
enable = mkOption {
description = "Enable Go Debug Adapter";
description = "Enable Go Debug Adapter via nvim-dap-go plugin";
type = bool;
default = config.vim.languages.enableDAP;
};
debugger = mkOption {
description = "Go debugger to use";
type = enum (attrNames debuggers);
default = defaultDebugger;
};
package = mkOption {
description = "Go debugger package.";
type = package;
@ -131,8 +100,17 @@ in {
})
(mkIf cfg.dap.enable {
vim.debugger.nvim-dap.enable = true;
vim.debugger.nvim-dap.sources.go-debugger = debuggers.${cfg.dap.debugger}.dapConfig;
vim = {
startPlugins = ["nvim-dap-go"];
luaConfigRC.nvim-dap-go = entryAfter ["nvim-dap"] ''
require('dap-go').setup {
delve = {
path = '${getExe cfg.dap.package}',
}
}
'';
debugger.nvim-dap.enable = true;
};
})
]);
}

View File

@ -6,101 +6,42 @@
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 (
let
mouse = {
right = "'vertical sbuffer %d'";
close = ''
function(bufnum)
require("bufdelete").bufdelete(bufnum, false)
end
'';
config = mkIf cfg.enable {
vim = {
startPlugins = [
(assert config.vim.visuals.nvimWebDevicons.enable; "nvim-bufferline-lua")
"bufdelete-nvim"
];
maps.normal = mkMerge [
(mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description)
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
(mkBinding cfg.mappings.cyclePrevious ":BufferLineCyclePrev<CR>" mappings.cyclePrevious.description)
(mkBinding cfg.mappings.pick ":BufferLinePick<CR>" mappings.pick.description)
(mkBinding cfg.mappings.sortByExtension ":BufferLineSortByExtension<CR>" mappings.sortByExtension.description)
(mkBinding cfg.mappings.sortByDirectory ":BufferLineSortByDirectory<CR>" 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<CR>" mappings.moveNext.description)
(mkBinding cfg.mappings.movePrevious ":BufferLineMovePrev<CR>" mappings.movePrevious.description)
];
binds.whichKey.register = pushDownDefault {
"<leader>b" = "+Buffer";
"<leader>bm" = "BufferLineMove";
"<leader>bs" = "BufferLineSort";
"<leader>bsi" = "BufferLineSortById";
};
in {
vim = {
startPlugins = [
(assert config.vim.visuals.nvimWebDevicons.enable; "nvim-bufferline-lua")
"bufdelete-nvim"
];
maps.normal = mkMerge [
(mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description)
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
(mkBinding cfg.mappings.cyclePrevious ":BufferLineCyclePrev<CR>" mappings.cyclePrevious.description)
(mkBinding cfg.mappings.pick ":BufferLinePick<CR>" mappings.pick.description)
(mkBinding cfg.mappings.sortByExtension ":BufferLineSortByExtension<CR>" mappings.sortByExtension.description)
(mkBinding cfg.mappings.sortByDirectory ":BufferLineSortByDirectory<CR>" 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<CR>" mappings.moveNext.description)
(mkBinding cfg.mappings.movePrevious ":BufferLineMovePrev<CR>" mappings.movePrevious.description)
];
binds.whichKey.register = pushDownDefault {
"<leader>b" = "+Buffer";
"<leader>bm" = "BufferLineMove";
"<leader>bs" = "BufferLineSort";
"<leader>bsi" = "BufferLineSortById";
};
luaConfigRC.nvimBufferline = entryAnywhere ''
require("bufferline").setup{
options = {
mode = "buffers",
numbers = "both",
close_command = ${mouse.close},
right_mouse_command = ${mouse.right},
indicator = {
style = 'icon',
indicator_icon = '',
},
buffer_close_icon = '󰅖',
modified_icon = '',
close_icon = '',
left_trunc_marker = '',
right_trunc_marker = '',
max_name_length = 18,
max_prefix_length = 15,
tab_size = 18,
show_buffer_icons = true,
show_buffer_close_icons = true,
show_close_icon = true,
show_tab_indicators = true,
persist_buffer_sort = true,
--separator_style = "thin",
separator_style = { " ", " " },
enforce_regular_tabs = true,
always_show_bufferline = true,
offsets = {
{filetype = "NvimTree", text = "File Explorer", text_align = "center"}
},
sort_by = 'extension',
diagnostics = "nvim_lsp", -- TODO: use coc if it's enabled
diagnostics_update_in_insert = true,
diagnostics_indicator = function(count, level, diagnostics_dict, context)
local s = ""
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and ""
or (e == "warning" and "" or "" )
if(sym ~= "") then
s = s .. " " .. n .. sym
end
end
return s
end,
numbers = function(opts)
return string.format('%s·%s', opts.raise(opts.id), opts.lower(opts.ordinal))
end,
}
}
'';
};
}
);
luaConfigRC.nvimBufferline = entryAnywhere ''
require("bufferline").setup(${toLuaObject cfg.setupOpts})
'';
};
};
}

View File

@ -1,6 +1,9 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) enum bool either nullOr str int listOf attrs;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
in {
options.vim.tabline.nvimBufferline = {
enable = mkEnableOption "neovim bufferline";
@ -16,5 +19,385 @@ in {
moveNext = mkMappingOption "Move next buffer" "<leader>bmn";
movePrevious = mkMappingOption "Move previous buffer" "<leader>bmp";
};
setupOpts = mkPluginSetupOption "Bufferline-nvim" {
highlights = mkOption {
type = either attrs luaInline;
default = {};
description = ''
Overrides the highlight groups of bufferline.
See `:help bufferline-highlights`.
'';
};
options = {
mode = mkOption {
type = enum ["tabs" "buffers"];
default = "buffers";
description = "Mode to use for bufferline";
};
style_preset = mkOption {
type = enum ["default" "minimal" "no_bold" "no_italic"];
default = "default";
apply = value: mkLuaInline "require('bufferline').style_preset.${value}";
description = "The base style of bufferline";
};
themable = mkOption {
type = bool;
default = true;
description = ''
Whether or not to allow highlight groups to be overriden.
While false, bufferline.nvim sets highlights as default.
'';
};
numbers = mkOption {
type = either (enum ["none" "ordinal" "buffer_id" "both"]) luaInline;
default = mkLuaInline ''
function(opts)
return string.format('%s·%s', opts.raise(opts.id), opts.lower(opts.ordinal))
end
'';
description = "Whether or not to show buffer numbers";
};
close_command = mkOption {
type = either str luaInline;
default = mkLuaInline ''
function(bufnum)
require("bufdelete").bufdelete(bufnum, false)
end
'';
description = "Command to run when closing a buffer";
};
right_mouse_command = mkOption {
type = nullOr (either str luaInline);
default = "vertical sbuffer %d";
description = "Command to run when right clicking a buffer";
};
left_mouse_command = mkOption {
type = nullOr (either str luaInline);
default = "buffer %d";
description = "Command to run when left clicking a buffer";
};
middle_mouse_command = mkOption {
type = nullOr (either str luaInline);
default = null;
description = "Command to run when middle clicking a buffer";
};
indicator = {
icon = mkOption {
type = nullOr str;
default = null;
description = ''
The indicatotor icon to use for the current buffer.
::: {.warning}
This **must** be ommitted while style is not `icon`
:::
'';
};
style = mkOption {
type = enum ["icon" "underline" "none"];
default = "underline";
description = "Style for indicator";
};
};
buffer_close_icon = mkOption {
type = str;
default = " 󰅖 ";
description = "Icon for close button";
};
modified_icon = mkOption {
type = str;
default = " ";
description = "Icon for modified buffer";
};
close_icon = mkOption {
type = str;
default = " ";
description = "Icon for close button";
};
left_trunc_marker = mkOption {
type = str;
default = "";
description = "Icon for left truncation";
};
right_trunc_marker = mkOption {
type = str;
default = "";
description = "Icon for right truncation";
};
name_formatter = mkOption {
type = nullOr luaInline;
default = null;
description = ''
`name_formatter` can be used to change the buffer's label in the
bufferline.
::: {.note}
Some names can/will break the bufferline so use this at your
discretion knowing that it has some limitations that will
**NOT** be fixed.
:::
'';
};
max_name_length = mkOption {
type = int;
default = 18;
description = "Max name length";
};
max_prefix_length = mkOption {
type = int;
default = 15;
description = "Length of the prefix used when a buffer is de-duplicated";
};
truncate_names = mkOption {
type = bool;
default = true;
description = "Truncate names";
};
tab_size = mkOption {
type = int;
default = 18;
description = "The size of the tabs in bufferline";
};
diagnostics = mkOption {
type = enum [false "nvim_lsp" "coc"];
default = "nvim_lsp";
description = "Diagnostics provider to be used in buffer LSP indicators";
};
diagnostics_update_in_insert = mkOption {
type = bool;
default = false;
description = ''
Whether to update diagnostics while in insert mode.
Setting this to true has performance implications, but they may be
negligible depending on your setup. Set it to true if you know what
you are doing.
'';
};
diagnostics_indicator = mkOption {
type = nullOr luaInline;
default = mkLuaInline ''
function(count, level, diagnostics_dict, context)
local s = " "
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and " "
or (e == "warning" and " " or " " )
s = s .. n .. sym
end
return s
end
'';
description = ''
Function to get the diagnostics indicator.
The function should return a string to be used as the indicator.
Can be set to nil to keep the buffer name highlight, but delete the
highlighting.
'';
};
custom_filter = mkOption {
type = nullOr luaInline;
default = null;
example = literalExpression ''
custom_filter = function(buf_number, buf_numbers)
-- filter out filetypes you don't want to see
if vim.bo[buf_number].filetype ~= "<i-dont-want-to-see-this>" then
return true
end
-- filter out by buffer name
if vim.fn.bufname(buf_number) ~= "<buffer-name-I-dont-want>" then
return true
end
-- filter out based on arbitrary rules
-- e.g. filter out vim wiki buffer from tabline in your work repo
if vim.fn.getcwd() == "<work-repo>" and vim.bo[buf_number].filetype ~= "wiki" then
return true
end
-- filter out by it's index number in list (don't show first buffer)
if buf_numbers[1] ~= buf_number then
return true
end
end
'';
description = ''
Custom filter function for filtering out buffers.
::: {.note}
This will be called a lot, so you are encouraged to keep it as
short and lightweight as possible unless you are fully aware
of the performance implications.
:::
'';
};
offsets = mkOption {
type = listOf attrs;
default = [
{
filetype = "NvimTree";
text = "File Explorer";
highlight = "Directory";
separator = true;
}
];
description = "The windows to offset bufferline above, see `:help bufferline-offset`";
};
color_icons = mkOption {
type = bool;
default = true;
description = "Whether or not to add filetype icon highlights";
};
get_element_icon = mkOption {
type = nullOr luaInline;
default = null;
example = literalExpression ''
function(element)
local custom_map = {my_thing_ft: {icon = "my_thing_icon", hl = "DevIconDefault"}}
return custom_map[element.filetype]
end
'';
description = "The function bufferline uses to get the icon. Recommended to leave as default.";
};
show_buffer_icons = mkOption {
type = bool;
default = true;
description = "Whether or not to show buffer icons";
};
show_buffer_close_icons = mkOption {
type = bool;
default = true;
description = "Whether or not to show buffer close icons";
};
show_close_icon = mkOption {
type = bool;
default = true;
description = "Whether or not to show the close icon";
};
show_tab_indicators = mkOption {
type = bool;
default = true;
description = "Whether or not to show tab indicators";
};
show_duplicate_prefix = mkOption {
type = bool;
default = true;
description = "Whether or not to show duplicate buffer prefixes";
};
duplicates_across_groups = mkOption {
type = bool;
default = true;
description = "Whether to consider duplicate paths in different groups as duplicates";
};
persist_buffer_sort = mkOption {
type = bool;
default = true;
description = "Whether or not custom sorted buffers should persist";
};
move_wraps_at_ends = mkOption {
type = bool;
default = false;
description = "Whether or not the move command \"wraps\" at the first or last position";
};
seperator_style = mkOption {
type = either (enum ["thick" "thin" "slope" "slant"]) (listOf str);
default = [" " " "];
description = ''
Style of the buffer separator.
Can be either one of the suspported values, or a list containing
**at most** two elements for `focused` and `unfocused` respectively.
'';
};
separator_style = mkOption {
type = nullOr (either (enum ["slant" "padded_slant" "slope" "padded_slope" "thick" "thin"]) (listOf str));
default = "thin";
description = ''
The type of separator used to separate buffers and tabs.
Either one of the listed types, or a list of 2 characters for either side.
'';
};
enforce_regular_tabs = mkOption {
type = bool;
default = false;
description = "Whether to enforce regular tabs";
};
always_show_bufferline = mkOption {
type = bool;
default = true;
description = "Whether to always show bufferline";
};
auto_toggle_bufferline = mkOption {
type = bool;
default = true;
description = "Whether to auto toggle bufferline";
};
hover = {
enabled = mkEnableOption "hover" // {default = true;};
delay = mkOption {
type = int;
default = 200;
description = "Delay for hover, in ms";
};
reveal = mkOption {
type = listOf str;
default = ["close"];
description = "Reveal hover window";
};
};
sort_by = mkOption {
type = either (enum ["insert_after_current" "insert_at_end" "id" "extension" "relative_directory" "directory" "tabs"]) luaInline;
default = "extension";
description = "Method to sort buffers by. Must be one of the supported values, or an inline Lua value.";
};
};
};
};
}

View File

@ -53,6 +53,7 @@ in {
require('catppuccin').setup {
flavour = "${style}",
transparent_background = ${boolToString transparent},
term_colors = true,
integrations = {
nvimtree = {
enabled = true,

View File

@ -31,15 +31,15 @@ in {
custom_colorcolumn = mkOption {
description = "The position at which smart column should be displayed for each individual buffer type";
type = attrsOf (either int (listOf int));
type = attrsOf (either str (listOf str));
default = {};
example = literalExpression ''
vim.ui.smartcolumn.setupOpts.custom_colorcolumn = {
nix = 110;
ruby = 120;
java = 130;
go = [90 130];
nix = "110";
ruby = "120";
java = "130";
go = ["90" "130"];
};
'';
};