dotfiles-nix/nix/users/base/neovim/default.nix

108 lines
2.4 KiB
Nix

{ inputs, pkgs, lib, ... }:
{
programs.neovim =
let
toLua = str: "lua << EOF\n${str}\nEOF\n";
toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n";
fromGitHub = rev: ref: repo: pkgs.vimUtils.buildVimPlugin {
pname = "${lib.strings.sanitizeDerivationName repo}";
version = ref;
src = builtins.fetchGit {
url = "https://github.com/${repo}.git";
ref = ref;
rev = rev;
};
};
in
{
enable = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
defaultEditor = true;
plugins = with pkgs; [
# Colorschemes
{
plugin = vimPlugins.catppuccin-nvim;
config = toLuaFile ./plugins/colorschemes/catppuccin.lua;
}
# LSP
{
plugin = vimPlugins.nvim-lspconfig;
config = toLuaFile ./plugins/lsp.lua;
}
vimPlugins.cmp-buffer
vimPlugins.cmp-cmdline
vimPlugins.cmp-nvim-lsp
vimPlugins.cmp-nvim-lua
vimPlugins.cmp-path
vimPlugins.cmp_luasnip
vimPlugins.luasnip
vimPlugins.nvim-cmp
# The rest
{
plugin = vimPlugins.indent-blankline-nvim;
config = toLuaFile ./plugins/indent.lua;
}
# HTML
# TODO: enable this when treesitter is installed
# {
# plugin = vimPlugins.nvim-ts-autotag;
# config = toLuaFile ./plugins/autotag.lua;
# }
{
plugin = vimPlugins.nvim-colorizer-lua;
config = toLuaFile ./plugins/colorizer.lua;
}
# GIT
{
plugin = vimPlugins.gitsigns-nvim;
config = toLuaFile ./plugins/gitsigns.lua;
}
vimPlugins.vim-fugitive
{
plugin = (fromGitHub "3af6232c8d39d51062702e875ff6407c1eeb0391" "main" "xiyaowong/transparent.nvim");
config = toLuaFile ./plugins/transparent.lua;
}
{
plugin = vimPlugins.presence-nvim;
config = toLuaFile ./plugins/presence.lua;
}
{
plugin = vimPlugins.comment-vim;
config = toLuaFile ./plugins/comment.lua;
}
{
plugin = vimPlugins.which-key-nvim;
config = toLua ./plugins/whichkey.lua;
}
];
extraLuaConfig = ''
${builtins.readFile ./core/colors.lua}
${builtins.readFile ./core/options.lua}
'';
extraPackages = with pkgs; [
lua-language-server
nodePackages_latest.vscode-langservers-extracted
nixd
];
};
}