feat(nvim): add options to trim down package size #125

Merged
jalil merged 1 commit from trimmed-nvim into main 2024-11-02 23:43:45 +01:00
4 changed files with 190 additions and 112 deletions

155
nvim/dev-plugins.nix Normal file
View file

@ -0,0 +1,155 @@
{
lib,
pkgs,
config,
helpers,
...
}:
let
inherit (helpers) mkRaw enableExceptInTests;
cfg = config.jhome.nvim;
enabledLSPs = [
"bashls"
# "clangd" # Adds ~2GiB
# "html" # Not writing html
"jsonls"
"marksman"
"nixd"
"pyright"
"ruff"
"taplo"
# "texlab" # Not using it
"typos_lsp"
# "typst_lsp" # Not using it
];
in
{
config = lib.mkIf cfg.dev.enable (
lib.mkMerge [
# Enable LSPs
{
plugins.lsp.servers = lib.genAttrs enabledLSPs (_: {
enable = true;
});
}
# Remove bundled LSPs
(lib.mkIf (!cfg.dev.bundleLSPs) {
plugins.lsp.servers = lib.genAttrs enabledLSPs (_: {
package = null;
});
})
# Configure LSPs
{
plugins = {
lsp.servers.bashls.package = pkgs.bash-language-server;
lspkind = {
enable = true;
mode = "symbol";
extraOptions.maxwidth = 50;
};
lsp-lines.enable = true;
};
}
# Configure Treesitter
{
plugins.treesitter = {
enable = true;
settings = {
highlight.enable = true;
indent.enable = true;
incremental_election.enable = true;
};
};
}
# Do not bundle treesitter grammars
(lib.mkIf (!cfg.dev.bundleGrammars) { plugins.treesitter.grammarPackages = [ ]; })
# Configure Formatters
{
extraPackages = [
pkgs.luajitPackages.jsregexp
pkgs.shfmt
pkgs.stylua
pkgs.taplo
pkgs.yamlfmt
];
plugins.conform-nvim = {
enable = true;
settings = {
formatters.nixfmt.command = "${lib.getExe pkgs.nixfmt-rfc-style}";
formatters_by_ft = {
"_" = [ "trim_whitespace" ];
c = [ "clang_format" ];
cpp = [ "clang_format" ];
lua = [ "stylua" ];
nix = [ "nixfmt" ];
rust = [ "rustfmt" ];
sh = [ "shfmt" ];
toml = [ "taplo" ];
yaml = [ "yamlfmt" ];
zig = [ "zigfmt" ];
};
};
};
}
# Configure Linters
{
extraPackages = [
pkgs.dash
pkgs.statix
pkgs.zsh
];
plugins.lint = {
enable = true;
lintersByFt = {
# latex = [ "chktex" ]; # Not in use
nix = [ "statix" ];
sh = [ "dash" ];
zsh = [ "zsh" ];
};
};
}
# Jupyter notebooks
{
extraPackages = [ (pkgs.python3.withPackages (p: [ p.jupytext ])) ];
plugins = {
image.enable = enableExceptInTests;
jupytext = {
enable = true;
settings.custom_language_formatting.python = {
extension = "md";
style = "markdown";
force_ft = "markdown";
};
};
};
}
# Rust plugins
{
plugins = {
bacon = {
enable = true;
settings.quickfix.enabled = true;
};
rustaceanvim = {
enable = true;
# Install through rustup
rustAnalyzerPackage = null;
};
};
}
# Other plugins
{
plugins = {
nvim-colorizer = {
enable = true;
userDefaultOptions = {
names = false; # disable named colors (i.e. red)
mode = "virtualtext";
};
};
otter.enable = true;
};
}
]
);
}

View file

@ -1,7 +1,36 @@
{ lib, ... }:
let
inherit (lib) mkEnableOption mkOption types;
mkDisableOption =
desc:
mkEnableOption desc
// {
default = true;
example = false;
};
in
{
options.jhome.nvim.enable = lib.mkEnableOption "jalil's neovim configuration" // {
default = true;
example = false;
options.jhome.nvim = {
enable = mkDisableOption "jalil's Neovim configuration";
dev = mkOption {
type = types.submodule {
options = {
enable = mkDisableOption "development configuration";
bundleLSPs = mkDisableOption "bundling LSPs with Neovim";
bundleGrammars = mkDisableOption "bundling treesitter grammars with Neovim";
};
};
default = { };
example = {
enable = false;
};
description = ''
Development options
Disabling this is advised for headless setups (e.g. servers), where you
won't be doing software development and would prefer to instead have a
smaller package.
'';
};
};
}

View file

@ -1,18 +1,9 @@
{
lib,
pkgs,
helpers,
...
}:
{ lib, helpers, ... }:
let
inherit (helpers) mkRaw enableExceptInTests;
inherit (helpers) mkRaw;
in
{
config.plugins = {
bacon = {
enable = true;
settings.quickfix.enabled = true;
};
cmp = {
enable = true;
cmdline = {
@ -140,77 +131,7 @@ in
'';
};
};
# FIXME: doesn't include formatters
conform-nvim = {
enable = true;
settings = {
formatters.nixfmt.command = "${lib.getExe pkgs.nixfmt-rfc-style}";
formatters_by_ft = {
"_" = [ "trim_whitespace" ];
c = [ "clang_format" ];
cpp = [ "clang_format" ];
lua = [ "stylua" ];
nix = [ "nixfmt" ];
rust = [ "rustfmt" ];
sh = [ "shfmt" ];
toml = [ "taplo" ];
yaml = [ "yamlfmt" ];
zig = [ "zigfmt" ];
};
};
};
gitsigns.enable = true;
image.enable = enableExceptInTests;
jupytext = {
enable = true;
settings.custom_language_formatting.python = {
extension = "md";
style = "markdown";
force_ft = "markdown";
};
};
lint = {
enable = true;
lintersByFt = {
latex = [ "chktex" ];
nix = [ "statix" ];
sh = [ "dash" ];
zsh = [ "zsh" ];
};
};
lsp = {
enable = true;
servers = {
bashls = {
enable = true;
package = pkgs.bash-language-server;
};
# clangd.enable = true; # Adds ~2GiB
# html.enable = true; # Not writing html
jsonls.enable = true;
marksman.enable = true;
nixd.enable = true;
nil_ls = {
enable = true;
settings.nix.flake = {
autoArchive = true;
autoEvalInputs = true;
};
};
pyright.enable = true;
ruff.enable = true;
taplo.enable = true;
# texlab.enable = true; # Not writing TeX rn
typos_lsp.enable = true;
# typst_lsp.enable = true; # Not using it either
};
};
lspkind = {
enable = true;
mode = "symbol";
extraOptions.maxwidth = 50;
};
lsp-lines.enable = true;
lualine = {
enable = true;
settings.options.theme = lib.mkForce "gruvbox";
@ -254,19 +175,6 @@ in
enable = true;
backgroundColour = "#000000";
};
nvim-colorizer = {
enable = true;
userDefaultOptions = {
names = false; # disable named colors (i.e. red)
mode = "virtualtext";
};
};
otter.enable = true;
rustaceanvim = {
enable = true;
# Install through rustup
rustAnalyzerPackage = null;
};
telescope = {
enable = true;
extensions = {
@ -274,14 +182,6 @@ in
fzy-native.enable = true;
};
};
treesitter = {
enable = true;
settings = {
highlight.enable = true;
indent.enable = true;
incremental_election.enable = true;
};
};
trouble = {
enable = true;
settings.auto_close = true;

View file

@ -10,6 +10,7 @@
imports = [
./options.nix
./plugins.nix
./dev-plugins.nix
./mappings.nix
./augroups.nix
];
@ -62,14 +63,7 @@
# Formatting & linters
extraPackages = [
pkgs.luajitPackages.jsregexp
pkgs.shfmt
pkgs.silicon
pkgs.statix
pkgs.stylua
pkgs.taplo
pkgs.typos
pkgs.yamlfmt
(pkgs.python3.withPackages (p: [ p.jupytext ]))
];
extraConfigLuaPre =
# lua