136 lines
4.2 KiB
Nix
136 lines
4.2 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
cfg = config.modules.editors.neovim;
|
|
dev = config.modules.dev;
|
|
in {
|
|
options.modules.editors.neovim = {
|
|
enable = lib.mkOption {
|
|
default = false;
|
|
example = true;
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
user.packages = with pkgs; [
|
|
(neovim.override {
|
|
configure = {
|
|
customRC = ''
|
|
luafile ~/.config/nvim/init.lua
|
|
'';
|
|
packages.myPlugins = with pkgs.vimPlugins; {
|
|
start = [
|
|
(nvim-treesitter.withPlugins (
|
|
plugins: with plugins; [
|
|
bash
|
|
c
|
|
cmake
|
|
cpp
|
|
css
|
|
dockerfile
|
|
elm
|
|
glsl
|
|
graphql
|
|
haskell
|
|
http
|
|
html
|
|
java
|
|
javascript
|
|
jsdoc
|
|
json
|
|
json5
|
|
latex
|
|
lua
|
|
markdown
|
|
ninja
|
|
nix
|
|
org
|
|
perl
|
|
php
|
|
pug
|
|
python
|
|
regex
|
|
rst
|
|
ruby
|
|
rust
|
|
scala
|
|
scss
|
|
toml
|
|
tsx
|
|
typescript
|
|
vim
|
|
yaml
|
|
zig
|
|
]
|
|
))
|
|
nvim-treesitter-context
|
|
nvim-treesitter-textobjects
|
|
nvim-lspconfig
|
|
];
|
|
};
|
|
};
|
|
})
|
|
] ++
|
|
|
|
# Install appropriate language servers
|
|
(if dev.cc.enable then [
|
|
ccls # C/C++
|
|
] else []) ++
|
|
(if dev.java.enable then [
|
|
java-language-server # Java
|
|
ltex-ls # LaTeX
|
|
] else []) ++
|
|
(if dev.lua.enable then [
|
|
sumneko-lua-language-server # Lua
|
|
] else []) ++
|
|
(if dev.node.enable then [
|
|
nodePackages.bash-language-server # Bash
|
|
nodePackages.dockerfile-language-server-nodejs # Dockerfile
|
|
nodePackages.graphql-language-service-cli # GraphQL
|
|
nodePackages.purescript-language-server # PureScript
|
|
nodePackages.svelte-language-server # Svelte
|
|
nodePackages.typescript-language-server # JavaScript/TypeScript
|
|
nodePackages.vim-language-server # Vim
|
|
nodePackages.vscode-langservers-extracted # HTML, CSS, JSON, ESLint
|
|
nodePackages.vue-language-server # Vue.js
|
|
nodePackages.yaml-language-server # YAML
|
|
] else []) ++
|
|
(if dev.python.enable then [
|
|
cmake-language-server # CMake
|
|
python310Packages.python-lsp-server # Python
|
|
] else []) ++
|
|
(if dev.rust.enable then [
|
|
rust-analyzer # Rust
|
|
] else []) ++
|
|
(if dev.scala.enable then [
|
|
metals # Scala
|
|
] else []) ++
|
|
(if dev.zig.enable then [
|
|
zls # Zig
|
|
] else []);
|
|
|
|
home.configFile = {
|
|
"nvim/init.lua".source = ./init.lua;
|
|
"nvim/lua" = { source = ./lua; recursive = true; };
|
|
"nvim/lua/config/lsp.lua".text = ''
|
|
-- This file is autogenerated, do not edit.
|
|
${if dev.cc.enable then "require('config.lsp.cc')\n" else ""}
|
|
${if dev.java.enable then "require('config.lsp.java')\n" else ""}
|
|
${if dev.lua.enable then "require('config.lsp.lua')\n" else ""}
|
|
${if dev.node.enable then "require('config.lsp.node')\n" else ""}
|
|
${if dev.python.enable then "require('config.lsp.python')\n" else ""}
|
|
${if dev.rust.enable then "require('config.lsp.rust')\n" else ""}
|
|
${if dev.scala.enable then "require('config.lsp.scala')\n" else ""}
|
|
${if dev.zig.enable then "require('config.lsp.zig')\n" else ""}
|
|
'';
|
|
};
|
|
|
|
env.EDITOR = "nvim";
|
|
|
|
environment.shellAliases = {
|
|
vim = "nvim";
|
|
v = "nvim";
|
|
};
|
|
};
|
|
}
|