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

312 lines
7.6 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.
'';
}
];
imports = [
./treesitter.nix
];
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();'';
}
];
};
2023-07-19 21:52:35 -04:00
};
}