Made some changes to taste along the way, though there are some still to come.
430 lines
13 KiB
Nix
430 lines
13 KiB
Nix
# Copyright (c) 2023 BirdeeHub and Gabriel Venberg
|
|
# Licensed under the MIT license
|
|
{
|
|
description = "Gabes neovim config, based on NixCats";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
|
nixCats.url = "github:BirdeeHub/nixCats-nvim";
|
|
};
|
|
|
|
# see :help nixCats.flake.outputs
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
...
|
|
} @ inputs: let
|
|
inherit (inputs.nixCats) utils;
|
|
luaPath = ./.;
|
|
# this is flake-utils eachSystem
|
|
forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all;
|
|
extra_pkg_config = {
|
|
# allowUnfree = true;
|
|
};
|
|
# management of the system variable is one of the harder parts of using flakes.
|
|
|
|
# so I have done it here in an interesting way to keep it out of the way.
|
|
# It gets resolved within the builder itself, and then passed to your
|
|
# categoryDefinitions and packageDefinitions.
|
|
|
|
# this allows you to use ${pkgs.system} whenever you want in those sections
|
|
# without fear.
|
|
|
|
# see :help nixCats.flake.outputs.overlays
|
|
dependencyOverlays =
|
|
/*
|
|
(import ./overlays inputs) ++
|
|
*/
|
|
[
|
|
# This overlay grabs all the inputs named in the format
|
|
# `plugins-<pluginName>`
|
|
# Once we add this overlay to our nixpkgs, we are able to
|
|
# use `pkgs.neovimPlugins`, which is a set of our plugins.
|
|
(utils.standardPluginOverlay inputs)
|
|
# add any other flake overlays here.
|
|
];
|
|
|
|
# see :help nixCats.flake.outputs.categories
|
|
# and
|
|
# :help nixCats.flake.outputs.categoryDefinitions.scheme
|
|
categoryDefinitions = {
|
|
pkgs,
|
|
settings,
|
|
categories,
|
|
extra,
|
|
name,
|
|
mkPlugin,
|
|
...
|
|
} @ packageDef: {
|
|
# to define and use a new category, simply add a new list to a set here,
|
|
# and later, you will include categoryname = true; in the set you
|
|
# provide when you build the package using this builder function.
|
|
# see :help nixCats.flake.outputs.packageDefinitions for info on that section.
|
|
|
|
# lspsAndRuntimeDeps:
|
|
# this section is for dependencies that should be available
|
|
# at RUN TIME for plugins. Will be available to PATH within neovim terminal
|
|
# this includes LSPs
|
|
lspsAndRuntimeDeps = with pkgs; {
|
|
# some categories of stuff.
|
|
always = [
|
|
universal-ctags
|
|
ripgrep
|
|
fd
|
|
fzf
|
|
];
|
|
telescope = [
|
|
zoxide
|
|
];
|
|
lsp = {
|
|
rust = [
|
|
rust-analyzer
|
|
cargo
|
|
|
|
];
|
|
lua = [
|
|
lua-language-server
|
|
];
|
|
nix = [
|
|
nix-doc
|
|
nixd
|
|
alejandra
|
|
];
|
|
python = [
|
|
basedpyright
|
|
ruff
|
|
];
|
|
C = [
|
|
libclang
|
|
];
|
|
};
|
|
format = [
|
|
];
|
|
};
|
|
|
|
# This is for plugins that will load at startup without using packadd:
|
|
startupPlugins = with pkgs.vimPlugins; {
|
|
always = [
|
|
lze
|
|
lzextras
|
|
plenary-nvim
|
|
oil-nvim
|
|
nvim-web-devicons
|
|
snacks-nvim
|
|
nvim-numbertoggle
|
|
lualine-nvim
|
|
which-key-nvim
|
|
todo-comments-nvim
|
|
marks-nvim
|
|
];
|
|
lsp={
|
|
rust = [
|
|
rustaceanvim
|
|
];
|
|
};
|
|
debug = [
|
|
nvim-nio
|
|
];
|
|
treesitter = [
|
|
comment-nvim
|
|
rainbow-delimiters-nvim
|
|
nvim-treesitter-context
|
|
nvim-treesitter.withAllGrammars
|
|
treesj
|
|
];
|
|
# You can retreive information from the
|
|
# packageDefinitions of the package this was packaged with.
|
|
# :help nixCats.flake.outputs.categoryDefinitions.scheme
|
|
themer = with pkgs.vimPlugins; (
|
|
builtins.getAttr (categories.colorscheme or "gruvbox") {
|
|
# Theme switcher without creating a new category
|
|
"onedark" = onedark-nvim;
|
|
"catppuccin" = catppuccin-nvim;
|
|
"tokyonight" = tokyonight-nvim;
|
|
"nord" = nord-nvim;
|
|
"gruvbox" = gruvbox-nvim;
|
|
"solarized" = solarized-nvim;
|
|
}
|
|
);
|
|
# This is obviously a fairly basic usecase for this, but still nice.
|
|
};
|
|
|
|
# not loaded automatically at startup.
|
|
# use with packadd and an autocommand in config to achieve lazy loading
|
|
# or a tool for organizing this like lze or lz.n!
|
|
# to get the name packadd expects, use the
|
|
# `:NixCats pawsible` command to see them all
|
|
optionalPlugins = with pkgs.vimPlugins; {
|
|
debug = {
|
|
default = [
|
|
nvim-dap
|
|
nvim-dap-ui
|
|
nvim-dap-virtual-text
|
|
telescope-dap-nvim
|
|
];
|
|
};
|
|
lint = [
|
|
nvim-lint
|
|
];
|
|
format = [
|
|
conform-nvim
|
|
];
|
|
markdown = [
|
|
markdown-preview-nvim
|
|
];
|
|
lsp = {
|
|
default = [
|
|
trouble-nvim
|
|
lualine-lsp-progress
|
|
nvim-lspconfig
|
|
];
|
|
zk = [
|
|
zk-nvim
|
|
];
|
|
lua = [
|
|
lazydev-nvim
|
|
];
|
|
};
|
|
always = [
|
|
gitsigns-nvim
|
|
nvim-surround
|
|
leap-nvim
|
|
toggleterm-nvim
|
|
];
|
|
tree = [
|
|
nvim-tree-lua
|
|
fidget-nvim
|
|
];
|
|
completion = [
|
|
luasnip
|
|
friendly-snippets
|
|
cmp-cmdline
|
|
blink-cmp
|
|
blink-compat
|
|
colorful-menu-nvim
|
|
];
|
|
telescope = [
|
|
telescope-ui-select-nvim
|
|
telescope-nvim
|
|
telescope-zoxide
|
|
telescope-file-browser-nvim
|
|
];
|
|
extra = [
|
|
vim-startuptime
|
|
];
|
|
};
|
|
|
|
# shared libraries to be added to LD_LIBRARY_PATH
|
|
# variable available to nvim runtime
|
|
sharedLibraries = {
|
|
};
|
|
|
|
# environmentVariables:
|
|
# this section is for environmentVariables that should be available
|
|
# at RUN TIME for plugins. Will be available to path within neovim terminal
|
|
environmentVariables = {
|
|
};
|
|
|
|
# If you know what these are, you can provide custom ones by category here.
|
|
# If you dont, check this link out:
|
|
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/setup-hooks/make-wrapper.sh
|
|
extraWrapperArgs = {
|
|
};
|
|
|
|
# populates $LUA_PATH and $LUA_CPATH
|
|
extraLuaPackages = {
|
|
};
|
|
|
|
# see :help nixCats.flake.outputs.categoryDefinitions.default_values
|
|
# this will enable test.default and debug.default
|
|
# if any subcategory of test or debug is enabled
|
|
# WARNING: use of categories argument in this set will cause infinite recursion
|
|
# The categories argument of this function is the FINAL value.
|
|
# You may use it in any of the other sets.
|
|
extraCats = {
|
|
debug = [
|
|
["debug" "default"]
|
|
["telescope"]
|
|
];
|
|
lsp = [
|
|
["lsp" "default"]
|
|
["telescope"]
|
|
];
|
|
};
|
|
};
|
|
|
|
# packageDefinitions:
|
|
|
|
# Now build a package with specific categories from above
|
|
# All categories you wish to include must be marked true,
|
|
# but false may be omitted.
|
|
# This entire set is also passed to nixCats for querying within the lua.
|
|
# It is directly translated to a Lua table, and a get function is defined.
|
|
# The get function is to prevent errors when querying subcategories.
|
|
|
|
# see :help nixCats.flake.outputs.packageDefinitions
|
|
packageDefinitions = {
|
|
# the name here is the name of the package
|
|
# and also the default command name for it.
|
|
nvim = {
|
|
pkgs,
|
|
name,
|
|
...
|
|
} @ misc: {
|
|
# these also recieve our pkgs variable
|
|
# see :help nixCats.flake.outputs.packageDefinitions
|
|
settings = {
|
|
suffix-path = true;
|
|
suffix-LD = true;
|
|
# WARNING: MAKE SURE THESE DONT CONFLICT WITH OTHER INSTALLED PACKAGES ON YOUR PATH
|
|
# That would result in a failed build, as nixos and home manager modules validate for collisions on your path
|
|
aliases = [];
|
|
|
|
wrapRc = true;
|
|
configDirName = "nvim";
|
|
};
|
|
categories = {
|
|
always = true;
|
|
treesitter = true;
|
|
markdown = true;
|
|
lsp = true;
|
|
completion = true;
|
|
telescope = true;
|
|
tree = true;
|
|
debug = true;
|
|
lspDebugMode = false;
|
|
themer = true;
|
|
colorscheme = "gruvbox";
|
|
};
|
|
extra = {
|
|
};
|
|
};
|
|
nvim-minimal = {
|
|
pkgs,
|
|
name,
|
|
...
|
|
} @ misc: {
|
|
settings = {
|
|
suffix-path = true;
|
|
suffix-LD = true;
|
|
# WARNING: MAKE SURE THESE DONT CONFLICT WITH OTHER INSTALLED PACKAGES ON YOUR PATH
|
|
# That would result in a failed build, as nixos and home manager modules validate for collisions on your path
|
|
aliases = ["vim"];
|
|
wrapRc = true;
|
|
configDirName = "nvim-minimal";
|
|
};
|
|
categories = {
|
|
always = true;
|
|
treesitter = true;
|
|
completion = true;
|
|
telescope = true;
|
|
tree = true;
|
|
lspDebugMode = false;
|
|
themer = true;
|
|
colorscheme = "gruvbox";
|
|
};
|
|
extra = {
|
|
};
|
|
};
|
|
};
|
|
|
|
defaultPackageName = "nvim";
|
|
# defaultPackageName is also passed to utils.mkNixosModules and utils.mkHomeModules
|
|
# and it controls the name of the top level option set.
|
|
# If you made a package named `nixCats` your default package as we did here,
|
|
# the modules generated would be set at:
|
|
# config.nixCats = {
|
|
# enable = true;
|
|
# packageNames = [ "nixCats" ]; # <- the packages you want installed
|
|
# <see :h nixCats.module for options>
|
|
# }
|
|
# In addition, every package exports its own module via passthru, and is overrideable.
|
|
# so you can yourpackage.homeModule and then the namespace would be that packages name.
|
|
in
|
|
# see :help nixCats.flake.outputs.exports
|
|
forEachSystem (system: let
|
|
# and this will be our builder! it takes a name from our packageDefinitions as an argument, and builds an nvim.
|
|
nixCatsBuilder =
|
|
utils.baseBuilder luaPath {
|
|
# we pass in the things to make a pkgs variable to build nvim with later
|
|
inherit nixpkgs system dependencyOverlays extra_pkg_config;
|
|
# and also our categoryDefinitions and packageDefinitions
|
|
}
|
|
categoryDefinitions
|
|
packageDefinitions;
|
|
# call it with our defaultPackageName
|
|
defaultPackage = nixCatsBuilder defaultPackageName;
|
|
|
|
# this pkgs variable is just for using utils such as pkgs.mkShell
|
|
# within this outputs set.
|
|
pkgs = import nixpkgs {inherit system;};
|
|
# The one used to build neovim is resolved inside the builder
|
|
# and is passed to our categoryDefinitions and packageDefinitions
|
|
in {
|
|
# these outputs will be wrapped with ${system} by utils.eachSystem
|
|
|
|
# this will generate a set of all the packages
|
|
# in the packageDefinitions defined above
|
|
# from the package we give it.
|
|
# and additionally output the original as default.
|
|
packages = utils.mkAllWithDefault defaultPackage;
|
|
|
|
# choose your package for devShell
|
|
# and add whatever else you want in it.
|
|
devShells = {
|
|
default = pkgs.mkShell {
|
|
name = defaultPackageName;
|
|
packages = [defaultPackage];
|
|
inputsFrom = [];
|
|
shellHook = ''
|
|
'';
|
|
};
|
|
};
|
|
})
|
|
// (let
|
|
# we also export a nixos module to allow reconfiguration from configuration.nix
|
|
nixosModule = utils.mkNixosModules {
|
|
moduleNamespace = [defaultPackageName];
|
|
inherit
|
|
defaultPackageName
|
|
dependencyOverlays
|
|
luaPath
|
|
categoryDefinitions
|
|
packageDefinitions
|
|
extra_pkg_config
|
|
nixpkgs
|
|
;
|
|
};
|
|
# and the same for home manager
|
|
homeModule = utils.mkHomeModules {
|
|
moduleNamespace = [defaultPackageName];
|
|
inherit
|
|
defaultPackageName
|
|
dependencyOverlays
|
|
luaPath
|
|
categoryDefinitions
|
|
packageDefinitions
|
|
extra_pkg_config
|
|
nixpkgs
|
|
;
|
|
};
|
|
in {
|
|
# these outputs will be NOT wrapped with ${system}
|
|
|
|
# this will make an overlay out of each of the packageDefinitions defined above
|
|
# and set the default overlay to the one named here.
|
|
overlays =
|
|
utils.makeOverlays luaPath {
|
|
inherit nixpkgs dependencyOverlays extra_pkg_config;
|
|
}
|
|
categoryDefinitions
|
|
packageDefinitions
|
|
defaultPackageName;
|
|
|
|
nixosModules.default = nixosModule;
|
|
homeModules.default = homeModule;
|
|
|
|
inherit utils nixosModule homeModule;
|
|
inherit (utils) templates;
|
|
});
|
|
}
|