341 lines
10 KiB
Nix
341 lines
10 KiB
Nix
{
|
|
description = "A Neovim configuration for the stubborn Nixian hacker";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
|
nixCats.url = "github:BirdeeHub/nixCats-nvim";
|
|
|
|
plugins-blink-ripgrep = {
|
|
url = "github:mikavilpas/blink-ripgrep.nvim";
|
|
flake = false;
|
|
};
|
|
|
|
plugins-pomo-nvim = {
|
|
url = "github:epwalsh/pomo.nvim";
|
|
flake = false;
|
|
};
|
|
};
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
nixCats,
|
|
...
|
|
}@inputs:
|
|
let
|
|
inherit (nixCats) utils;
|
|
luaPath = "${./.}";
|
|
forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all;
|
|
extra_pkg_config = {
|
|
# allowUnfree = true;
|
|
};
|
|
inherit
|
|
(forEachSystem (
|
|
system:
|
|
let
|
|
dependencyOverlays = (import ./nix/overlays.nix) ++ [
|
|
# 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 flake overlays here.
|
|
];
|
|
in
|
|
# these overlays will be wrapped with ${system}
|
|
# and we will call the same utils.eachSystem function
|
|
# later on to access them.
|
|
{
|
|
inherit dependencyOverlays;
|
|
}
|
|
))
|
|
dependencyOverlays
|
|
;
|
|
# see :help nixCats.flake.outputs.categories
|
|
# and
|
|
# :help nixCats.flake.outputs.categoryDefinitions.scheme
|
|
categoryDefinitions =
|
|
{
|
|
pkgs,
|
|
settings,
|
|
categories,
|
|
name,
|
|
...
|
|
}@packageDef:
|
|
{
|
|
# 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 = {
|
|
general = with pkgs; [
|
|
# essential
|
|
ripgrep
|
|
python312Packages.pylatexenc
|
|
fd
|
|
|
|
# lsps (minimal because should be provided per-project by nix, but the essentials are included).
|
|
# The idea is that documents (Typst or markdown) and configuration files (TOML, JSON, Nix, etc) are bundled.
|
|
# Everything else is provided per-project.
|
|
|
|
nixd # nix language server
|
|
tinymist # Typst
|
|
marksman # markdown
|
|
|
|
# formatters
|
|
nixfmt-rfc-style # recommended nix formatter
|
|
nodePackages_latest.prettier
|
|
taplo # for TOML
|
|
typstyle # for Typst
|
|
rustfmt
|
|
black # python
|
|
stylua
|
|
|
|
libnotify # required for pomo.nvim
|
|
neovim-node-client # required for tailwind-tools-nvim's node component
|
|
nodejs # ^^^
|
|
];
|
|
};
|
|
|
|
# install lz.n and treesitter grammars
|
|
startupPlugins = {
|
|
# gitPlugins = with pkgs.neovimPlugins; [ ];
|
|
general = with pkgs.vimPlugins; [
|
|
lz-n
|
|
(nvim-treesitter.withPlugins (
|
|
p:
|
|
(with p; [
|
|
lua
|
|
c
|
|
javascript
|
|
typescript
|
|
rust
|
|
haskell
|
|
typst
|
|
latex
|
|
nix
|
|
json
|
|
toml
|
|
yaml
|
|
markdown
|
|
markdown_inline
|
|
svelte
|
|
css
|
|
html
|
|
vim
|
|
bash
|
|
make
|
|
gitcommit
|
|
jsonc
|
|
meson
|
|
nu
|
|
tsx
|
|
])
|
|
))
|
|
# for some reason trigger_load still fails to load this in the
|
|
# proper order
|
|
telescope-ui-select-nvim # replace default vim.ui.select with telescope
|
|
telescope-fzf-native-nvim
|
|
];
|
|
};
|
|
|
|
# plugins which are installed, but not loaded, and will be handled by
|
|
# lz.n (not necessarily lazy loaded)
|
|
optionalPlugins = {
|
|
gitPlugins = with pkgs.neovimPlugins; [
|
|
blink-ripgrep # when you hit <C-g>, blink.cmp will rg through the whole project and use it for completions
|
|
pomo-nvim # pomodoro timers
|
|
];
|
|
general = with pkgs.vimPlugins; [
|
|
|
|
# tools - stuff that adds entirely new functionality
|
|
telescope-nvim
|
|
neogit
|
|
toggleterm-nvim
|
|
undotree
|
|
harpoon2
|
|
oil-nvim
|
|
|
|
# QoL - augments existing features to be a little nicer or adds some minor enhancements
|
|
fidget-nvim # the best notifications. unintrusive. also does LSP progress.
|
|
gitsigns-nvim # shows git changed areas in the sidebar
|
|
barbecue-nvim # ide-like breadcrumbs
|
|
mini-ai # adds additional 'a' and 'i' patterns (nothing to do with AI)
|
|
mini-hipatterns # highlight surrounding patterns
|
|
mini-surround # essential. adds 'sa', 'sr', 'sd', etc for surrounding
|
|
vim-sleuth # identifies the indent style in the current file
|
|
mini-bufremove # better buffer removal
|
|
which-key-nvim # hints for keybinds
|
|
nvim-autopairs # automatically pair (), {}, '''', etc
|
|
|
|
# lsp / formatting
|
|
trouble-nvim # shows diagnostics in a menu
|
|
lsp_lines-nvim # shows LSP diagnostics in virtual text under the line
|
|
nvim-lspconfig # configures language servers with sane defaults
|
|
conform-nvim # polyglot formatting swiss army knife
|
|
|
|
# bar
|
|
lualine-nvim
|
|
lsp-progress-nvim # adds LSP progress and attached LSPs to the bar
|
|
|
|
# eye candy
|
|
render-markdown-nvim # renders markdown. works in markdown files and also hover documentation.
|
|
nvim-web-devicons # helps plugins display nerd font icons.
|
|
indent-blankline-nvim # show indent guides
|
|
mini-starter # dashboard
|
|
|
|
# completion
|
|
blink-compat # allow nvim-cmp sources to be used with blink
|
|
blink-cmp # the fastest completions
|
|
|
|
# productivity
|
|
obsidian-nvim # obsidian zettelkasten workflows in nvim
|
|
|
|
# misc
|
|
plenary-nvim # utility functions in lua
|
|
vim-wakatime # coding time tracking
|
|
neocord # discord RPC
|
|
|
|
# colorschemes
|
|
rose-pine
|
|
oxocarbon-nvim
|
|
|
|
# fun
|
|
cellular-automaton-nvim # a surprise!
|
|
|
|
# -- language specific --
|
|
|
|
# lua
|
|
lazydev-nvim # lazy loaded lua_ls when developing neovim plugins and configuration
|
|
|
|
# TeX
|
|
texpresso-vim # super fast live TeX preview
|
|
|
|
# rust
|
|
crates-nvim # provides intelligent features for Crates.toml
|
|
rustaceanvim # better rust_analyzer experience
|
|
|
|
# TS/JS
|
|
typescript-tools-nvim # better typescript-language-server experience
|
|
tailwind-tools-nvim # tailwindcss enhanacements and completions
|
|
|
|
# cpp
|
|
clangd_extensions-nvim
|
|
|
|
# markdown
|
|
markdown-preview-nvim # view markdown files rendered in a live updating browser window
|
|
|
|
# typst
|
|
typst-preview-nvim # view typst documents rendered in a live updating browser window
|
|
|
|
# haskell
|
|
haskell-tools-nvim
|
|
];
|
|
};
|
|
|
|
# shared libraries to be added to LD_LIBRARY_PATH
|
|
# variable available to nvim runtime
|
|
sharedLibraries = {
|
|
general = with pkgs; [
|
|
# libgit2
|
|
];
|
|
};
|
|
};
|
|
packageDefinitions = {
|
|
nvim =
|
|
{ pkgs, ... }:
|
|
{
|
|
settings = {
|
|
wrapRc = true;
|
|
aliases = [
|
|
"vim"
|
|
"vi"
|
|
];
|
|
};
|
|
categories = {
|
|
general = true;
|
|
gitPlugins = true;
|
|
customPlugins = true;
|
|
bin = {
|
|
websocat = "${pkgs.websocat}/bin/websocat";
|
|
tinymist = "${pkgs.tinymist}/bin/tinymist";
|
|
texpresso = "${pkgs.texpresso}/bin/texpresso";
|
|
neovim-node-host = "${pkgs.neovim-node-client}/bin/neovim-node-host";
|
|
};
|
|
nixdExtras = {
|
|
nixpkgs = inputs.nixpkgs.outPath;
|
|
flake-path = inputs.self.outPath;
|
|
system = pkgs.system;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
defaultPackageName = "nvim";
|
|
in
|
|
forEachSystem (
|
|
system:
|
|
let
|
|
nixCatsBuilder = utils.baseBuilder luaPath {
|
|
inherit
|
|
nixpkgs
|
|
system
|
|
dependencyOverlays
|
|
extra_pkg_config
|
|
;
|
|
} categoryDefinitions packageDefinitions;
|
|
defaultPackage = nixCatsBuilder defaultPackageName;
|
|
pkgs = import nixpkgs { inherit system; };
|
|
in
|
|
{
|
|
packages = utils.mkAllWithDefault defaultPackage;
|
|
|
|
devShells = {
|
|
default = pkgs.mkShell {
|
|
name = defaultPackageName;
|
|
packages =
|
|
# [ defaultPackage ] ++
|
|
(
|
|
with pkgs;
|
|
[
|
|
lua-language-server
|
|
nixfmt-rfc-style
|
|
stylua
|
|
]
|
|
);
|
|
};
|
|
};
|
|
|
|
formatter = pkgs.treefmt;
|
|
}
|
|
)
|
|
// {
|
|
overlays = utils.makeOverlays luaPath {
|
|
inherit nixpkgs dependencyOverlays extra_pkg_config;
|
|
} categoryDefinitions packageDefinitions defaultPackageName;
|
|
|
|
nixosModules.default = utils.mkNixosModules {
|
|
inherit
|
|
defaultPackageName
|
|
dependencyOverlays
|
|
luaPath
|
|
categoryDefinitions
|
|
packageDefinitions
|
|
extra_pkg_config
|
|
nixpkgs
|
|
;
|
|
};
|
|
homeModule = utils.mkHomeModules {
|
|
inherit
|
|
defaultPackageName
|
|
dependencyOverlays
|
|
luaPath
|
|
categoryDefinitions
|
|
packageDefinitions
|
|
extra_pkg_config
|
|
nixpkgs
|
|
;
|
|
};
|
|
inherit utils;
|
|
inherit (utils) templates;
|
|
};
|
|
|
|
}
|