feat: switch over to a neovim cofeat & fix & refactor: so many things. listed in desc

switch over to a neovim configuration in lua, btrtile for dwl, remove
unnecessary things, some browser addons, rofimoji, fix february flake
This commit is contained in:
2026-03-08 04:39:59 -04:00
parent 8b0466f49b
commit 1b771db0c8
30 changed files with 613 additions and 967 deletions
@@ -1,6 +0,0 @@
{...}: {
imports = [
./lsp.nix
./none-ls.nix
];
}
-125
View File
@@ -1,125 +0,0 @@
{ ... }:
{
programs.nixvim.plugins = {
lsp = {
enable = true;
inlayHints = true;
servers = {
asm_lsp.enable = true;
clangd = {
enable = true;
cmd = [
"clangd"
];
};
cssls.enable = true;
eslint.enable = true;
lua_ls = {
enable = true;
settings.telemetry.enable = false;
};
hls = {
enable = true;
installGhc = true;
settings.haskell = {
formattingProvider = "fourmolu";
};
};
html.enable = true;
jsonls.enable = true;
mlir_lsp_server.enable = true;
nil_ls.enable = true;
nixd.enable = true;
nushell.enable = true;
ocamllsp.enable = true;
pyright.enable = true;
ts_ls.enable = true;
zls.enable = true;
};
};
cmp-emoji = {
enable = true;
};
cmp = {
enable = true;
settings = {
autoEnableSources = true;
experimental = {
ghost_text = true;
};
performance = {
debounce = 60;
fetchingTimeout = 200;
};
snippet = {
expand = "luasnip";
};
formatting = {
fields = [
"kind"
"abbr"
"menu"
];
};
sources = [
{ name = "nvim_lsp"; }
{ name = "emoji"; }
{
name = "buffer"; # text within current buffer
option.get_bufnrs.__raw = "vim.api.nvim_list_bufs";
keywordLength = 3;
}
{
name = "path"; # file system paths
keywordLength = 3;
}
{
name = "luasnip"; # snippets
keywordLength = 3;
}
];
window = {
completion.__raw = "cmp.config.window.bordered()";
documentation.__raw = "cmp.config.window.bordered()";
};
mapping = {
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<C-e>" = "cmp.mapping.abort()";
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-Space>" = "cmp.mapping.complete()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-CR>" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })";
};
};
};
cmp-nvim-lsp = {
enable = true;
}; # lsp
cmp-buffer = {
enable = true;
};
cmp-path = {
enable = true;
}; # file system paths
cmp_luasnip = {
enable = true;
}; # snippets
cmp-cmdline = {
enable = false;
}; # autocomplete for cmdline
luasnip = {
enable = true;
settings = {
enable_autosnippets = true;
store_selection_keys = "<Tab>";
};
};
};
}
@@ -1,10 +0,0 @@
{ ... }:
{
programs.nixvim.plugins = {
lsp-format.enable = true;
none-ls = {
enable = true;
enableLspFormat = true;
};
};
}
+433
View File
@@ -0,0 +1,433 @@
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
vim.opt.mouse = ""
vim.opt.breakindent = true
vim.opt.expandtab = true
vim.opt.smartcase = true
vim.opt.showtabline = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.opt.wildmenu = true
vim.opt.undofile = true
vim.opt.termguicolors = true
vim.opt.shell = "fish"
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>n", "<cmd>Explore .<cr>", {})
-- Per nixvim generated configuration
vim.diagnostic.config({
float = { border = "rounded", source = "always" },
virtual_lines = { current_line = true },
virtual_text = false,
})
vim.pack.add({
"https://github.com/nvim-treesitter/nvim-treesitter",
"https://github.com/hrsh7th/nvim-cmp",
"https://github.com/hrsh7th/cmp-nvim-lsp",
"https://github.com/L3MON4D3/LuaSnip",
"https://github.com/hrsh7th/cmp-emoji",
"https://github.com/windwp/nvim-autopairs",
"https://github.com/lukas-reineke/lsp-format.nvim",
"https://github.com/nvimtools/none-ls.nvim",
"https://github.com/nvim-lua/plenary.nvim"
})
require("nvim-autopairs").setup({})
require("null-ls").setup({ on_attach = require("lsp-format").on_attach })
require("lsp-format").setup({})
local luasnip = require("luasnip")
local cmp = require("cmp")
cmp.setup({
autoEnableSources = true,
experimental = { ghost_text = true },
formatting = { fields = { "kind", "abbr", "menu" } },
mapping = {
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<S-Tab>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
["<Tab>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end
},
sources = {
{ name = "nvim_lsp" },
{ name = "emoji" },
{ keywordLength = 3, name = "buffer", option = { get_bufnrs = vim.api.nvim_list_bufs } },
{ keywordLength = 3, name = "path" },
{ keywordLength = 3, name = "luasnip" },
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
})
vim.lsp.inlay_hint.enable(true)
local __lspCapabilities = function()
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities())
return capabilities
end
local __setup = { capabilities = __lspCapabilities() }
local __wrapConfig = function(cfg)
if cfg == nil then
cfg = __setup
else
cfg = vim.tbl_extend("keep", cfg, __setup)
end
return cfg
end
vim.lsp.config("clangd", {cmd = {"clangd"}, filetypes = {"c", "cpp"}})
vim.lsp.enable("clangd")
vim.lsp.config("hls", { cmd = {"hls"}, filetypes = {"hs"}})
vim.lsp.enable("hls")
vim.lsp.config("lua_ls", { cmd = {"lua-language-server"}, filetypes = {"lua"}})
vim.lsp.enable("lua_ls")
vim.lsp.config("nil_ls", { cmd = {"nil"}, filetypes = {"nix"}})
vim.lsp.enable("nil_ls")
vim.lsp.config("nixd", { cmd = {"nixd"}, filetypes = {"nix"}})
vim.lsp.enable("nixd")
vim.lsp.config("pyright", {cmd = {"pyright"}, filetypes = {"py"}})
vim.lsp.enable("pyright")
vim.lsp.config("zls", {cmd = {"zls"}, filetypes = {"zig"}})
vim.lsp.enable("zls")
-- https://github.com/catppuccin/nvim/blob/main/lua/catppuccin/palettes/mocha.lua
-- https://github.com/Ronxvier/ymir.nvim/blob/main/lua/ymir/palette.lua
local colors = {
red = "#f38ba8",
orange = "#fab387",
green = "#a6e3a1",
yellow = "#f9e2af",
blue = "#f5c2e7",
magenta = "#cba6f7",
cyan = "#94e2d5",
bg = "#11111b",
fg = "#cdd6f4",
cursorline = "#181825",
selection = "#313244",
linenr = "#45475a",
comment = "#585b70",
-- Syntax
keyword = "#cba6f7",
Function = "#cba6f7",
string = "#f9e2af",
constant = "#cba6f7",
type = "#94e2d5",
number = "#fab387",
boolean = "#fab387",
operator = "#cdd6f4",
variable = "#cdd6f4",
-- TODO
-- UI
cursor = "#f5a97f",
visual = "#2e3c55",
search = "#f5c2e7",
statusline = "#1e293b",
menu_bg = "#1a2535",
menu_sel = "#3b4252",
fold = "#3e4a5a",
split = "#334155",
-- TODO
-- Diagnostics
diag_error = "#f38ba8",
diag_warn = "#fab387",
diag_info = "#89dceb",
diag_hint = "#b4befe",
}
-- https://github.com/Ronxvier/ymir.nvim/blob/main/lua/ymir/groups.lua
local groups = {
Normal = { fg = colors.fg, bg = colors.bg },
NormalFloat = { fg = colors.fg, bg = colors.bg },
Comment = { fg = colors.comment, italic = true },
Constant = { fg = colors.constant },
String = { fg = colors.string },
Character = { fg = colors.string },
Number = { fg = colors.number },
Boolean = { fg = colors.boolean },
Float = { fg = colors.number },
FloatBorder = { fg = colors.number },
Operator = { fg = colors.operator },
Keyword = { fg = colors.keyword },
Keywords = { fg = colors.keyword },
Identifier = { fg = colors.variable },
Function = { fg = colors.Function },
Statement = { fg = colors.keyword },
Conditional = { fg = colors.keyword },
Repeat = { fg = colors.keyword },
Label = { fg = colors.keyword },
Exception = { fg = colors.keyword },
PreProc = { fg = colors.keyword },
Include = { fg = colors.keyword },
Define = { fg = colors.keyword },
Title = { fg = colors.magenta },
Macro = { fg = colors.keyword },
PreCondit = { fg = colors.yellow },
Type = { fg = colors.type, italic = true },
StorageClass = { fg = colors.type, italic = true },
Structure = { fg = colors.type, italic = true },
TypeDef = { fg = colors.type, italic = true },
Special = { fg = colors.keyword, italic = true },
SpecialComment = { fg = colors.comment, italic = true },
Error = { fg = colors.red },
Todo = { fg = colors.yellow, bold = true, italic = true },
Underlined = { fg = colors.cyan, underline = true },
Cursor = { fg = colors.cursor },
CursorLineNr = { fg = colors.fg, bold = true },
SignColumn = { bg = colors.bg },
Conceal = { fg = colors.comment },
-- CursorColumn = { bg = colors.selection},
CursorLine = { bg = colors.selection },
ColorColumn = { bg = colors.selection },
StatusLine = { fg = colors.statusline, bg = colors.black },
StatusLineNC = { fg = colors.comment },
StatusLineTerm = { fg = colors.fg, bg = colors.black },
StatusLineTermNC = { fg = colors.comment },
Directory = { fg = colors.cyan },
DiffAdd = { fg = colors.bg, bg = colors.green },
DiffChange = { fg = colors.orange },
DiffDelete = { fg = colors.red },
DiffText = { fg = colors.comment },
ErrorMsg = { fg = colors.red },
VertSplit = { fg = colors.fg },
WinSeparator = { fg = colors.fg },
Folded = { fg = colors.comment },
FoldColumn = {},
Search = { fg = colors.fg, bg = colors.selection },
IncSearch = { fg = colors.fg, bg = colors.selection },
LineNr = { fg = colors.comment },
MatchParen = { fg = colors.cyan, underline = true },
NonText = { fg = colors.comment },
Pmenu = { fg = colors.fg, bg = colors.bg },
PmenuSel = { fg = colors.bg, bg = colors.fg },
PmenuSbar = { bg = colors.bg },
PmenuThumb = { bg = colors.bg },
Question = { fg = colors.magenta },
QuickFixLine = { fg = colors.bg, bg = colors.yellow },
SpecialKey = { fg = colors.comment },
SpellBad = { fg = colors.red, underline = true },
SpellCap = { fg = colors.yellow },
SpellLocal = { fg = colors.yellow },
SpellRare = { fg = colors.yellow },
TabLine = { fg = colors.comment },
TabLineSel = { fg = colors.fg },
TabLineFill = { bg = colors.bg },
Terminal = { fg = colors.fg, bg = colors.black },
Visual = { bg = colors.visual },
VisualNOS = { fg = colors.visual },
WarningMsg = { fg = colors.yellow },
WildMenu = { fg = colors.black, bg = colors.white },
-- TreeSitter
["@error"] = { fg = colors.red },
["@punctuation.delimiter"] = { fg = colors.fg },
["@punctuation.bracket"] = { fg = colors.fg },
["@punctuation.special"] = { fg = colors.cyan },
["@constant"] = { fg = colors.constant },
["@constant.builtin"] = { fg = colors.constant },
["@symbol"] = { fg = colors.operator },
["@constant.macro"] = { fg = colors.keyword },
["@string.regex"] = { fg = colors.string },
["@string"] = { fg = colors.string },
["@string.escape"] = { fg = colors.green },
["@character"] = { fg = colors.string },
["@number"] = { fg = colors.number },
["@boolean"] = { fg = colors.boolean },
["@float"] = { fg = colors.number },
["@annotation"] = { fg = colors.yellow },
["@attribute"] = { fg = colors.cyan },
["@namespace"] = { fg = colors.cyan },
["@function.builtin"] = { fg = colors.Function },
["@function"] = { fg = colors.Function },
["@function.macro"] = { fg = colors.Function },
["@parameter"] = { fg = colors.number },
["@parameter.reference"] = { fg = colors.number },
["@method"] = { fg = colors.number },
["@field"] = { fg = colors.number },
["@property"] = { fg = colors.type },
["@constructor"] = { fg = colors.cyan },
["@conditional"] = { fg = colors.blue },
["@repeat"] = { fg = colors.blue },
["@label"] = { fg = colors.cyan },
["@keyword"] = { fg = colors.keyword },
["@keyword.function"] = { fg = colors.Function },
["@keyword.function.ruby"] = { fg = colors.Function },
--["@keyword.operator"] = { fg = colors.blue },
--["@operator"] = { fg = colors.blue },
["@exception"] = { fg = colors.magenta },
["@type"] = { fg = colors.bright_cyan },
["@type.builtin"] = { fg = colors.cyan, italic = true },
["@type.qualifier"] = { fg = colors.blue },
["@structure"] = { fg = colors.magenta },
["@include"] = { fg = colors.blue },
["@variable"] = { fg = colors.variable },
["@variable.builtin"] = { fg = colors.variable },
["@text"] = { fg = colors.number },
["@text.strong"] = { fg = colors.number, bold = true }, -- bold
["@text.emphasis"] = { fg = colors.yellow, italic = true }, -- italic
["@text.underline"] = { fg = colors.number },
["@text.title"] = { fg = colors.blue, bold = true }, -- title
["@text.literal"] = { fg = colors.number }, -- inline code
["@text.uri"] = { fg = colors.yellow, italic = true, underline = true }, -- urls
["@text.reference"] = { fg = colors.number, bold = true },
["@tag"] = { fg = colors.cyan },
["@tag.attribute"] = { fg = colors.number },
["@tag.delimiter"] = { fg = colors.blue },
-- Semantic
["@class"] = { fg = colors.cyan },
["@struct"] = { fg = colors.cyan },
["@enum"] = { fg = colors.cyan },
["@enumMember"] = { fg = colors.magenta },
["@event"] = { fg = colors.cyan },
["@interface"] = { fg = colors.cyan },
["@modifier"] = { fg = colors.cyan },
["@regexp"] = { fg = colors.yellow },
["@typeParameter"] = { fg = colors.cyan },
["@decorator"] = { fg = colors.cyan },
-- LSP Semantic (0.9+)
["@lsp.type.class"] = { fg = colors.type },
["@lsp.type.enum"] = { fg = colors.type },
["@lsp.type.decorator"] = { fg = colors.number },
["@lsp.type.enumMember"] = { fg = colors.type },
["@lsp.type.function"] = { fg = colors.Function },
["@lsp.type.interface"] = { fg = colors.keyword },
["@lsp.type.macro"] = { fg = colors.keyword },
["@lsp.type.method"] = { fg = colors.keyword },
["@lsp.type.namespace"] = { fg = colors.keyword },
["@lsp.type.parameter"] = { fg = colors.keyword },
["@lsp.type.property"] = { fg = colors.keyword },
["@lsp.type.struct"] = { fg = colors.type },
["@lsp.type.type"] = { fg = colors.type },
["@lsp.type.variable"] = { fg = colors.variable },
-- HTML
htmlArg = { fg = colors.orange },
htmlBold = { fg = colors.yellow, bold = true },
htmlEndTag = { fg = colors.cyan },
htmlH1 = { fg = colors.blue },
htmlH2 = { fg = colors.blue },
htmlH3 = { fg = colors.blue },
htmlH4 = { fg = colors.blue },
htmlH5 = { fg = colors.blue },
htmlH6 = { fg = colors.blue },
htmlItalic = { fg = colors.magenta, italic = true },
htmlLink = { fg = colors.magenta, underline = true },
htmlSpecialChar = { fg = colors.yellow },
htmlSpecialTagName = { fg = colors.cyan },
htmlTag = { fg = colors.cyan },
htmlTagN = { fg = colors.cyan },
htmlTagName = { fg = colors.cyan },
htmlTitle = { fg = colors.white },
}
for group, setting in pairs(groups) do
vim.api.nvim_set_hl(0, group, setting)
end
-- nixvim stuff
do
local __nixvim_autogroups = { nixvim_binds_LspAttach = { clear = true }, nixvim_lsp_on_attach = { clear = false } }
for group_name, options in pairs(__nixvim_autogroups) do
vim.api.nvim_create_augroup(group_name, options)
end
end
do
local __nixvim_autocommands = {
{
callback = function(event)
do
-- client and bufnr are supplied to the builtin `on_attach` callback,
-- so make them available in scope for our global `onAttach` impl
local client = vim.lsp.get_client_by_id(event.data.client_id)
local bufnr = event.buf
require("lsp-format").on_attach(client, bufnr)
end
end,
desc = "Run LSP onAttach",
event = "LspAttach",
group = "nixvim_lsp_on_attach",
},
{
callback = function(args)
do
local __nixvim_binds = {}
for i, map in ipairs(__nixvim_binds) do
local options = vim.tbl_extend("keep", map.options or {}, { buffer = args.buf })
vim.keymap.set(map.mode, map.key, map.action, options)
end
end
end,
desc = "Load keymaps for LspAttach",
event = "LspAttach",
group = "nixvim_binds_LspAttach",
},
{ command = ":set guicursor=a:ver90-blinkon0", event = { "VimLeave" } },
}
for _, autocmd in ipairs(__nixvim_autocommands) do
vim.api.nvim_create_autocmd(autocmd.event, {
group = autocmd.group,
pattern = autocmd.pattern,
buffer = autocmd.buffer,
desc = autocmd.desc,
callback = autocmd.callback,
command = autocmd.command,
once = autocmd.once,
nested = autocmd.nested,
})
end
end
-- }}
-- user-associated plugin config {{{
require('mini.base16').setup({
palette = {
base00 = '#11111b', base01 = '#181825', base02 = '#313244', base03 = '#45475a',
base04 = '#585b70', base05 = '#cdd6f4', base06 = '#f5e0dc', base07 = '#b4befe',
base08 = '#f38ba8', base09 = '#fab387', base0A = '#f9e2af', base0B = '#a6e3a1',
base0C = '#94e2d5', base0D = '#f5c2e7', base0E = '#cba6f7', base0F = '#f2cdcd'
}
})
-- }}}
+4 -13
View File
@@ -1,18 +1,9 @@
{ ... }:
{ pkgs, inputs, ... }:
{
imports = [
./cmp
./plugins
./keymaps.nix
./options.nix
];
programs.nixvim = {
programs.neovim = {
enable = true;
package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default;
extraLuaConfig = builtins.readFile ./config.lua;
defaultEditor = true;
viAlias = true;
vimAlias = true;
colorschemes.catppuccin.enable = true;
};
}
-94
View File
@@ -1,94 +0,0 @@
{ ... }:
{
programs.nixvim = {
globals.mapleader = " ";
keymaps = [
{
mode = "n";
key = "<leader>n";
action = "<cmd>NvimTreeFindFileToggle<cr>";
}
{
mode = [
"n"
"i"
"v"
"t"
];
key = "<c-\\>";
action = "<cmd>ToggleTerm<cr>";
}
{
mode = [
"n"
"i"
"v"
];
key = "<c-l>";
action = "<cmd>BufferLineCycleNext<cr>";
}
{
mode = [
"n"
"i"
"v"
];
key = "<c-h>";
action = "<cmd>BufferLineCyclePrev<cr>";
}
{
mode = [
"n"
"i"
"v"
];
key = "<c-j>";
action = "<cmd>BufferLineGoToBuffer 1<cr>";
}
{
mode = [
"n"
"i"
"v"
];
key = "<c-k>";
action = "<cmd>BufferLineGoToBuffer -1<cr>";
}
{
mode = "n";
key = "<leader><leader>";
action = "<cmd>Yazi<cr>";
}
{
mode = "n";
key = "<leader>a";
action = "<cmd>AerialToggle<cr>";
}
{
mode = "n";
key = "{";
action = "<cmd>AerialPrev<cr>";
}
{
mode = "n";
key = "}";
action = "<cmd>AerialNext<cr>";
}
{
mode = "n";
key = "<leader>c";
action = ":hori term ";
}
];
};
}
-58
View File
@@ -1,58 +0,0 @@
{ ... }:
{
programs.nixvim = {
autoCmd = [
{
event = [ "VimLeave" ];
command = ":set guicursor=a:ver90-blinkon0";
}
];
diagnostic.settings = {
virtual_lines = {
current_line = true;
};
float = {
border = "rounded";
source = "always";
};
};
opts = {
shell = "nu";
fillchars = "eob: ";
number = true;
relativenumber = true;
tabstop = 4;
softtabstop = 4;
showtabline = 4;
shiftwidth = 4;
expandtab = true;
smartindent = true;
breakindent = true;
hlsearch = true;
incsearch = true;
ignorecase = true;
smartcase = true;
splitbelow = true;
splitright = true;
mouse = "a";
updatetime = 50;
swapfile = false;
backup = false;
undofile = true;
scrolloff = 10;
cursorline = true;
wildmenu = true;
};
};
}
@@ -1,11 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.codesnap = {
enable = true;
settings = {
has_line_number = true;
bg_theme = "grape";
watermark = "";
};
};
}
@@ -1,33 +0,0 @@
{ ... }:
{
imports = [
./codesnap.nix
./emmet.nix
./rustaceanvim.nix
./telescope.nix
./toggleterm.nix
./treesitter.nix
];
programs.nixvim.plugins = {
aerial.enable = true;
bufferline.enable = true;
colorizer.enable = true;
comment.enable = true;
crates.enable = true;
fidget.enable = true;
lazygit.enable = true;
lsp-lines.enable = true;
lualine.enable = true;
nvim-tree.enable = true;
nvim-autopairs.enable = true;
quickmath.enable = true;
rainbow.enable = true;
render-markdown.enable = true;
treesj.enable = true;
ts-autotag.enable = true;
visual-multi.enable = true;
web-devicons.enable = true;
yazi.enable = true;
};
}
@@ -1,8 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.emmet = {
enable = true;
settings.leader = "<C-Y>";
settings.mode = "a";
};
}
@@ -1,26 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.rustaceanvim = {
enable = true;
settings = {
tools.enable_clippy = true;
server = {
default_settings = {
inlayHints = {
lifetimeElisionHints = {
enable = "always";
};
};
rust-analyzer = {
cargo = {
allFeatures = true;
};
check = {
command = "clippy";
};
};
};
};
};
};
}
@@ -1,33 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.telescope = {
enable = true;
extensions = {
# file-browser.enable = true;
fzf-native.enable = true;
# media-files.enable = true;
};
settings = {
pickers.colorscheme.enable_preview = true;
defaults = {
layout_config = {
horizontal = {
prompt_position = "bottom";
};
};
sorting_strategy = "descending";
};
};
keymaps = {
# "<leader><space>" = {
# action = "find_files";
# options.desc = "Find Project Files";
# };
"<leader>f" = {
action = "live_grep";
options.desc = "Find Text";
};
};
};
}
@@ -1,13 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.toggleterm = {
enable = true;
settings = {
direction = "horizontal";
float_opts = {
border = "curved";
};
shell = "nu";
};
};
}
@@ -1,10 +0,0 @@
{ ... }:
{
programs.nixvim.plugins.treesitter = {
enable = true;
settings = {
auto_install = true;
highlight.enable = true;
};
};
}