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