generated from nix-community/kickstart-nix.nvim
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
neovim-overlay.nix
150 lines (122 loc) · 4.1 KB
/
neovim-overlay.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# This overlay, when applied to nixpkgs, adds the final neovim derivation to nixpkgs.
{ inputs }:
final: prev:
with final.pkgs.lib;
let
pkgs = final;
# Use this to create a plugin from a flake input
mkNvimPlugin =
src: pname:
pkgs.vimUtils.buildVimPlugin {
inherit pname src;
version = src.lastModifiedDate;
};
# Make sure we use the pinned nixpkgs instance for wrapNeovimUnstable,
# otherwise it could have an incompatible signature when applying this overlay.
pkgs-wrapNeovim = inputs.nixpkgs.legacyPackages.${pkgs.system};
# This is the helper function that builds the Neovim derivation.
mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; };
# A plugin can either be a package or an attrset, such as
# { plugin = <plugin>; # the package, e.g. pkgs.vimPlugins.nvim-cmp
# config = <config>; # String; a config that will be loaded with the plugin
# # Boolean; Whether to automatically load the plugin as a 'start' plugin,
# # or as an 'opt' plugin, that can be loaded with `:packadd!`
# optional = <true|false>; # Default: false
# ...
# }
all-plugins = with pkgs.vimPlugins; [
nvim-cmp # https://github.com/hrsh7th/nvim-cmp
luasnip # snippets | https://github.com/l3mon4d3/luasnip/
cmp_luasnip # snippets autocompletion extension for nvim-cmp | https://github.com/saadparwaiz1/cmp_luasnip/
lspkind-nvim # vscode-like LSP pictograms | https://github.com/onsails/lspkind.nvim
friendly-snippets
cmp-nvim-lsp # LSP as completion source | https://github.com/hrsh7th/cmp-nvim-lsp
cmp-nvim-lsp-signature-help # https://github.com/hrsh7th/cmp-nvim-lsp-signature-help
cmp-path # file paths as completion source | https://github.com/hrsh7th/cmp-path/
cmp-nvim-lua # neovim lua API as completion source | https://github.com/hrsh7th/cmp-nvim-lua/
copilot-lua
copilot-cmp
# git integration plugins
diffview-nvim # https://github.com/sindrets/diffview.nvim/
gitsigns-nvim # https://github.com/lewis6991/gitsigns.nvim/
vim-fugitive # https://github.com/tpope/vim-fugitive/
# telescope and extensions
telescope-nvim # https://github.com/nvim-telescope/telescope.nvim/
telescope-fzf-native-nvim # https://github.com/nvim-telescope/telescope-fzy-native.nvim
telescope-zoxide
telescope-ui-select-nvim
avante-nvim
dressing-nvim
render-markdown-nvim
# LSP and language tools
lsp-zero-nvim
nvim-lspconfig
fidget-nvim
neodev-nvim
conform-nvim
nvim-surround # https://github.com/kylechui/nvim-surround/
# Obsidian
obsidian-nvim
# UI
lualine-nvim # Status line | https://github.com/nvim-lualine/lualine.nvim/
undotree
trouble-nvim
todo-comments-nvim
noice-nvim
# Themes/colors
gruvbox-nvim
tokyonight-nvim
rose-pine
# libraries that other plugins depend on
plenary-nvim
nvim-notify
nui-nvim
nvim-web-devicons
vim-repeat
# ^ libraries that other plugins depend on
# bleeding-edge plugins from flake inputs
# (mkNvimPlugin inputs.wf-nvim "wf.nvim") # (example) keymap hints | https://github.com/Cassin01/wf.nvim
# ^ bleeding-edge plugins from flake inputs
which-key-nvim
];
extraPackages = with pkgs; [
beautysh
marksman
lua-language-server
stylua
nixd # nix lsp
nixfmt-rfc-style
typescript-language-server
biome
nodePackages.prettier
rust-analyzer
ruby-lsp
rufo
basedpyright
vue-language-server
];
in
{
# This is the neovim derivation
# returned by the overlay
nvim-pkg = mkNeovim {
plugins = all-plugins;
inherit extraPackages;
};
# This can be symlinked in the devShell's shellHook
nvim-luarc-json = final.mk-luarc-json { plugins = all-plugins; };
# You can add as many derivations as you like.
# Use `ignoreConfigRegexes` to filter out config
# files you would not like to include.
#
# For example:
#
# nvim-pkg-no-telescope = mkNeovim {
# plugins = [];
# ignoreConfigRegexes = [
# "^plugin/telescope.lua"
# "^ftplugin/.*.lua"
# ];
# inherit extraPackages;
# };
}