nix/modules/home-manager/cli/neovim/default.nix

213 lines
5.5 KiB
Nix

{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.modules.cli.neovim;
nvim-spell-fr-utf8-dictionary = builtins.fetchurl {
url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl";
sha256 = "abfb9702b98d887c175ace58f1ab39733dc08d03b674d914f56344ef86e63b61";
};
nvim-spell-fr-utf8-suggestions = builtins.fetchurl {
url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug";
sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
};
fromGitHub = rev: ref: repo:
pkgs.vimUtils.buildVimPlugin {
pname = "${pkgs.lib.strings.sanitizeDerivationName repo}";
version = ref;
src = builtins.fetchGit {
url = "https://github.com/${repo}.git";
ref = ref;
rev = rev;
};
};
in
{
options.modules.cli.neovim = {
enable = mkEnableOption "enable Neovim text editor";
};
config = mkIf cfg.enable {
home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
programs.neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
withNodeJs = true;
withPython3 = true;
extraPackages = with pkgs; [
# LSP Servers
clang-tools
hadolint
helm-ls
lua-language-server
marksman
nil
nodePackages.bash-language-server
python3Packages.python-lsp-server
shellcheck
terraform-lsp
tflint
vscode-langservers-extracted
yaml-language-server
# Formatters
nixfmt-rfc-style
shfmt
yamlfmt
];
extraLuaConfig = (builtins.readFile ./files/options.lua);
plugins = with pkgs.vimPlugins; [
{
plugin = nvim-autopairs;
type = "lua";
config = ''
local autopair = require("nvim-autopairs").setup {}
'';
}
{
plugin = catppuccin-nvim;
type = "lua";
config = (builtins.readFile ./files/theme.lua);
}
{
plugin = nvim-cmp;
type = "lua";
config = (builtins.readFile ./files/cmp.lua);
}
cmp-buffer
cmp-nvim-lsp
cmp-path
cmp-cmdline
cmp_luasnip
{
plugin = conform-nvim;
type = "lua";
config = (builtins.readFile ./files/conform.lua);
}
{
plugin = fzf-lua;
type = "lua";
config = (builtins.readFile ./files/fzf-lua.lua);
}
{
plugin = gitsigns-nvim;
type = "lua";
config = (builtins.readFile ./files/luasnip.lua);
}
{
plugin = indent-blankline-nvim;
type = "lua";
config =''
require("ibl").setup{
indent = { char = ""},
}
'';
}
{
plugin = lsp_lines-nvim;
type = "lua";
config = (builtins.readFile ./files/lsp-line.lua);
}
{
plugin = nvim-lspconfig;
type = "lua";
config = (builtins.readFile ./files/lspconfig.lua);
}
{
plugin = lualine-nvim;
type = "lua";
config = (builtins.readFile ./files/lualine.lua);
}
luasnip
{
plugin = neo-tree-nvim;
type = "lua";
config = (builtins.readFile ./files/neotree.lua);
}
nui-nvim
{
plugin = nvim-web-devicons;
type = "lua";
config=''
require('nvim-web-devicons').setup {}
'';
}
{
plugin = nvim-lint;
type = "lua";
config = ( builtins.readFile ./files/nvim-lint.lua);
}
{
plugin = nvim-sops;
type = "lua";
config = (builtins.readFile ./files/nvim-sops.lua);
}
plenary-nvim
{
plugin = (nvim-treesitter.withPlugins (p: [
p.bash
p.c
p.cpp
p.cmake
p.dockerfile
p.hcl
p.helm
p.javascript
p.latex
p.lua
p.llvm
p.markdown
p.markdown_inline
p.nix
p.puppet
p.python
p.ruby
p.terraform
p.typescript
p.vim
p.yaml
])
);
type = "lua";
config = ( builtins.readFile ./files/treesitter.lua);
}
{
plugin = nvim-treesitter-context;
type = "lua";
config = ( builtins.readFile ./files/treesitter_context.lua);
}
{
plugin = lspsaga-nvim;
type = "lua";
config = ''
require('lspsaga').setup {
ui = {
code_action = ''
},
lightbulb = {
virtual_text = false
}
}
'';
}
{
plugin = which-key-nvim;
type = "lua";
config = ( builtins.readFile ./files/whichkey.lua );
}
# yaml companion
{
plugin = ( fromGitHub
"131b0d67bd2e0f1a02e0daf2f3460482221ce3c0"
"main"
"someone-stole-my-name/yaml-companion.nvim"
);
type = "lua";
}
vim-helm
];
};
};
}