viminal2/flake.nix

343 lines
10 KiB
Nix
Raw Normal View History

2024-10-09 17:13:16 -07:00
{
2024-10-11 13:13:54 -07:00
description = "A Neovim configuration for the stubborn Nixian hacker";
2024-10-09 17:13:16 -07:00
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
2024-10-27 17:18:02 -07:00
nixCats.url = "github:BirdeeHub/nixCats-nvim";
2024-10-09 17:13:16 -07:00
plugins-blink-ripgrep = {
url = "github:mikavilpas/blink-ripgrep.nvim";
2024-11-27 22:31:36 -08:00
flake = false;
};
2024-12-29 16:29:02 -08:00
plugins-pomo-nvim = {
url = "github:epwalsh/pomo.nvim";
flake = false;
};
2024-10-09 17:13:16 -07:00
};
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
2024-10-10 01:14:12 -07:00
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.
];
2024-10-09 17:13:16 -07:00
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:
{
2024-10-10 01:14:12 -07:00
# 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
2024-10-09 17:13:16 -07:00
lspsAndRuntimeDeps = {
general = with pkgs; [
2024-10-10 00:21:39 -07:00
# essential
2024-10-09 17:13:16 -07:00
ripgrep
python312Packages.pylatexenc
2024-10-10 00:21:39 -07:00
fd
2025-01-18 13:52:24 -08:00
# 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
2025-01-18 13:52:24 -08:00
nixfmt-rfc-style # recommended nix formatter
2024-10-10 00:49:25 -07:00
nodePackages_latest.prettier
2025-01-18 13:52:24 -08:00
taplo # for TOML
typstyle # for Typst
2024-10-10 00:49:25 -07:00
rustfmt
2025-01-18 13:52:24 -08:00
black # python
2024-10-10 00:49:25 -07:00
stylua
2024-12-29 16:29:02 -08:00
2025-01-18 13:52:24 -08:00
libnotify # required for pomo.nvim
neovim-node-client # required for tailwind-tools-nvim's node component
nodejs # ^^^
2024-10-09 17:13:16 -07:00
];
};
2024-10-10 00:21:39 -07:00
# install lz.n and treesitter grammars
2024-10-09 17:13:16 -07:00
startupPlugins = {
2025-01-18 13:52:24 -08:00
# gitPlugins = with pkgs.neovimPlugins; [ ];
2024-10-09 17:13:16 -07:00
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
2024-10-10 00:21:39 -07:00
markdown_inline
2024-10-09 17:13:16 -07:00
svelte
css
html
vim
bash
make
2024-10-10 00:49:25 -07:00
gitcommit
2024-10-29 20:08:26 -07:00
jsonc
meson
2024-12-28 12:10:42 -08:00
nu
2024-12-28 19:35:22 -08:00
tsx
2024-10-09 17:13:16 -07:00
])
))
# for some reason trigger_load still fails to load this in the
# proper order
2025-01-18 13:52:24 -08:00
telescope-ui-select-nvim # replace default vim.ui.select with telescope
telescope-fzf-native-nvim
2024-10-09 17:13:16 -07:00
];
};
2024-10-10 00:21:39 -07:00
# plugins which are installed, but not loaded, and will be handled by
# lz.n (not necessarily lazy loaded)
2024-10-09 17:13:16 -07:00
optionalPlugins = {
gitPlugins = with pkgs.neovimPlugins; [
2025-01-18 13:52:24 -08:00
blink-ripgrep # when you hit <C-g>, blink.cmp will rg through the whole project and use it for completions
pomo-nvim # pomodoro timers
2024-10-09 17:13:16 -07:00
];
general = with pkgs.vimPlugins; [
2025-01-18 13:52:24 -08:00
# tools - stuff that adds entirely new functionality
2024-10-10 00:21:39 -07:00
telescope-nvim
neogit
2025-01-18 13:52:24 -08:00
toggleterm-nvim
2024-10-10 00:49:25 -07:00
undotree
2025-01-18 13:52:24 -08:00
harpoon2
mini-files
2025-01-18 13:52:24 -08:00
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
2025-01-18 14:12:55 -08:00
dropbar-nvim # ide-like breadcrumbs
2025-01-18 13:52:24 -08:00
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
2024-12-29 15:24:46 -08:00
# colorschemes
rose-pine
oxocarbon-nvim
2025-01-18 13:52:24 -08:00
# 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
2024-10-09 17:13:16 -07:00
];
};
# 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;
2024-10-10 00:21:39 -07:00
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";
2024-10-09 17:13:16 -07:00
};
2024-10-12 17:41:56 -07:00
nixdExtras = {
nixpkgs = inputs.nixpkgs.outPath;
flake-path = inputs.self.outPath;
system = pkgs.system;
};
2024-10-09 17:13:16 -07:00
};
};
};
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;
2024-12-28 23:28:46 -08:00
packages =
# [ defaultPackage ] ++
(
with pkgs;
[
lua-language-server
nixfmt-rfc-style
stylua
]
);
2024-10-09 17:13:16 -07:00
};
};
2024-12-28 23:28:46 -08:00
formatter = pkgs.treefmt;
2024-10-09 17:13:16 -07:00
}
)
// {
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;
};
}