blob: 40f8895e0bbd31700f8e3af33f3a2574bd215ed8 [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 };
58 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000059 "snippets.extends" = {
Skyler Grey252927a2022-10-18 22:18:15 +010060 markdown = [ "tex" ];
Skyler Grey3d1b4502022-10-31 00:11:11 +000061 };
62 "snippets.autoTrigger" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000063 "codeLens.enable" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010064 };
65 };
66 plugins = with pkgs.vimPlugins; [
67 # Language servers
68 coc-tsserver
69 coc-eslint
70 coc-rust-analyzer
71 coc-json
72 coc-jest
73 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +010074 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +010075 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +000076 coc-texlab
Skyler Grey3d1b4502022-10-31 00:11:11 +000077 coc-pyright
Skyler Grey0c024ef2022-10-31 00:17:14 +000078 coc-java
Skyler Greya7feb6e2022-08-26 06:51:55 +010079
80 # Spellchecker
Skyler Grey2f9904e2022-09-05 03:18:02 +010081 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +000082 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +010083
84 # File explorer
85 coc-explorer
86 coc-git # TODO: Check if coc-git is still needed
87
88 # Snippet completion
Skyler Greya7feb6e2022-08-26 06:51:55 +010089 vim-snippets
Skyler Grey81f4af62022-10-31 00:10:52 +000090 coc-snippets
Skyler Greya7feb6e2022-08-26 06:51:55 +010091 ];
Skyler Grey252927a2022-10-18 22:18:15 +010092 extraConfig = lib.pipe [ ./keybinds.vim ./theme.vim ] [
Skyler Greya7feb6e2022-08-26 06:51:55 +010093 (map builtins.readFile)
94 (builtins.concatStringsSep "\n")
95 ];
Skyler Greyf066b512022-10-31 00:02:48 +000096 extraPackages = with pkgs; [
97 nodejs
98 rustc
99 go
100 rust-analyzer
101 texlab
102 omnisharp-roslyn
Skyler Grey0c024ef2022-10-31 00:17:14 +0000103 jdt-language-server
104 jdk
Skyler Grey3d1b4502022-10-31 00:11:11 +0000105 nodePackages.pyright
106 (python3.withPackages (pyPkgs:
107 with pyPkgs; [
108 pycodestyle
109 black
110 rope
111 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000112 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +0100113 };
Skyler Grey3d1b4502022-10-31 00:11:11 +0000114 home.file =
115 lib.pipe ./snippets [
116 builtins.readDir
117 builtins.attrNames
118 (map
119 (f: {
120 name = ".config/nvim/UltiSnips/${f}";
121 value = {
122 source = ./snippets + "/${f}";
123 target = ".config/nvim/UltiSnips/${f}";
124 };
125 }))
126 builtins.listToAttrs
127 lib.traceValSeq
128 ]
129 // {
130 ".config/coc/placeholder".text = "";
131 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100132}