feat(nvim): add options to trim down package size #125
4 changed files with 190 additions and 112 deletions
155
nvim/dev-plugins.nix
Normal file
155
nvim/dev-plugins.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,7 +1,36 @@
|
||||||
{ lib, ... }:
|
{ 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" // {
|
options.jhome.nvim = {
|
||||||
default = true;
|
enable = mkDisableOption "jalil's Neovim configuration";
|
||||||
example = false;
|
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.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
104
nvim/plugins.nix
104
nvim/plugins.nix
|
@ -1,18 +1,9 @@
|
||||||
{
|
{ lib, helpers, ... }:
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
helpers,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (helpers) mkRaw enableExceptInTests;
|
inherit (helpers) mkRaw;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config.plugins = {
|
config.plugins = {
|
||||||
bacon = {
|
|
||||||
enable = true;
|
|
||||||
settings.quickfix.enabled = true;
|
|
||||||
};
|
|
||||||
cmp = {
|
cmp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
cmdline = {
|
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;
|
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 = {
|
lualine = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings.options.theme = lib.mkForce "gruvbox";
|
settings.options.theme = lib.mkForce "gruvbox";
|
||||||
|
@ -254,19 +175,6 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
backgroundColour = "#000000";
|
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 = {
|
telescope = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extensions = {
|
extensions = {
|
||||||
|
@ -274,14 +182,6 @@ in
|
||||||
fzy-native.enable = true;
|
fzy-native.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
treesitter = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
highlight.enable = true;
|
|
||||||
indent.enable = true;
|
|
||||||
incremental_election.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
trouble = {
|
trouble = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings.auto_close = true;
|
settings.auto_close = true;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
imports = [
|
imports = [
|
||||||
./options.nix
|
./options.nix
|
||||||
./plugins.nix
|
./plugins.nix
|
||||||
|
./dev-plugins.nix
|
||||||
./mappings.nix
|
./mappings.nix
|
||||||
./augroups.nix
|
./augroups.nix
|
||||||
];
|
];
|
||||||
|
@ -62,14 +63,7 @@
|
||||||
# Formatting & linters
|
# Formatting & linters
|
||||||
extraPackages = [
|
extraPackages = [
|
||||||
pkgs.luajitPackages.jsregexp
|
pkgs.luajitPackages.jsregexp
|
||||||
pkgs.shfmt
|
|
||||||
pkgs.silicon
|
pkgs.silicon
|
||||||
pkgs.statix
|
|
||||||
pkgs.stylua
|
|
||||||
pkgs.taplo
|
|
||||||
pkgs.typos
|
|
||||||
pkgs.yamlfmt
|
|
||||||
(pkgs.python3.withPackages (p: [ p.jupytext ]))
|
|
||||||
];
|
];
|
||||||
extraConfigLuaPre =
|
extraConfigLuaPre =
|
||||||
# lua
|
# lua
|
||||||
|
|
Loading…
Reference in a new issue