1

Update neovim config

This commit is contained in:
2024-06-02 22:17:00 +02:00
parent 9d82e15ed4
commit 473fce2e5e
4 changed files with 928 additions and 977 deletions

View File

@ -101,72 +101,10 @@ in {
mallocalleader = " "; mallocalleader = " ";
}; };
opts = { opts = import ./vim_opts.nix {inherit lib mylib;};
showmode = false; # Status line already shows this
backspace = ["indent" "eol" "start"];
termguicolors = true; # Required by multiple plugins
hidden = true; # Don't unload buffers immediately
mouse = "a";
completeopt = ["menuone" "noselect" "noinsert"];
timeoutlen = 50;
pumheight = 0;
formatexpr = "v:lua.require('conform').formatexpr()";
laststatus = 3;
# winblend = 30;
# Cursor
ruler = true; # Show cursor position in status line
number = true;
relativenumber = true;
signcolumn = "yes";
cursorline = true;
scrolloff = 10;
# Folding
foldcolumn = "0";
foldlevel = 99;
foldlevelstart = 99;
foldenable = true;
# foldmethod = "expr";
# foldexpr = "nvim_treesitter#foldexpr()";
# Files
encoding = "utf-8";
fileencoding = "utf-8";
# swapfile = true;
# backup = false;
undofile = true;
undodir = "/home/christoph/.vim/undo";
# autochdir = true;
# Search
incsearch = true; # Already highlight results while typing
hlsearch = true;
ignorecase = true;
smartcase = true;
grepprg = "rg --vimgrep";
grepformat = "%f:%l:%c:%m";
# Indentation
autoindent = false; # Use previous line indentation level - Might mess up comment indentation
smartindent = false; # Like autoindent but recognizes some C syntax - Might mess up comment indentation
cindent = true;
cinkeys = "0{,0},0),0],:,!^F,o,O,e"; # Fix comment (#) indentation and intellitab (somehow)
smarttab = true;
expandtab = true;
shiftwidth = 4;
tabstop = 4;
softtabstop = 4;
splitbelow = true;
splitright = true;
};
extraConfigLuaPost = builtins.readFile ./extraConfigLuaPost.lua; extraConfigLuaPost = builtins.readFile ./extraConfigLuaPost.lua;
extraConfigLua = builtins.readFile ./extraConfigLua.lua; extraConfigLua = builtins.readFile ./extraConfigLua.lua;
# extraLuaPackages = with pkgs.lua51Packages; [];
extraLuaPackages = with pkgs.lua51Packages; [];
extraPython3Packages = p: [ extraPython3Packages = p: [
# For CHADtree # For CHADtree
@ -195,10 +133,13 @@ in {
plugins.lazy = { plugins.lazy = {
enable = true; enable = true;
plugins = builtins.concatLists [ plugins = let
(import ./interface.nix {inherit lib mylib pkgs;}) plenary = {
(import ./languages.nix {inherit lib mylib pkgs;}) name = "plenary"; # For telescope
[ pkg = pkgs.vimPlugins.plenary-nvim;
lazy = false;
};
in [
# #
# Theme # Theme
# #
@ -242,6 +183,23 @@ in {
# Plugins # Plugins
# #
{
name = "autopairs";
pkg = pkgs.vimPlugins.nvim-autopairs;
lazy = false;
config = ''
function(_, opts)
require("nvim-autopairs").setup(opts)
end
'';
}
{
name = "bbye";
pkg = pkgs.vimPlugins.vim-bbye;
lazy = false;
}
{ {
name = "better-escape"; name = "better-escape";
pkg = pkgs.vimPlugins.better-escape-nvim; pkg = pkgs.vimPlugins.better-escape-nvim;
@ -260,53 +218,73 @@ in {
{ {
name = "chadtree"; name = "chadtree";
pkg = pkgs.vimPlugins.chadtree; pkg = pkgs.vimPlugins.chadtree;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
vim.api.nvim_set_var("chadtree_settings", opts) vim.api.nvim_set_var("chadtree_settings", opts)
end end
''; '';
opts = { opts = {
theme.text_colour_set = "nerdtree_syntax_dark"; # theme.text_colour_set = "nerdtree_syntax_dark";
theme.text_colour_set = "nord";
xdg = true; xdg = true;
}; };
} }
{
name = "clangd-extensions";
pkg = pkgs.vimPlugins.clangd_extensions-nvim;
lazy = false;
config = ''
function(_, opts)
require("clangd_extensions").setup(opts)
end
'';
}
{ {
name = "cmp"; name = "cmp";
pkg = pkgs.vimPlugins.nvim-cmp; pkg = pkgs.vimPlugins.nvim-cmp;
lazy = false;
dependencies = [ dependencies = [
{ {
name = "cmp-async-path"; name = "cmp-async-path";
pkg = pkgs.vimPlugins.cmp-async-path; pkg = pkgs.vimPlugins.cmp-async-path;
lazy = false;
} }
{ {
name = "cmp-buffer"; name = "cmp-buffer";
pkg = pkgs.vimPlugins.cmp-buffer; pkg = pkgs.vimPlugins.cmp-buffer;
lazy = false;
enabled = false; enabled = false;
} }
{ {
name = "cmp-cmdline"; name = "cmp-cmdline";
pkg = pkgs.vimPlugins.cmp-cmdline; pkg = pkgs.vimPlugins.cmp-cmdline;
lazy = false;
enabled = false; enabled = false;
} }
{ {
name = "cmp-emoji"; name = "cmp-emoji";
pkg = pkgs.vimPlugins.cmp-emoji; pkg = pkgs.vimPlugins.cmp-emoji;
lazy = false;
} }
{ {
name = "cmp-nvim-lsp"; name = "cmp-nvim-lsp";
pkg = pkgs.vimPlugins.cmp-nvim-lsp; pkg = pkgs.vimPlugins.cmp-nvim-lsp;
lazy = false;
} }
{ {
name = "cmp-nvim-lsp-signature-help"; name = "cmp-nvim-lsp-signature-help";
pkg = pkgs.vimPlugins.cmp-nvim-lsp-signature-help; pkg = pkgs.vimPlugins.cmp-nvim-lsp-signature-help;
lazy = false;
} }
{ {
name = "cmp-luasnip"; name = "cmp-luasnip";
pkg = pkgs.vimPlugins.cmp_luasnip; pkg = pkgs.vimPlugins.cmp_luasnip;
lazy = false;
} }
]; ];
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
require("cmp").setup(opts) require("cmp").setup(opts)
@ -389,9 +367,27 @@ in {
}; };
} }
{
# TODO: Only colorize html/css/scss/sass...
name = "colorizer";
pkg = pkgs.vimPlugins.nvim-colorizer-lua;
lazy = false;
config = ''
function(_, opts)
require("colorizer").setup(opts)
end
'';
opts = {
filtetypes = null;
user_default_options = null;
buftypes = null;
};
}
{ {
name = "comment"; name = "comment";
pkg = pkgs.vimPlugins.comment-nvim; pkg = pkgs.vimPlugins.comment-nvim;
lazy = false;
dependencies = [ dependencies = [
{ {
name = "ts-context-commentstring"; name = "ts-context-commentstring";
@ -423,10 +419,39 @@ in {
}; };
} }
{
name = "conform";
pkg = pkgs.vimPlugins.conform-nvim;
lazy = false;
config = ''
function(_, opts)
require("conform").setup(opts)
end
'';
opts = {
formatters_by_ft = {
c = ["clang-format"];
h = ["clang-format"];
cpp = ["clang-format"];
hpp = ["clang-format"];
css = [["prettierd" "prettier"]];
html = [["prettierd" "prettier"]];
java = ["google-java-format"];
javascript = [["prettierd" "prettier"]];
lua = ["stylua"];
markdown = [["prettierd" "prettier"]];
nix = ["alejandra"];
python = ["black"];
rust = ["rustfmt"];
};
};
}
# TODO: Config # TODO: Config
{ {
name = "flash"; name = "flash";
pkg = pkgs.vimPlugins.flash-nvim; pkg = pkgs.vimPlugins.flash-nvim;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
require("flash").setup(opts) require("flash").setup(opts)
@ -437,6 +462,7 @@ in {
{ {
name = "gitmessenger"; name = "gitmessenger";
pkg = pkgs.vimPlugins.git-messenger-vim; pkg = pkgs.vimPlugins.git-messenger-vim;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
for k, v in pairs(opts) do for k, v in pairs(opts) do
@ -466,6 +492,13 @@ in {
}; };
} }
{
name = "haskell-tools";
pkg = pkgs.vimPlugins.haskell-tools-nvim;
lazy = false;
# Don't call setup!
}
{ {
name = "illuminate"; name = "illuminate";
pkg = pkgs.vimPlugins.vim-illuminate; pkg = pkgs.vimPlugins.vim-illuminate;
@ -510,12 +543,157 @@ in {
{ {
name = "lazygit"; name = "lazygit";
pkg = pkgs.vimPlugins.lazygit-nvim; pkg = pkgs.vimPlugins.lazygit-nvim;
lazy = false;
}
{
name = "lint";
pkg = pkgs.vimPlugins.nvim-lint;
lazy = false;
config = ''
function(_, opts)
local lint = require("lint")
for k, v in pairs(opts) do
lint[k] = v
end
end
'';
opts = {
linters_by_ft = {
c = ["clang-tidy"];
h = ["clang-tidy"];
cpp = ["clang-tidy"];
hpp = ["clang-tidy"];
clojure = ["clj-kondo"];
java = ["checkstyle"];
javascript = ["eslint_d"];
lua = ["luacheck"];
markdown = ["vale"];
nix = ["statix"];
python = ["flake8"];
rust = ["clippy"];
text = ["vale"];
};
};
}
{
name = "lspconfig";
pkg = pkgs.vimPlugins.nvim-lspconfig;
lazy = false;
dependencies = [
{
name = "neodev";
pkg = pkgs.vimPlugins.neodev-nvim;
lazy = false;
config = ''
function(_, opts)
require("neodev").setup(opts)
end
'';
}
];
config = let
servers = mylib.generators.toLuaObject [
{name = "clangd";}
{name = "clojure_lsp";}
{name = "cmake";}
{name = "lua_ls";}
{name = "nil_ls";}
{name = "pyright";}
# {name = "rust_analyzer";} # Don't set up when using rustaceanvim
{name = "texlab";}
# {name = "hls";} # Don't set up when using haskell-tools
];
in ''
function(_, opts)
local __lspOnAttach = function(client, bufnr) end
local __lspCapabilities = function()
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 = {
on_attach = __lspOnAttach,
capabilities = __lspCapabilities(),
}
for i, server in ipairs(${servers}) do
if type(server) == "string" then
require("lspconfig")[server].setup(__setup)
else
local options = server.extraOptions
if options == nil then
options = __setup
else
options = vim.tbl_extend("keep", options, __setup)
end
require("lspconfig")[server.name].setup(options)
end
end
end
'';
}
{
name = "lualine";
pkg = pkgs.vimPlugins.lualine-nvim;
lazy = false;
config = ''
function(_, opts)
require("lualine").setup(opts)
end
'';
opts = {
extensions = ["fzf" "chadtree" "neo-tree" "toggleterm" "trouble"];
options = {
always_divide_middle = true;
globalstatus = true;
ignore_focus = ["neo-tree" "chadtree"];
section_separators = {
left = "";
right = "";
};
component_separators = {
left = "";
right = "";
};
};
sections = {
lualine_a = ["mode"];
lualine_b = ["branch" "diff" "diagnostics"];
lualine_c = [
{
name = "filename";
extraConfig.path = 1;
}
];
lualine_x = ["filetype" "encoding" "fileformat"];
lualine_y = ["progress" "searchcount" "selectioncount"];
lualine_z = ["location"];
};
tabline = {
lualine_a = ["buffers"];
lualine_z = ["tabs"];
};
};
} }
# TODO: Snippet configs # TODO: Snippet configs
{ {
name = "luasnip"; name = "luasnip";
pkg = pkgs.vimPlugins.luasnip; pkg = pkgs.vimPlugins.luasnip;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
require("luasnip").config.set_config(opts) require("luasnip").config.set_config(opts)
@ -526,6 +704,7 @@ in {
{ {
name = "navbuddy"; name = "navbuddy";
pkg = pkgs.vimPlugins.nvim-navbuddy; pkg = pkgs.vimPlugins.nvim-navbuddy;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
local actions = require("nvim-navbuddy.actions") -- ? local actions = require("nvim-navbuddy.actions") -- ?
@ -542,6 +721,7 @@ in {
{ {
name = "navic"; name = "navic";
pkg = pkgs.vimPlugins.nvim-navic; pkg = pkgs.vimPlugins.nvim-navic;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
require("nvim-navic").setup(opts) require("nvim-navic").setup(opts)
@ -555,44 +735,85 @@ in {
} }
{ {
name = "autopairs"; name = "noice";
pkg = pkgs.vimPlugins.nvim-autopairs; pkg = pkgs.vimPlugins.noice-nvim;
lazy = false; lazy = false;
config = ''
function(_, opts)
require("nvim-autopairs").setup(opts)
end
'';
}
{
name = "colorizer";
pkg = pkgs.vimPlugins.nvim-colorizer-lua;
lazy = false;
config = ''
function(_, opts)
require("colorizer").setup(opts)
end
'';
opts = {
filtetypes = null;
user_default_options = null;
buftypes = null;
};
}
{
name = "ufo";
pkg = pkgs.vimPlugins.nvim-ufo;
dependencies = [ dependencies = [
{ {
name = "promise"; name = "nui"; # For noice
pkg = pkgs.vimPlugins.promise-async; pkg = pkgs.vimPlugins.nui-nvim;
lazy = false;
} }
]; ];
config = '' config = ''
function(_, opts) function(_, opts)
require("ufo").setup(opts) require("noice").setup(opts)
end
'';
opts = {
presets = {
bottom_search = false;
command_palette = true;
long_message_to_split = true;
inc_rename = true;
lsp_doc_border = true;
};
lsp = {
documentation = {
opts = {
lang = "markdown";
replace = true;
render = "plain";
border = "rounded"; # single or rounded
format = ["{message}"];
win_options = {
concealcursor = "n";
conceallevel = 3;
};
};
view = "hover";
};
override = {
"vim.lsp.util.convert_input_to_markdown_lines" = true;
"vim.lsp.util.stylize_markdown" = true;
"cmp.entry.get_documentation" = true;
};
};
notify = {
enabled = true;
};
popupmenu = {
enabled = true;
backend = "nui"; # cmp completion is broken
};
# cmdline.enabled = false;
# messages.enabled = false;
routes = [
# Hide inline search count info
{
filter = {
event = "msg_show";
kind = "search_count";
};
opts = {skip = true;};
}
];
};
}
{
name = "notify";
pkg = pkgs.vimPlugins.nvim-notify;
lazy = false;
config = ''
function(_, opts)
vim.notify = require("notify")
require("notify").setup(opts)
end end
''; '';
} }
@ -603,6 +824,13 @@ in {
lazy = false; lazy = false;
} }
{
name = "rustaceanvim";
pkg = pkgs.vimPlugins.rustaceanvim;
lazy = false;
# Don't call setup!
}
{ {
name = "sandwich"; name = "sandwich";
pkg = pkgs.vimPlugins.vim-sandwich; pkg = pkgs.vimPlugins.vim-sandwich;
@ -615,6 +843,72 @@ in {
lazy = false; lazy = false;
} }
{
name = "telescope";
pkg = pkgs.vimPlugins.telescope-nvim;
lazy = false;
dependencies = [
plenary
# {
# name = "plenary"; # For telescope
# pkg = pkgs.vimPlugins.plenary-nvim;
# lazy = false;
# }
{
name = "telescope-undo";
pkg = pkgs.vimPlugins.telescope-undo-nvim;
lazy = false;
}
{
name = "telescope-ui-select";
pkg = pkgs.vimPlugins.telescope-ui-select-nvim;
lazy = false;
}
{
name = "telescope-fzf-native";
pkg = pkgs.vimPlugins.telescope-fzf-native-nvim;
lazy = false;
}
];
config = let
extensions = mylib.generators.toLuaObject [
"undo"
"ui-select"
"fzf"
];
in ''
function(_, opts)
local telescope = require("telescope")
telescope.setup(opts)
for i, extension in ipairs(${extensions}) do
telescope.load_extension(extension)
end
end
'';
opts = {
defaults = {
mappings = {
i = {
"<Esc>" = {__raw = ''function(...) return require("telescope.actions").close(...) end'';};
};
};
};
};
}
{
name = "todo-comments";
pkg = pkgs.vimPlugins.todo-comments-nvim;
lazy = false;
dependencies = [plenary];
# config = ''
# function(_, opts)
# require("todo-comments").setup(opts)
# end
# '';
}
{ {
name = "toggleterm"; name = "toggleterm";
pkg = pkgs.vimPlugins.toggleterm-nvim; pkg = pkgs.vimPlugins.toggleterm-nvim;
@ -645,6 +939,103 @@ in {
}; };
} }
(let
nvim-plugintree = pkgs.vimPlugins.nvim-treesitter.withPlugins (
p:
with p; [
bash
bibtex
c
clojure
cmake
cpp
csv
disassembly
dockerfile
dot
doxygen
fish
gitignore
haskell
haskell_persistent
html
ini
java
javascript
json
julia
kotlin
lua
make
markdown
markdown_inline
nasm
nix
objdump
org
passwd
perl
printf
python
r
regex
requirements
ruby
rust
scala
scss
sql
toml
typescript
verilog
xml
yaml
]
);
treesitter-parsers = pkgs.symlinkJoin {
name = "treesitter-parsers";
paths = nvim-plugintree.dependencies;
};
in {
name = "treesitter";
pkg = pkgs.vimPlugins.nvim-treesitter;
lazy = false;
config = ''
function(_, opts)
vim.opt.runtimepath:append("${nvim-plugintree}")
vim.opt.runtimepath:append("${treesitter-parsers}")
require("nvim-treesitter.configs").setup(opts)
end
'';
opts = {
auto_install = false;
ensure_installed = [];
parser_install_dir = "${treesitter-parsers}";
indent = {
enable = true;
# disable = ["python" "yaml"];
};
highlight = {
enable = true;
# disable = ["yaml"];
additional_vim_regex_highlighting = false;
};
# TODO: Doesn't work
incremental_selection = {
enable = true;
keymaps = {
"init_selection" = "gnn";
"node_decremental" = "grm";
"node_incremental" = "grn";
"scope_incremental" = "grc";
};
};
};
})
{ {
name = "trim"; name = "trim";
pkg = pkgs.vimPlugins.trim-nvim; pkg = pkgs.vimPlugins.trim-nvim;
@ -659,6 +1050,7 @@ in {
{ {
name = "trouble"; name = "trouble";
pkg = pkgs.vimPlugins.trouble-nvim; pkg = pkgs.vimPlugins.trouble-nvim;
lazy = false;
config = '' config = ''
function(_, opts) function(_, opts)
require("trouble").setup(opts) require("trouble").setup(opts)
@ -667,8 +1059,33 @@ in {
} }
{ {
name = "bbye"; name = "ufo";
pkg = pkgs.vimPlugins.vim-bbye; pkg = pkgs.vimPlugins.nvim-ufo;
lazy = false;
dependencies = [
{
name = "promise";
pkg = pkgs.vimPlugins.promise-async;
lazy = false;
}
];
config = ''
function(_, opts)
require("ufo").setup(opts)
end
'';
}
{
name = "which-key";
pkg = pkgs.vimPlugins.which-key-nvim;
lazy = false;
priority = 500;
config = ''
function(_, opts)
require("which-key").setup(opts)
end
'';
} }
{ {
@ -681,7 +1098,6 @@ in {
end end
''; '';
} }
]
]; ];
}; };
@ -698,6 +1114,11 @@ in {
# enable = true; # enable = true;
# }; # };
# TODO: Incremental LSP rename (noice only does search/replace incrementally)
# inc-rename = {
# enable = true;
# };
# TODO: Need enabled for conform fallback? # TODO: Need enabled for conform fallback?
# lsp-format = { # lsp-format = {
# enable = true; # enable = true;

View File

@ -1,227 +0,0 @@
{
lib,
mylib,
pkgs,
...
}: [
{
name = "lualine";
pkg = pkgs.vimPlugins.lualine-nvim;
lazy = false;
config = ''
function(_, opts)
require("lualine").setup(opts)
end
'';
opts = {
extensions = ["fzf" "chadtree" "neo-tree" "toggleterm" "trouble"];
options = {
always_divide_middle = true;
globalstatus = true;
ignore_focus = ["neo-tree" "chadtree"];
section_separators = {
left = "";
right = "";
# left = "";
# right = "";
};
component_separators = {
left = "";
right = "";
# left = "";
# right = "";
};
};
sections = {
lualine_a = [
{
name = "mode";
# extraConfig = {
# separator = {
# left = "";
# };
# right_padding = "2";
# };
}
];
lualine_b = ["branch" "diff" "diagnostics"];
lualine_c = [
{
name = "filename";
extraConfig = {
path = 1;
};
}
];
lualine_x = ["filetype" "encoding" "fileformat"];
lualine_y = ["progress" "searchcount" "selectioncount"];
lualine_z = [
{
name = "location";
# extraConfig = {
# separator = {
# right = "";
# };
# left_padding = "2";
# };
}
];
};
tabline = {
lualine_a = ["buffers"];
lualine_z = ["tabs"];
};
};
}
{
name = "noice";
pkg = pkgs.vimPlugins.noice-nvim;
dependencies = [
{
name = "nui"; # For noice
pkg = pkgs.vimPlugins.nui-nvim;
lazy = false;
}
];
lazy = false;
config = ''
function(_, opts)
require("noice").setup(opts)
end
'';
opts = {
presets = {
bottom_search = false;
command_palette = true;
long_message_to_split = true;
inc_rename = true;
lsp_doc_border = true;
};
lsp = {
documentation = {
opts = {
lang = "markdown";
replace = true;
render = "plain";
border = "rounded"; # single or rounded
format = ["{message}"];
win_options = {
concealcursor = "n";
conceallevel = 3;
};
};
view = "hover";
};
override = {
"vim.lsp.util.convert_input_to_markdown_lines" = true;
"vim.lsp.util.stylize_markdown" = true;
"cmp.entry.get_documentation" = true;
};
};
notify = {
enabled = true;
};
popupmenu = {
enabled = true;
backend = "nui"; # cmp completion is broken
};
# cmdline.enabled = false;
# messages.enabled = false;
routes = [
# Hide inline search count info
{
filter = {
event = "msg_show";
kind = "search_count";
};
opts = {skip = true;};
}
];
};
}
{
name = "notify";
pkg = pkgs.vimPlugins.nvim-notify;
lazy = false;
config = ''
function(_, opts)
vim.notify = require("notify")
require("notify").setup(opts)
end
'';
}
{
name = "telescope";
pkg = pkgs.vimPlugins.telescope-nvim;
dependencies = [
{
name = "plenary"; # For telescope
pkg = pkgs.vimPlugins.plenary-nvim;
}
{
name = "telescope-undo";
pkg = pkgs.vimPlugins.telescope-undo-nvim;
}
{
name = "telescope-ui-select";
pkg = pkgs.vimPlugins.telescope-ui-select-nvim;
}
{
name = "telescope-fzf-native";
pkg = pkgs.vimPlugins.telescope-fzf-native-nvim;
}
];
lazy = false;
config = let
extensions = mylib.generators.toLuaObject [
"undo"
"ui-select"
"fzf"
];
in ''
function(_, opts)
local telescope = require("telescope")
telescope.setup(opts)
for i, extension in ipairs(${extensions}) do
telescope.load_extension(extension)
end
end
'';
opts = {
defaults = {
mappings = {
i = {
"<Esc>" = {__raw = ''function(...) return require("telescope.actions").close(...) end'';};
};
};
};
};
}
{
name = "which-key";
pkg = pkgs.vimPlugins.which-key-nvim;
lazy = false;
priority = 100;
config = ''
function(_, opts)
require("which-key").setup(opts)
end
'';
}
]

View File

@ -1,245 +0,0 @@
{
lib,
mylib,
pkgs,
...
}: [
{
name = "clangd-extensions";
pkg = pkgs.vimPlugins.clangd_extensions-nvim;
config = ''
function(_, opts)
require("clangd_extensions").setup(opts)
end
'';
}
{
name = "conform";
pkg = pkgs.vimPlugins.conform-nvim;
config = ''
function(_, opts)
require("conform").setup(opts)
end
'';
opts = {
formatters_by_ft = {
c = ["clang-format"];
h = ["clang-format"];
cpp = ["clang-format"];
hpp = ["clang-format"];
css = [["prettierd" "prettier"]];
html = [["prettierd" "prettier"]];
java = ["google-java-format"];
javascript = [["prettierd" "prettier"]];
lua = ["stylua"];
markdown = [["prettierd" "prettier"]];
nix = ["alejandra"];
python = ["black"];
rust = ["rustfmt"];
};
};
}
{
name = "haskell-tools";
pkg = pkgs.vimPlugins.haskell-tools-nvim;
# Don't call setup!
}
{
name = "lint";
pkg = pkgs.vimPlugins.nvim-lint;
lazy = false;
config = ''
function(_, opts)
local lint = require("lint")
for k, v in pairs(opts) do
lint[k] = v
end
end
'';
opts = {
linters_by_ft = {
c = ["clang-tidy"];
h = ["clang-tidy"];
cpp = ["clang-tidy"];
hpp = ["clang-tidy"];
clojure = ["clj-kondo"];
java = ["checkstyle"];
javascript = ["eslint_d"];
lua = ["luacheck"];
markdown = ["vale"];
nix = ["statix"];
python = ["flake8"];
rust = ["clippy"];
text = ["vale"];
};
};
}
{
name = "lspconfig";
pkg = pkgs.vimPlugins.nvim-lspconfig;
dependencies = [
{
name = "neodev";
pkg = pkgs.vimPlugins.neodev-nvim;
config = ''
function(_, opts)
require("neodev").setup(opts)
end
'';
}
];
lazy = false;
config = let
servers = mylib.generators.toLuaObject [
{name = "clangd";}
{name = "clojure_lsp";}
{name = "cmake";}
{name = "lua_ls";}
{name = "nil_ls";}
{name = "pyright";}
# {name = "rust_analyzer";} # Don't set up when using rustaceanvim
{name = "texlab";}
# {name = "hls";} # Don't set up when using haskell-tools
];
in ''
function(_, opts)
local __lspOnAttach = function(client, bufnr) end
local __lspCapabilities = function()
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 = {
on_attach = __lspOnAttach,
capabilities = __lspCapabilities(),
}
for i, server in ipairs(${servers}) do
if type(server) == "string" then
require("lspconfig")[server].setup(__setup)
else
local options = server.extraOptions
if options == nil then
options = __setup
else
options = vim.tbl_extend("keep", options, __setup)
end
require("lspconfig")[server.name].setup(options)
end
end
end
'';
}
{
name = "rustaceanvim";
pkg = pkgs.vimPlugins.rustaceanvim;
# Don't call setup!
}
(let
nvim-plugintree = pkgs.vimPlugins.nvim-treesitter.withPlugins (
p:
with p; [
bash
bibtex
c
clojure
cmake
cpp
csv
disassembly
dockerfile
dot
doxygen
fish
gitignore
haskell
haskell_persistent
html
ini
java
javascript
json
julia
kotlin
lua
make
markdown
markdown_inline
nasm
nix
objdump
org
passwd
perl
printf
python
r
regex
requirements
ruby
rust
scala
scss
sql
toml
typescript
verilog
xml
yaml
]
);
treesitter-parsers = pkgs.symlinkJoin {
name = "treesitter-parsers";
paths = nvim-plugintree.dependencies;
};
in {
name = "treesitter";
pkg = pkgs.vimPlugins.nvim-treesitter;
lazy = false;
config = ''
function(_, opts)
vim.opt.runtimepath:append("${nvim-plugintree}")
vim.opt.runtimepath:append("${treesitter-parsers}")
require("nvim-treesitter.configs").setup(opts)
end
'';
opts = {
auto_install = false;
ensure_installed = [];
parser_install_dir = "${treesitter-parsers}";
indent = {
enable = true;
# disable = ["python" "yaml"];
};
highlight = {
enable = true;
# disable = ["yaml"];
additional_vim_regex_highlighting = false;
};
# TODO: Doesn't work
incremental_selection = {
enable = true;
keymaps = {
"init_selection" = "gnn";
"node_decremental" = "grm";
"node_incremental" = "grn";
"scope_incremental" = "grc";
};
};
};
})
]

View File

@ -357,6 +357,8 @@ with mylib.networking; {
wireguard-tools wireguard-tools
man-pages man-pages
man-pages-posix man-pages-posix
# egl-wayland
]; ];
# NOTE: Gnome # NOTE: Gnome