nixos-configs/common/home/neovim/default.nix

318 lines
7.4 KiB
Nix
Raw Normal View History

2023-11-22 15:33:16 -05:00
{
config,
2023-11-22 15:33:16 -05:00
pkgs,
lib,
coc-stylelintplus-flake,
tree-sitter-hypr-flake,
2023-11-22 15:33:16 -05:00
...
}:
with lib; let
nvimIde = config.vars.neovimIde;
javaSdk = pkgs.temurin-bin-17;
nvim-treesitter-hypr = tree-sitter-hypr-flake.packages.${pkgs.system}.default;
coc-stylelintplus = coc-stylelintplus-flake.packages.${pkgs.system}.default;
in {
2023-12-08 14:59:44 -05:00
home = optionalAttrs nvimIde {
packages = with pkgs; [
gradle
gradle-completion # FIXME: not working
alejandra
];
};
2023-10-22 15:35:25 -04:00
xdg.dataFile = optionalAttrs nvimIde {
".gradle/gradle.properties".text = ''
org.gradle.java.home = ${javaSdk}
'';
};
programs = {
java = optionalAttrs nvimIde {
enable = true;
package = javaSdk;
};
# I love doing typos
bash.shellAliases = {
nivm = "nvim";
nivim = "nvim";
};
neovim = {
enable = true;
2023-11-19 14:39:10 -05:00
package = pkgs.neovim-nightly;
withNodeJs = true;
withPython3 = true;
withRuby = false;
2023-10-26 00:35:24 -04:00
defaultEditor = true;
viAlias = true;
vimAlias = true;
extraPackages = with pkgs; ([
bat
gcc
]
++ optionals nvimIde [
nodejs_latest
nodePackages.npm
nodePackages.neovim
gradle
nil
]);
extraPython3Packages = ps:
optionals nvimIde [
ps.pylint
];
coc = optionalAttrs nvimIde {
enable = true;
settings = {
# General
2023-11-22 16:22:00 -05:00
colors.enable = true;
coc.preferences.formatOnType = true;
diagnostic.checkCurrentLine = true;
inlayHint.enable = false;
2023-11-22 16:22:00 -05:00
# ESLint
eslint = {
format.enable = true;
autoFixOnSave = true;
};
# Stylelint
2023-11-22 16:22:00 -05:00
stylelintplus = {
enable = true;
cssInJs = true;
autoFixOnSave = true;
autoFixOnFormat = true;
};
css.validate = false;
less.validate = false;
scss.validate = false;
wxss.validate = false;
2023-11-22 16:22:00 -05:00
# Lua
Lua = {
misc.parameters = [
"--metapath"
"~/.cache/sumneko_lua/meta"
"--logpath"
"~/.cache/sumneko_lua/log"
];
workspace.library = [
"$\{3rd\}/luv/library"
];
};
sumneko-lua = {
serverDir = "${pkgs.lua-language-server}/share/lua-language-server";
enableNvimLuaDev = true;
};
languageserver = {
2023-11-22 16:22:00 -05:00
# Nix
nix = {
command = "nil";
2023-11-22 15:33:16 -05:00
filetypes = ["nix"];
rootPatterns = ["flake.nix"];
settings = {
nil = {
formatting = {command = ["alejandra"];};
};
};
};
};
2023-11-22 16:22:00 -05:00
# Java
java.jdt.ls = {
java.home = "${javaSdk}";
2023-11-22 16:22:00 -05:00
statusIcons = {
"busy" = "Busy";
"ready" = "OK";
"warning" = "Warning";
"error" = "Error";
};
};
# Bash
bashIde.shellcheckPath = "${pkgs.shellcheck}/bin/shellcheck";
2023-12-07 16:10:54 -05:00
markdownlint.config = {
no-trailing-spaces = true;
no-multiple-blanks = false;
no-duplicate-heading = false;
};
};
};
extraConfig = fileContents ./base.vim;
2023-11-22 15:33:16 -05:00
extraLuaConfig = fileContents ./base.lua;
plugins = with pkgs.vimPlugins;
([
fzfWrapper
fzf-vim
fugitive
{
plugin = dracula-nvim;
type = "viml";
config = fileContents ./plugins/dracula.vim;
}
{
plugin = lualine-nvim;
type = "lua";
config = fileContents ./plugins/lualine.lua;
}
{
plugin = todo-comments-nvim;
type = "lua";
config = "require('todo-comments').setup()";
}
{
plugin = gitsigns-nvim;
type = "lua";
config = fileContents ./plugins/gitsigns.lua;
}
{
plugin = nvim-autopairs;
type = "lua";
config = fileContents ./plugins/autopairs.lua;
}
{
plugin = indent-blankline-nvim;
type = "lua";
config = fileContents ./plugins/indent.lua;
}
{
plugin = mini-nvim;
type = "lua";
config = fileContents ./plugins/mini.lua;
}
]
++ optionals nvimIde [
# Coc configured
coc-css
coc-eslint
coc-java
coc-sh
coc-stylelintplus
{
plugin = coc-snippets;
type = "viml";
config = fileContents ./plugins/snippets.vim;
}
## Lua
coc-sumneko-lua
neodev-nvim
## Fzf
coc-fzf
coc-highlight
coc-json
coc-pyright
coc-vimlsp
coc-yaml
coc-toml
coc-markdownlint
coc-tsserver
{
plugin = neo-tree-nvim;
type = "viml";
config = ''
${fileContents ./plugins/neotree.vim}
lua << EOF
${fileContents ./plugins/neotree.lua}
EOF
'';
}
])
# Treesitter
++ (with pkgs.vimPlugins; [
nvim-treesitter-context
nvim-treesitter-textobjects
nvim-treesitter-hypr
{
type = "viml";
config = fileContents ./plugins/treesitter.vim;
plugin = nvim-treesitter.withPlugins (p: [
p.awk
p.bash
p.c
p.c_sharp
p.cairo
p.cmake
p.comment
p.cpp
p.css
p.csv
p.cuda
p.diff
p.dockerfile
p.dot
p.git_config
p.git_rebase
p.gitattributes
p.gitcommit
p.gitignore
p.go
p.gomod
p.gosum
p.groovy
p.haskell
p.haskell_persistent
p.html
p.ini
p.java
p.javascript
p.jq
p.jsdoc
p.json
p.json5
p.jsonc
p.jsonnet
p.kotlin
p.latex
p.lua
p.luadoc
p.make
p.markdown
p.meson
p.ninja
p.nix
p.passwd
p.perl
p.php
p.phpdoc
p.properties
p.python
p.rasi
p.regex
p.requirements
p.ruby
p.rust
p.scss
p.sql
p.ssh_config
p.toml
p.todotxt
p.typescript
p.udev
p.vim
p.vimdoc
p.vue
p.xml
p.yaml
]);
}
]);
};
2023-07-19 21:52:35 -04:00
};
}