blob: c8f9ab28a3bd1cfd73693ce51fbd57ae7128b15c [file] [log] [blame]
Skyler Greya7feb6e2022-08-26 06:51:55 +01001{
2 pkgs,
Skyler Grey2f9904e2022-09-05 03:18:02 +01003 system,
Skyler Greya7feb6e2022-08-26 06:51:55 +01004 lib,
Skyler Grey2f9904e2022-09-05 03:18:02 +01005 nixpkgs-minion,
Skyler Grey55f84552022-09-05 11:04:39 +01006 home,
Skyler Greyba17b652022-09-09 14:22:54 +01007 utils,
Skyler Greyf066b512022-10-31 00:02:48 +00008 omnisharp-language-server,
Skyler Greya7feb6e2022-08-26 06:51:55 +01009 ...
10}: {
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 ];
42 "cSpell.dictionaries" = ["imperative"];
43 "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";
57 filetypes = ["nix"];
58 };
59 };
Skyler Grey3d1b4502022-10-31 00:11:11 +000060 "snippets.extends" = {
61 markdown = ["tex"];
62 };
63 "snippets.autoTrigger" = false;
Skyler Grey0c024ef2022-10-31 00:17:14 +000064 "codeLens.enable" = true;
Skyler Greya7feb6e2022-08-26 06:51:55 +010065 };
66 };
67 plugins = with pkgs.vimPlugins; [
68 # Language servers
69 coc-tsserver
70 coc-eslint
71 coc-rust-analyzer
72 coc-json
73 coc-jest
74 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +010075 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +010076 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +000077 coc-texlab
Skyler Grey3d1b4502022-10-31 00:11:11 +000078 coc-pyright
Skyler Grey0c024ef2022-10-31 00:17:14 +000079 coc-java
Skyler Greya7feb6e2022-08-26 06:51:55 +010080
81 # Spellchecker
Skyler Grey2f9904e2022-09-05 03:18:02 +010082 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +000083 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +010084
85 # File explorer
86 coc-explorer
87 coc-git # TODO: Check if coc-git is still needed
88
89 # Snippet completion
Skyler Greya7feb6e2022-08-26 06:51:55 +010090 vim-snippets
Skyler Grey81f4af62022-10-31 00:10:52 +000091 coc-snippets
Skyler Greya7feb6e2022-08-26 06:51:55 +010092 ];
93 extraConfig = lib.pipe [./keybinds.vim ./theme.vim] [
94 (map builtins.readFile)
95 (builtins.concatStringsSep "\n")
96 ];
Skyler Greyf066b512022-10-31 00:02:48 +000097 extraPackages = with pkgs; [
98 nodejs
99 rustc
100 go
101 rust-analyzer
102 texlab
103 omnisharp-roslyn
Skyler Grey0c024ef2022-10-31 00:17:14 +0000104 jdt-language-server
105 jdk
Skyler Grey3d1b4502022-10-31 00:11:11 +0000106 nodePackages.pyright
107 (python3.withPackages (pyPkgs:
108 with pyPkgs; [
109 pycodestyle
110 black
111 rope
112 ]))
Skyler Greyf066b512022-10-31 00:02:48 +0000113 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +0100114 };
Skyler Grey3d1b4502022-10-31 00:11:11 +0000115 home.file =
116 lib.pipe ./snippets [
117 builtins.readDir
118 builtins.attrNames
119 (map
120 (f: {
121 name = ".config/nvim/UltiSnips/${f}";
122 value = {
123 source = ./snippets + "/${f}";
124 target = ".config/nvim/UltiSnips/${f}";
125 };
126 }))
127 builtins.listToAttrs
128 lib.traceValSeq
129 ]
130 // {
131 ".config/coc/placeholder".text = "";
132 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100133}