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

180 lines
3.7 KiB
Nix

{
pkgs,
home,
lib,
config,
...
}:
let
cfg = config.luj.programs.neovim;
in
with lib;
{
options.luj.programs.neovim = {
enable = mkEnableOption "activate neovim program";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
git
nodejs
ripgrep
gcc
];
programs.neovim = {
enable = true;
package = pkgs.neovim-unwrapped;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
coc = {
enable = true;
settings = {
coc.preferences.formatOnSaveFiletypes = [
"nix"
"rust"
"sql"
"python"
"haskell"
];
rust-analyzer.enable = true;
rust-analyzer.cargo.allFeatures = true;
rust-analyzer.checkOnSave.allTargets = true;
languageserver = {
python = {
command = "pyright";
filetypes = [
"py"
"python"
];
};
haskell = {
command = "haskell-language-server-wrapper";
args = [ "--lsp" ];
rootPatterns = [
"*.cabal"
"cabal.project"
"hie.yaml"
".stack.yaml"
];
filetypes = [
"haskell"
"lhaskell"
"hs"
"lhs"
];
settings = {
haskell = {
checkParents = "CheckOnSave";
checkProject = true;
maxCompletions = 40;
formattingProvider = "ormolu";
};
};
};
go = {
command = "gopls";
rootPatterns = [
"go.work"
"go.mod"
".vim/"
".git/"
".hg/"
];
filetypes = [ "go" ];
initializationOptions = {
usePlaceholders = true;
};
};
nix = {
command = "nixd";
filetypes = [ "nix" ];
settings.nixd.formatting.command = [ "nixfmt" ];
};
ccls = {
command = "ccls";
filetypes = [
"c"
"cpp"
"objc"
"objcpp"
];
rootPatterns = [
".ccls"
"compile_commands.json"
".vim/"
".git/"
".hg/"
];
initializationOptions = {
cache = {
directory = "/tmp/ccls";
};
};
};
};
};
};
withPython3 = true;
plugins = with pkgs.vimPlugins; [
plenary-nvim
#Telescope
telescope-nvim
nvim-web-devicons
catppuccin-nvim
pkgs.unstable.vimPlugins.bufferline-nvim
nvim-colorizer-lua
pears-nvim
nvim-tree-lua
(nvim-treesitter.withPlugins (
ps: with ps; [
tree-sitter-nix
tree-sitter-python
]
))
vim-lastplace
vim-nix
vim-nixhash
vim-yaml
vim-toml
vim-airline
vim-devicons
zig-vim
vim-scriptease
semshi
coc-prettier
coc-pyright
coc-rust-analyzer
rust-vim
];
extraPackages = with pkgs; [
rust-analyzer
pkgs.nixd
pyright
ormolu
ccls
gopls
unstable.nixfmt-rfc-style
];
extraConfig = ''
luafile ${./settings.lua}
'';
};
};
}