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

387 lines
9.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,
nvim-theme-src,
coc-stylelintplus,
2024-04-22 11:40:48 -04:00
nixd,
2024-04-20 19:20:49 -04:00
vimplugin-easytables-src,
2023-11-22 15:33:16 -05:00
...
2024-01-22 11:09:37 -05:00
}: let
2024-04-22 11:40:48 -04:00
inherit (config.vars) hostName mainUser neovimIde;
inherit (lib) fileContents hasPrefix optionalAttrs optionals removePrefix;
inherit (pkgs) vimPlugins;
buildPlugin = pname: src:
pkgs.vimUtils.buildVimPlugin {
inherit pname src;
version = src.shortRev;
};
javaSdk = pkgs.temurin-bin-17;
coc-stylelintplus-flake = coc-stylelintplus.packages.${pkgs.system}.default;
2024-04-22 11:40:48 -04:00
nixdPkg = nixd.packages.${pkgs.system}.default;
flakeEnv = config.programs.bash.sessionVariables.FLAKE;
2024-04-22 11:40:48 -04:00
flakeDir = "${removePrefix "/home/${mainUser}/" flakeEnv}";
in {
2024-04-22 11:40:48 -04:00
assertions = [
{
assertion = neovimIde && hasPrefix "/home/${mainUser}/" flakeEnv || !neovimIde;
message = ''
2024-04-22 11:40:48 -04:00
Your $FLAKE environment variable needs to point to a directory in
the main users' home to use the neovim module.
'';
}
];
home = optionalAttrs neovimIde {
2023-12-08 14:59:44 -05:00
packages = with pkgs; [
gradle
2024-02-12 16:16:33 -05:00
maven
2023-12-08 14:59:44 -05:00
alejandra
2024-04-22 11:40:48 -04:00
# FIXME: set nixd to use alejandra
(writeShellApplication {
name = "nixpkgs-fmt";
runtimeInputs = [alejandra];
text = "alejandra \"$@\"";
})
2023-12-08 14:59:44 -05:00
];
};
xdg.dataFile = optionalAttrs neovimIde {
".gradle/gradle.properties".text = ''
org.gradle.java.home = ${javaSdk}
'';
2024-04-22 11:40:48 -04:00
"${flakeDir}/.nixd.json".text = builtins.toJSON {
2024-04-22 11:40:48 -04:00
nixpkgs = {
expr = "import (builtins.getFlake \"${flakeDir}\").inputs.nixpkgs {}";
};
options.nixos = {
expr = "(builtins.getFlake \"${flakeDir}\").nixosConfigurations.${hostName}.options";
};
};
2023-12-08 14:59:44 -05:00
};
2023-10-22 15:35:25 -04:00
programs = {
java = optionalAttrs neovimIde {
enable = true;
package = javaSdk;
};
# I love doing typos
bash.shellAliases = {
nivm = "nvim";
nivim = "nvim";
};
neovim = {
enable = true;
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 neovimIde [
nixdPkg
]
++ (with pkgs; [
clang-tools
nodejs_latest
nodePackages.npm
nodePackages.neovim
gradle
]));
extraPython3Packages = ps:
optionals neovimIde [
ps.pylint
];
coc = optionalAttrs neovimIde {
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 = {
2024-04-22 11:40:48 -04:00
command = "nixd";
2023-11-22 15:33:16 -05:00
filetypes = ["nix"];
};
};
2023-11-22 16:22:00 -05:00
# Java
java = {
maven.downloadSources = true;
eclipse.downloadSources = true;
format.settings.url = "eclipse-formatter.xml";
jdt.ls = {
java.home = "${javaSdk}";
statusIcons = {
"busy" = "Busy";
"ready" = "OK";
"warning" = "Warning";
"error" = "Error";
};
2023-11-22 16:22:00 -05:00
};
};
# 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;
line-length = {
tables = false;
};
2023-12-07 16:10:54 -05:00
};
};
};
extraConfig = fileContents ./base.vim;
2023-11-22 15:33:16 -05:00
extraLuaConfig = fileContents ./base.lua;
plugins =
[
vimPlugins.fzfWrapper
vimPlugins.fzf-vim
vimPlugins.fugitive
{
plugin = vimPlugins.dracula-nvim.overrideAttrs {
src = nvim-theme-src;
};
type = "viml";
config = fileContents ./plugins/dracula.vim;
}
{
plugin = vimPlugins.todo-comments-nvim;
type = "lua";
config =
/*
lua
*/
''require('todo-comments').setup()'';
}
{
plugin = vimPlugins.gitsigns-nvim;
type = "lua";
config = fileContents ./plugins/gitsigns.lua;
}
{
plugin = vimPlugins.indent-blankline-nvim;
type = "lua";
config = fileContents ./plugins/indent.lua;
}
{
plugin = vimPlugins.mini-nvim;
type = "lua";
config = fileContents ./plugins/mini.lua;
}
{
plugin = vimPlugins.codewindow-nvim;
type = "lua";
config = fileContents ./plugins/codewindow.lua;
}
]
++ optionals neovimIde [
vimPlugins.markdown-preview-nvim
# Coc configured
vimPlugins.coc-clangd
vimPlugins.coc-cmake
vimPlugins.coc-css
vimPlugins.coc-eslint
vimPlugins.coc-java
vimPlugins.coc-sh
coc-stylelintplus-flake
{
plugin = vimPlugins.coc-snippets;
type = "viml";
config = fileContents ./plugins/snippets.vim;
}
## Lua
vimPlugins.coc-sumneko-lua
vimPlugins.neodev-nvim
## Fzf
vimPlugins.coc-fzf
vimPlugins.coc-highlight
vimPlugins.coc-json
vimPlugins.coc-pyright
vimPlugins.coc-vimlsp
vimPlugins.coc-yaml
vimPlugins.coc-toml
vimPlugins.coc-markdownlint
vimPlugins.coc-tsserver
{
plugin = vimPlugins.nvim-autopairs;
type = "lua";
config = fileContents ./plugins/autopairs.lua;
}
{
plugin = vimPlugins.lualine-nvim;
type = "lua";
config = fileContents ./plugins/lualine.lua;
}
{
plugin = vimPlugins.neo-tree-nvim;
type = "viml";
config = ''
${fileContents ./plugins/neotree.vim}
lua << EOF
${fileContents ./plugins/neotree.lua}
EOF
'';
}
{
plugin = buildPlugin "easytables-nvim" vimplugin-easytables-src;
type = "lua";
config =
/*
lua
*/
''require('easytables').setup();'';
}
]
# Treesitter
++ [
vimPlugins.nvim-treesitter-context
vimPlugins.nvim-treesitter-textobjects
{
type = "viml";
config = fileContents ./plugins/treesitter.vim;
plugin = vimPlugins.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.hyprlang
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
};
}