blob: 72ef4d0a02cd3ff1dabb47d56825d87e957510b3 [file] [log] [blame]
Skyler Grey252927a2022-10-18 22:18:15 +01001{ pkgs
2, system
3, lib
4, nixpkgs-minion
Skyler Greyfab867f2023-01-25 21:45:01 +00005, nixpkgs-coc-spellchecker
Skyler Grey252927a2022-10-18 22:18:15 +01006, home
7, utils
8, omnisharp-language-server
9, ...
Skyler Greya7feb6e2022-08-26 06:51:55 +010010}: {
11 programs.neovim = {
12 coc = {
13 enable = true;
14 settings = {
Skyler Grey3d1b4502022-10-31 00:11:11 +000015 diagnostic.floatConfig = {
16 border = true;
17 rounded = true;
18 };
19 signature.floatConfig = {
20 border = true;
21 rounded = true;
22 };
23 hover.floatConfig = {
24 border = true;
25 rounded = true;
26 };
Skyler Greyf066b512022-10-31 00:02:48 +000027 suggest.floatConfig = {
28 border = true;
29 rounded = true;
30 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000031 "suggest.noselect" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010032 "cSpell.checkOnlyEnabledfileTypes" = false;
Skyler Grey81f4af62022-10-31 00:10:52 +000033 "diagnostic.virtualText" = true;
34 "diagnostic.virtualTextCurrentLineOnly" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000035 "suggest.virtualText" = true;
Skyler Grey55f84552022-09-05 11:04:39 +010036 "cSpell.dictionaryDefinitions" = [
37 {
38 name = "imperative";
39 path = "${home.home.homeDirectory}/.local/share/cspell/dictionary.txt";
40 }
41 ];
Skyler Grey252927a2022-10-18 22:18:15 +010042 "cSpell.dictionaries" = [ "imperative" ];
Skyler Grey55f84552022-09-05 11:04:39 +010043 "git.enableGutters" = false; # We're using another plugin to do this
Skyler Greyf066b512022-10-31 00:02:48 +000044 "rust-analyzer.server.path" = "${pkgs.rust-analyzer}/bin/rust-analyzer";
45 "omnisharp.path" = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
46 "markdownlint.config" = {
47 line-length = {
48 code_blocks = false;
49 tables = false;
50 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000051 MD024.siblings_only = true;
Skyler Greye9e45852022-10-31 00:16:58 +000052 MD037 = false;
Skyler Greyf066b512022-10-31 00:02:48 +000053 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010054 languageserver = {
55 nix = {
56 command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
Skyler Grey252927a2022-10-18 22:18:15 +010057 filetypes = [ "nix" ];
Skyler Greya7feb6e2022-08-26 06:51:55 +010058 };
Skyler Grey1e098222022-11-05 10:12:12 +000059 haskell = {
60 command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper";
61 args = [ "--lsp" ];
62 rootPatterns = [
63 "*.cabal"
64 "stack.yaml"
65 "cabal.project"
66 "package.yaml"
67 "hie.yaml"
68 ];
69 filetypes = [ "haskell" "lhaskell" ];
70 settings = {
71 haskell = {
72 checkParents = "CheckOnSave";
73 checkProject = true;
74 maxCompletions = 40;
75 formattingProvider = "ormolu";
76 plugin = {
77 stan = { globalOn = true; };
78 };
79 };
80 };
81 };
Skyler Greyfab867f2023-01-25 21:45:01 +000082 ccls = {
83 command = "${pkgs.ccls}/bin/ccls";
84 filetypes = [ "c" "cc" "cpp" "c++" "objc" "objcpp" "C" ];
85 rootPatterns = [ ".ccls" "compile_commands.json" ".git/" ".vim/" ];
86 initializationOptions.cache.directory = "/tmp/ccls";
87 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010088 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000089 "snippets.extends" = {
Skyler Grey252927a2022-10-18 22:18:15 +010090 markdown = [ "tex" ];
Skyler Grey3d1b4502022-10-31 00:11:11 +000091 };
92 "snippets.autoTrigger" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000093 "codeLens.enable" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010094 };
95 };
96 plugins = with pkgs.vimPlugins; [
97 # Language servers
98 coc-tsserver
99 coc-eslint
100 coc-rust-analyzer
101 coc-json
102 coc-jest
103 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +0100104 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +0100105 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +0000106 coc-texlab
Skyler Grey3d1b4502022-10-31 00:11:11 +0000107 coc-pyright
Skyler Grey0c024ef2022-10-31 00:17:14 +0000108 coc-java
Skyler Greya7feb6e2022-08-26 06:51:55 +0100109
110 # Spellchecker
Skyler Greyfab867f2023-01-25 21:45:01 +0000111 nixpkgs-coc-spellchecker.legacyPackages.${system}.vimPlugins.coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +0000112 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +0100113
114 # File explorer
115 coc-explorer
116 coc-git # TODO: Check if coc-git is still needed
117
118 # Snippet completion
Skyler Greya7feb6e2022-08-26 06:51:55 +0100119 vim-snippets
Skyler Grey81f4af62022-10-31 00:10:52 +0000120 coc-snippets
Skyler Greya7feb6e2022-08-26 06:51:55 +0100121 ];
Skyler Grey252927a2022-10-18 22:18:15 +0100122 extraConfig = lib.pipe [ ./keybinds.vim ./theme.vim ] [
Skyler Greya7feb6e2022-08-26 06:51:55 +0100123 (map builtins.readFile)
124 (builtins.concatStringsSep "\n")
125 ];
Skyler Greyf066b512022-10-31 00:02:48 +0000126 extraPackages = with pkgs; [
127 nodejs
128 rustc
129 go
130 rust-analyzer
Skyler Grey1e098222022-11-05 10:12:12 +0000131 stylish-haskell
132 haskell-language-server
133 (haskellPackages.ghcWithPackages (pkgs: with pkgs; [
134 dbus
135 monad-logger
136 xmonad-contrib
137 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000138 texlab
139 omnisharp-roslyn
Skyler Grey0c024ef2022-10-31 00:17:14 +0000140 jdt-language-server
141 jdk
Skyler Grey3d1b4502022-10-31 00:11:11 +0000142 nodePackages.pyright
143 (python3.withPackages (pyPkgs:
144 with pyPkgs; [
145 pycodestyle
146 black
147 rope
148 ]))
Skyler Greyfab867f2023-01-25 21:45:01 +0000149 libclang
150 ccls
Skyler Greyf066b512022-10-31 00:02:48 +0000151 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +0100152 };
Skyler Grey3d1b4502022-10-31 00:11:11 +0000153 home.file =
154 lib.pipe ./snippets [
155 builtins.readDir
156 builtins.attrNames
157 (map
158 (f: {
159 name = ".config/nvim/UltiSnips/${f}";
160 value = {
161 source = ./snippets + "/${f}";
162 target = ".config/nvim/UltiSnips/${f}";
163 };
164 }))
165 builtins.listToAttrs
166 lib.traceValSeq
167 ]
168 // {
169 ".config/coc/placeholder".text = "";
170 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100171}