blob: f50179e9e3a191b8e69c4fe28507af4ea41f4ecd [file] [log] [blame]
Skyler Grey252927a2022-10-18 22:18:15 +01001{ pkgs
2, system
3, lib
4, nixpkgs-minion
5, home
6, utils
7, omnisharp-language-server
8, ...
Skyler Greya7feb6e2022-08-26 06:51:55 +01009}: {
10 programs.neovim = {
11 coc = {
12 enable = true;
13 settings = {
Skyler Grey3d1b4502022-10-31 00:11:11 +000014 diagnostic.floatConfig = {
15 border = true;
16 rounded = true;
17 };
18 signature.floatConfig = {
19 border = true;
20 rounded = true;
21 };
22 hover.floatConfig = {
23 border = true;
24 rounded = true;
25 };
Skyler Greyf066b512022-10-31 00:02:48 +000026 suggest.floatConfig = {
27 border = true;
28 rounded = true;
29 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000030 "suggest.noselect" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010031 "cSpell.checkOnlyEnabledfileTypes" = false;
Skyler Grey81f4af62022-10-31 00:10:52 +000032 "diagnostic.virtualText" = true;
33 "diagnostic.virtualTextCurrentLineOnly" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000034 "suggest.virtualText" = true;
Skyler Grey55f84552022-09-05 11:04:39 +010035 "cSpell.dictionaryDefinitions" = [
36 {
37 name = "imperative";
38 path = "${home.home.homeDirectory}/.local/share/cspell/dictionary.txt";
39 }
40 ];
Skyler Grey252927a2022-10-18 22:18:15 +010041 "cSpell.dictionaries" = [ "imperative" ];
Skyler Grey55f84552022-09-05 11:04:39 +010042 "git.enableGutters" = false; # We're using another plugin to do this
Skyler Greyf066b512022-10-31 00:02:48 +000043 "rust-analyzer.server.path" = "${pkgs.rust-analyzer}/bin/rust-analyzer";
Skyler Greyb2e68e42023-02-26 13:02:34 +000044 "rust-analyzer.lens.enable" = false;
45 "rust-analyzer.lens.debug.enable" = false;
Skyler Greyf066b512022-10-31 00:02:48 +000046 "omnisharp.path" = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
47 "markdownlint.config" = {
48 line-length = {
49 code_blocks = false;
50 tables = false;
51 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000052 MD024.siblings_only = true;
Skyler Greye9e45852022-10-31 00:16:58 +000053 MD037 = false;
Skyler Greyf066b512022-10-31 00:02:48 +000054 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010055 languageserver = {
56 nix = {
57 command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
Skyler Grey252927a2022-10-18 22:18:15 +010058 filetypes = [ "nix" ];
Skyler Greya7feb6e2022-08-26 06:51:55 +010059 };
Skyler Grey1e098222022-11-05 10:12:12 +000060 haskell = {
61 command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper";
62 args = [ "--lsp" ];
63 rootPatterns = [
64 "*.cabal"
65 "stack.yaml"
66 "cabal.project"
67 "package.yaml"
68 "hie.yaml"
69 ];
70 filetypes = [ "haskell" "lhaskell" ];
71 settings = {
72 haskell = {
73 checkParents = "CheckOnSave";
74 checkProject = true;
75 maxCompletions = 40;
76 formattingProvider = "ormolu";
77 plugin = {
78 stan = { globalOn = true; };
79 };
80 };
81 };
82 };
Skyler Greyfab867f2023-01-25 21:45:01 +000083 ccls = {
84 command = "${pkgs.ccls}/bin/ccls";
85 filetypes = [ "c" "cc" "cpp" "c++" "objc" "objcpp" "C" ];
86 rootPatterns = [ ".ccls" "compile_commands.json" ".git/" ".vim/" ];
87 initializationOptions.cache.directory = "/tmp/ccls";
88 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010089 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000090 "snippets.extends" = {
Skyler Grey252927a2022-10-18 22:18:15 +010091 markdown = [ "tex" ];
Skyler Grey3d1b4502022-10-31 00:11:11 +000092 };
93 "snippets.autoTrigger" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000094 "codeLens.enable" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010095 };
96 };
97 plugins = with pkgs.vimPlugins; [
98 # Language servers
99 coc-tsserver
100 coc-eslint
101 coc-rust-analyzer
102 coc-json
103 coc-jest
104 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +0100105 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +0100106 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +0000107 coc-texlab
Skyler Grey3d1b4502022-10-31 00:11:11 +0000108 coc-pyright
Skyler Grey0c024ef2022-10-31 00:17:14 +0000109 coc-java
Skyler Greya7feb6e2022-08-26 06:51:55 +0100110
111 # Spellchecker
Skyler Greyb90fee52023-02-19 23:47:19 +0000112 coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +0000113 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +0100114
115 # File explorer
116 coc-explorer
117 coc-git # TODO: Check if coc-git is still needed
118
119 # Snippet completion
Skyler Greya7feb6e2022-08-26 06:51:55 +0100120 vim-snippets
Skyler Grey81f4af62022-10-31 00:10:52 +0000121 coc-snippets
Skyler Greya7feb6e2022-08-26 06:51:55 +0100122 ];
Skyler Grey252927a2022-10-18 22:18:15 +0100123 extraConfig = lib.pipe [ ./keybinds.vim ./theme.vim ] [
Skyler Greya7feb6e2022-08-26 06:51:55 +0100124 (map builtins.readFile)
125 (builtins.concatStringsSep "\n")
126 ];
Skyler Greyf066b512022-10-31 00:02:48 +0000127 extraPackages = with pkgs; [
128 nodejs
129 rustc
130 go
131 rust-analyzer
Skyler Grey1e098222022-11-05 10:12:12 +0000132 stylish-haskell
133 haskell-language-server
134 (haskellPackages.ghcWithPackages (pkgs: with pkgs; [
135 dbus
136 monad-logger
137 xmonad-contrib
138 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000139 texlab
140 omnisharp-roslyn
Skyler Grey0c024ef2022-10-31 00:17:14 +0000141 jdt-language-server
142 jdk
Skyler Grey3d1b4502022-10-31 00:11:11 +0000143 nodePackages.pyright
144 (python3.withPackages (pyPkgs:
145 with pyPkgs; [
146 pycodestyle
147 black
148 rope
149 ]))
Skyler Greyfab867f2023-01-25 21:45:01 +0000150 libclang
151 ccls
Skyler Greyf066b512022-10-31 00:02:48 +0000152 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +0100153 };
Skyler Grey3d1b4502022-10-31 00:11:11 +0000154 home.file =
155 lib.pipe ./snippets [
156 builtins.readDir
157 builtins.attrNames
158 (map
159 (f: {
160 name = ".config/nvim/UltiSnips/${f}";
161 value = {
162 source = ./snippets + "/${f}";
163 target = ".config/nvim/UltiSnips/${f}";
164 };
165 }))
166 builtins.listToAttrs
Skyler Greyd9c7e1e2023-02-26 12:50:27 +0000167 /* lib.traceValSeq */
Skyler Grey3d1b4502022-10-31 00:11:11 +0000168 ]
169 // {
170 ".config/coc/placeholder".text = "";
171 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100172}