blob: 5dcf7856d99c20079819d0fde03a2379c9266422 [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";
44 "omnisharp.path" = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
45 "markdownlint.config" = {
46 line-length = {
47 code_blocks = false;
48 tables = false;
49 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000050 MD024.siblings_only = true;
Skyler Greye9e45852022-10-31 00:16:58 +000051 MD037 = false;
Skyler Greyf066b512022-10-31 00:02:48 +000052 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010053 languageserver = {
54 nix = {
55 command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
Skyler Grey252927a2022-10-18 22:18:15 +010056 filetypes = [ "nix" ];
Skyler Greya7feb6e2022-08-26 06:51:55 +010057 };
Skyler Grey1e098222022-11-05 10:12:12 +000058 haskell = {
59 command = "${pkgs.haskell-language-server}/bin/haskell-language-server-wrapper";
60 args = [ "--lsp" ];
61 rootPatterns = [
62 "*.cabal"
63 "stack.yaml"
64 "cabal.project"
65 "package.yaml"
66 "hie.yaml"
67 ];
68 filetypes = [ "haskell" "lhaskell" ];
69 settings = {
70 haskell = {
71 checkParents = "CheckOnSave";
72 checkProject = true;
73 maxCompletions = 40;
74 formattingProvider = "ormolu";
75 plugin = {
76 stan = { globalOn = true; };
77 };
78 };
79 };
80 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010081 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000082 "snippets.extends" = {
Skyler Grey252927a2022-10-18 22:18:15 +010083 markdown = [ "tex" ];
Skyler Grey3d1b4502022-10-31 00:11:11 +000084 };
85 "snippets.autoTrigger" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000086 "codeLens.enable" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010087 };
88 };
89 plugins = with pkgs.vimPlugins; [
90 # Language servers
91 coc-tsserver
92 coc-eslint
93 coc-rust-analyzer
94 coc-json
95 coc-jest
96 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +010097 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +010098 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +000099 coc-texlab
Skyler Grey3d1b4502022-10-31 00:11:11 +0000100 coc-pyright
Skyler Grey0c024ef2022-10-31 00:17:14 +0000101 coc-java
Skyler Greya7feb6e2022-08-26 06:51:55 +0100102
103 # Spellchecker
Skyler Grey2f9904e2022-09-05 03:18:02 +0100104 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +0000105 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +0100106
107 # File explorer
108 coc-explorer
109 coc-git # TODO: Check if coc-git is still needed
110
111 # Snippet completion
Skyler Greya7feb6e2022-08-26 06:51:55 +0100112 vim-snippets
Skyler Grey81f4af62022-10-31 00:10:52 +0000113 coc-snippets
Skyler Greya7feb6e2022-08-26 06:51:55 +0100114 ];
Skyler Grey252927a2022-10-18 22:18:15 +0100115 extraConfig = lib.pipe [ ./keybinds.vim ./theme.vim ] [
Skyler Greya7feb6e2022-08-26 06:51:55 +0100116 (map builtins.readFile)
117 (builtins.concatStringsSep "\n")
118 ];
Skyler Greyf066b512022-10-31 00:02:48 +0000119 extraPackages = with pkgs; [
120 nodejs
121 rustc
122 go
123 rust-analyzer
Skyler Grey1e098222022-11-05 10:12:12 +0000124 stylish-haskell
125 haskell-language-server
126 (haskellPackages.ghcWithPackages (pkgs: with pkgs; [
127 dbus
128 monad-logger
129 xmonad-contrib
130 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000131 texlab
132 omnisharp-roslyn
Skyler Grey0c024ef2022-10-31 00:17:14 +0000133 jdt-language-server
134 jdk
Skyler Grey3d1b4502022-10-31 00:11:11 +0000135 nodePackages.pyright
136 (python3.withPackages (pyPkgs:
137 with pyPkgs; [
138 pycodestyle
139 black
140 rope
141 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000142 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +0100143 };
Skyler Grey3d1b4502022-10-31 00:11:11 +0000144 home.file =
145 lib.pipe ./snippets [
146 builtins.readDir
147 builtins.attrNames
148 (map
149 (f: {
150 name = ".config/nvim/UltiSnips/${f}";
151 value = {
152 source = ./snippets + "/${f}";
153 target = ".config/nvim/UltiSnips/${f}";
154 };
155 }))
156 builtins.listToAttrs
157 lib.traceValSeq
158 ]
159 // {
160 ".config/coc/placeholder".text = "";
161 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100162}