1{
2 flake,
3 user,
4 host,
5 pkgs,
6 ...
7}:
8{
9 vim = {
10 extraPackages = with pkgs; [
11 python312Packages.pylatexenc
12 ];
13 languages = {
14 lua.lsp.enable = true;
15 lua.lsp.lazydev.enable = true;
16 python = {
17 format.type = [ "ruff" ];
18 };
19 markdown = {
20 enable = true;
21 extensions.render-markdown-nvim = {
22 enable = true;
23 };
24 };
25 nix = {
26 lsp.servers = [
27 "nil"
28 "nixd"
29 ];
30 };
31 };
32
33 formatter.conform-nvim = {
34 enable = true;
35 setupOpts = {
36 formatters_by_ft = {
37 fish = [ "fish_indent" ];
38 tex = [ "latexindent" ];
39 };
40 };
41 };
42 diagnostics = {
43 enable = true;
44 config = {
45 virtual_text = {
46 format = pkgs.lib.generators.mkLuaInline ''
47 function(diagnostic)
48 return string.format("%s (%s)", diagnostic.message, diagnostic.source)
49 end
50 '';
51 };
52 };
53 nvim-lint = {
54 enable = true;
55 linters_by_ft = {
56 nix = [ "statix" ];
57 tex = [ "chktex" ];
58 haskell = [ "hlint" ];
59 };
60
61 linters = {
62 chktex = {
63 ignore_exitcode = true;
64 };
65 };
66 };
67 };
68 treesitter = {
69 enable = true;
70 fold = true;
71 addDefaultGrammars = true;
72
73 grammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
74 markdown_inline
75 markdown
76 ];
77
78 highlight.enable = true;
79 indent.enable = false;
80 };
81
82 visuals = {
83 fidget-nvim = {
84 setupOpts = {
85 logger.level = "trace";
86 };
87 };
88 };
89
90 ui = {
91 nvim-ufo = {
92 enable = true;
93 };
94 };
95 autocomplete.blink-cmp = {
96 enable = true;
97 mappings = {
98 close = null;
99 complete = null;
100 confirm = null;
101 next = null;
102 previous = null;
103 scrollDocsDown = null;
104 scrollDocsUp = null;
105 };
106
107 setupOpts = {
108 keymap = {
109 preset = "super-tab";
110 };
111 completion = {
112 ghost_text.enabled = false;
113 list.selection.preselect = true;
114 trigger = {
115 show_in_snippet = true;
116 };
117 accept.auto_brackets.enabled = true;
118 };
119 signature = {
120 enabled = true;
121 };
122 };
123 };
124
125 lazy.plugins."blink.pairs" = {
126 enabled = true;
127 package = pkgs.vimPlugins.blink-pairs;
128 setupModule = "blink.pairs";
129 setupOpts = {
130 mappings = {
131 # -- you can call require("blink.pairs.mappings").enable() and require("blink.pairs.mappings").disable() to enable/disable mappings at runtime
132 enabled = true;
133 # -- see the defaults: https://github.com/Saghen/blink.pairs/blob/main/lua/blink/pairs/config/mappings.lua#L10
134 pairs = [ ];
135 };
136 highlights = {
137 enabled = true;
138 groups = [
139 "BlinkPairsOrange"
140 "BlinkPairsPurple"
141 "BlinkPairsBlue"
142 ];
143 matchparen = {
144 enabled = true;
145 group = "MatchParen";
146 };
147 };
148 debug = false;
149 };
150 };
151 };
152}