1{ lib, config, pkgs, ... } @ inputs:
2
3with lib;
4let
5 inherit (import ../../lib/colors.nix inputs) colors mkVimHardlineColors;
6 inherit (import ./theme.nix inputs) my-theme;
7
8 cfg = config.modules.nvim;
9
10 initContents = "
11 \nlua <<EOF\n" + /* lua */ ''
12 nix_bins = {
13 terraformls = '${pkgs.terraform-ls}/bin/terraform-ls',
14 tsserver = '${pkgs.typescript-language-server}/bin/typescript-language-server',
15 eslintls = '${pkgs.vscode-eslint-language-server}/bin/vscode-eslint-language-server',
16 cssls = '${pkgs.vscode-css-language-server}/bin/vscode-css-language-server',
17 htmlls = '${pkgs.vscode-html-language-server}/bin/vscode-html-language-server',
18 jsonls = '${pkgs.vscode-json-language-server}/bin/vscode-json-language-server',
19 bunx = '${pkgs.bun}/bin/bunx',
20 ripgrep = '${pkgs.ripgrep}/bin/rg',
21 rustanalyzer = '${pkgs.rust-analyzer}/bin/rust-analyzer',
22 zls = '${pkgs.zls}/bin/zls',
23 zig = '${pkgs.zig}/bin/zig',
24 }
25
26 hardline_colors = ${mkVimHardlineColors colors}
27 '' + (builtins.readFile ./init.lua) + "\nEOF";
28
29 nvim-treesitter = (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [
30 p.astro p.typescript p.tsx p.git_rebase p.gitcommit p.gitignore
31 p.gitattributes p.graphql p.regex p.json p.json5 p.javascript
32 p.markdown p.markdown_inline p.terraform p.svelte p.prisma
33 p.yaml p.vue p.vim p.lua p.make p.jsdoc p.comment p.css
34 p.sql p.rust p.html p.bash p.c p.nix p.zig p.yuck p.go
35 ])).overrideAttrs (_: {
36 src = pkgs.nvim-plugins.nvim-treesitter;
37 });
38
39 neovimConfig = pkgs.neovimUtils.makeNeovimConfig {
40 withPython3 = true;
41 viAlias = true;
42 vimAlias = true;
43 customRC = initContents;
44 plugins = with pkgs.nvim-plugins; map (d: d.overrideAttrs { doCheck = false; }) [
45 my-theme
46 vim-repeat
47 hardline-nvim
48 gitsigns-nvim
49 nvim-lspconfig
50 lspkind-nvim
51 vim-golden-size
52 popup-nvim
53 trouble-nvim
54 dressing-nvim
55 oil-nvim
56
57 nvim-cmp
58 nvim-cmp-lsp
59 nvim-cmp-lsp-signature-help
60 nvim-cmp-treesitter
61
62 plenary-nvim
63 telescope-nvim
64 telescope-zf-native-nvim
65
66 nvim-treesitter
67 nvim-treesitter-refactor
68 nvim-treesitter-textobjects
69 ];
70 };
71
72 neovimPkg = pkgs.neovim-unwrapped;
73 neovim = pkgs.wrapNeovimUnstable neovimPkg neovimConfig;
74in {
75 options.modules.nvim = {
76 enable = mkOption {
77 default = true;
78 description = "Neovim";
79 type = types.bool;
80 };
81 useCustomConfig = mkOption {
82 default = cfg.enable;
83 description = "Custom Configuration";
84 type = types.bool;
85 };
86 };
87
88 config = mkIf cfg.enable {
89 environment.variables = { EDITOR = "vim"; };
90
91 environment.systemPackages = with pkgs; if cfg.useCustomConfig then [
92 ripgrep
93 fd
94 bat
95 neovim
96 ] else [
97 neovimPkg
98 ];
99 };
100}