284 lines
7.2 KiB
Nix
284 lines
7.2 KiB
Nix
inputs: {
|
|
config,
|
|
wlib,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
imports = [wlib.wrapperModules.neovim];
|
|
# NOTE: see the tips and tricks section or the bottom of this file + flake inputs to understand this value
|
|
options.nvim-lib.neovimPlugins = lib.mkOption {
|
|
readOnly = true;
|
|
type = lib.types.attrsOf wlib.types.stringable;
|
|
# Makes plugins autobuilt from our inputs available with
|
|
# `config.nvim-lib.neovimPlugins.<name_without_prefix>`
|
|
default = config.nvim-lib.pluginsFromPrefix "plugins-" inputs;
|
|
};
|
|
|
|
# choose a directory for your config.
|
|
config.settings.config_directory = ./.;
|
|
# you can also use an impure path!
|
|
# config.settings.config_directory = lib.generators.mkLuaInline "vim.fn.stdpath('config')";
|
|
# config.settings.config_directory = "/home/<USER>/.config/nvim";
|
|
# If you do that, it will not be provisioned by nix, but it will have normal reload for quick edits!
|
|
|
|
# If you want to install multiple neovim derivations via home.packages or environment.systemPackages
|
|
# in order to prevent path collisions:
|
|
|
|
# set this to true:
|
|
# config.settings.dont_link = true;
|
|
|
|
# and make sure these dont share values:
|
|
# config.binName = "nvim";
|
|
# config.settings.aliases = [ ];
|
|
|
|
# To add a wrapped $out/bin/${config.binName}-neovide to the resulting neovim derivation
|
|
# config.hosts.neovide.nvim-host.enable = true;
|
|
|
|
# You can declare your own options!
|
|
options.settings.colorscheme = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "onedark_dark";
|
|
};
|
|
options.settings.minimal = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
};
|
|
config.settings.colorscheme = "gruvbox"; # <- just demonstrating that it is an option
|
|
# and grab it in lua with `require(vim.g.nix_info_plugin_name)("onedark", "settings", "colorscheme") == "moonfly"`
|
|
config.specs.colorscheme = {
|
|
lazy = true;
|
|
enable = lib.mkIf config.settings.minimal (lib.mkDefault true);
|
|
data = builtins.getAttr config.settings.colorscheme (
|
|
with pkgs.vimPlugins; {
|
|
"onedark_dark" = onedarkpro-nvim;
|
|
"onedark_vivid" = onedarkpro-nvim;
|
|
"onedark" = onedarkpro-nvim;
|
|
"onelight" = onedarkpro-nvim;
|
|
"moonfly" = vim-moonfly-colors;
|
|
"catppuccin" = catppuccin-nvim;
|
|
"tokyonight" = tokyonight-nvim;
|
|
"nord" = nord-nvim;
|
|
"gruvbox" = gruvbox-nvim;
|
|
}
|
|
);
|
|
};
|
|
config.specs.lze = {
|
|
enable = lib.mkIf config.settings.minimal (lib.mkDefault true);
|
|
data = [
|
|
config.nvim-lib.neovimPlugins.lze
|
|
config.nvim-lib.neovimPlugins.lzextras
|
|
];
|
|
};
|
|
|
|
config.specs.general = {
|
|
# this would ensure any config included from nix in here will be ran after any provided by the `lze` spec
|
|
# If we provided any from within either spec, anyway
|
|
after = ["lze"];
|
|
enable = lib.mkIf config.settings.minimal (lib.mkDefault true);
|
|
extraPackages = with pkgs; [
|
|
ripgrep
|
|
fd
|
|
fzf
|
|
zoxide
|
|
git
|
|
lazygit
|
|
tree-sitter
|
|
];
|
|
# here we chose a DAL of plugins, but we can also pass a single plugin, or null
|
|
data = with pkgs.vimPlugins; [
|
|
snacks-nvim
|
|
lualine-nvim
|
|
plenary-nvim
|
|
oil-nvim
|
|
nvim-web-devicons
|
|
nvim-numbertoggle
|
|
lualine-nvim
|
|
marks-nvim
|
|
];
|
|
};
|
|
config.specs.lazy = {
|
|
after = ["lze"];
|
|
enable = lib.mkIf config.settings.minimal (lib.mkDefault true);
|
|
lazy = true;
|
|
data = with pkgs.vimPlugins; [
|
|
gitsigns-nvim
|
|
nvim-surround
|
|
treesj
|
|
which-key-nvim
|
|
todo-comments-nvim
|
|
comment-nvim
|
|
rainbow-delimiters-nvim
|
|
nvim-treesitter.withAllGrammars
|
|
];
|
|
};
|
|
config.specs.completion = {
|
|
after = ["lze"];
|
|
lazy = true;
|
|
enable = lib.mkIf config.settings.minimal false;
|
|
data = with pkgs.vimPlugins; [
|
|
luasnip
|
|
friendly-snippets
|
|
cmp-cmdline
|
|
blink-cmp
|
|
blink-emoji-nvim
|
|
blink-compat
|
|
colorful-menu-nvim
|
|
];
|
|
};
|
|
|
|
config.specs.markdown = {
|
|
after = ["general" "lazy"];
|
|
enable = lib.mkIf config.settings.minimal false;
|
|
lazy = true;
|
|
data = with pkgs.vimPlugins; [
|
|
markdown-preview-nvim
|
|
];
|
|
extraPackages = with pkgs; [
|
|
mermaid-cli
|
|
imagemagick
|
|
texliveSmall
|
|
];
|
|
};
|
|
|
|
config.specs.lsp = {
|
|
enable = lib.mkIf config.settings.minimal false;
|
|
after = ["general" "lazy"];
|
|
lazy = true;
|
|
|
|
data = with pkgs.vimPlugins; [
|
|
trouble-nvim
|
|
lualine-lsp-progress
|
|
nvim-lspconfig
|
|
];
|
|
};
|
|
|
|
config.specs.zk = {
|
|
after = ["general" "lazy"];
|
|
data = with pkgs.vimPlugins; [
|
|
zk-nvim
|
|
];
|
|
extraPackages = with pkgs; [
|
|
zk
|
|
];
|
|
};
|
|
|
|
config.specs.typst = {
|
|
name = "typst";
|
|
after = ["general" "lazy"];
|
|
data = with pkgs.vimPlugins; [
|
|
typst-preview-nvim
|
|
];
|
|
extraPackages = with pkgs; [
|
|
typst
|
|
tinymist
|
|
];
|
|
};
|
|
|
|
config.specs.nix = {
|
|
name = "nix";
|
|
after = ["general" "lazy"];
|
|
data = null;
|
|
extraPackages = with pkgs; [
|
|
nixd
|
|
alejandra
|
|
];
|
|
};
|
|
|
|
config.specs.lua = {
|
|
name = "lua";
|
|
after = ["general" "lazy"];
|
|
data = with pkgs.vimPlugins; [
|
|
lazydev-nvim
|
|
];
|
|
extraPackages = with pkgs; [
|
|
lua-language-server
|
|
stylua
|
|
];
|
|
};
|
|
|
|
config.specs.rust = {
|
|
name = "rust";
|
|
after = ["general" "lazy"];
|
|
data = with pkgs.vimPlugins; [
|
|
rustaceanvim
|
|
];
|
|
extraPackages = with pkgs; [
|
|
rust-analyzer
|
|
cargo
|
|
];
|
|
};
|
|
|
|
config.specs.python = {
|
|
name = "python";
|
|
after = ["general" "lazy"];
|
|
data = null;
|
|
extraPackages = with pkgs; [
|
|
ty
|
|
ruff
|
|
];
|
|
};
|
|
|
|
config.specs.C = {
|
|
name = "C";
|
|
after = ["general" "lazy"];
|
|
data = null;
|
|
extraPackages = with pkgs; [
|
|
libclang
|
|
];
|
|
};
|
|
|
|
config.specs.bash = {
|
|
name = "bash";
|
|
after = ["general" "lazy"];
|
|
lazy = true;
|
|
data = null;
|
|
extraPackages = with pkgs; [
|
|
shellcheck
|
|
bash-language-server
|
|
];
|
|
};
|
|
|
|
config.specMods = lib.mkMerge [
|
|
{
|
|
options.extraPackages = lib.mkOption {
|
|
type = lib.types.listOf wlib.types.stringable;
|
|
default = [];
|
|
description = "a extraPackages spec field to put packages to suffix to the PATH";
|
|
};
|
|
}
|
|
# Makes enable be false by default if minimal is set.
|
|
(lib.mkIf config.settings.minimal (
|
|
{parentSpec, ...}: {
|
|
config.enable = lib.mkOverride 1400 (parentSpec.enable or false); # 1400 is 100 higher than mkOptionDefault (1500)
|
|
}
|
|
))
|
|
];
|
|
|
|
config.extraPackages = config.specCollect (acc: v: acc ++ (v.extraPackages or [])) [];
|
|
# Inform our lua of which top level specs are enabled
|
|
options.settings.cats = lib.mkOption {
|
|
readOnly = true;
|
|
type = lib.types.attrsOf lib.types.bool;
|
|
default = builtins.mapAttrs (_: v: v.enable) config.specs;
|
|
};
|
|
# build plugins from inputs set
|
|
options.nvim-lib.pluginsFromPrefix = lib.mkOption {
|
|
type = lib.types.raw;
|
|
readOnly = true;
|
|
default = prefix: inputs:
|
|
lib.pipe inputs [
|
|
builtins.attrNames
|
|
(builtins.filter (s: lib.hasPrefix prefix s))
|
|
(map (
|
|
input: let
|
|
name = lib.removePrefix prefix input;
|
|
in {
|
|
inherit name;
|
|
value = config.nvim-lib.mkPlugin name inputs.${input};
|
|
}
|
|
))
|
|
builtins.listToAttrs
|
|
];
|
|
};
|
|
}
|