blob: e17455926dcc4114c1651311019a1fce0a90a580 [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 Greyf066b512022-10-31 00:02:48 +000015 suggest.floatConfig = {
16 border = true;
17 rounded = true;
18 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010019 "suggest.noselect" = false;
20 "cSpell.checkOnlyEnabledfileTypes" = false;
Skyler Grey55f84552022-09-05 11:04:39 +010021 "cSpell.dictionaryDefinitions" = [
22 {
23 name = "imperative";
24 path = "${home.home.homeDirectory}/.local/share/cspell/dictionary.txt";
25 }
26 ];
27 "cSpell.dictionaries" = ["imperative"];
28 "git.enableGutters" = false; # We're using another plugin to do this
Skyler Greyf066b512022-10-31 00:02:48 +000029 "rust-analyzer.server.path" = "${pkgs.rust-analyzer}/bin/rust-analyzer";
30 "omnisharp.path" = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
31 "markdownlint.config" = {
32 line-length = {
33 code_blocks = false;
34 tables = false;
35 };
36 };
Skyler Greya7feb6e2022-08-26 06:51:55 +010037 languageserver = {
38 nix = {
39 command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
40 filetypes = ["nix"];
41 };
42 };
43 };
44 };
45 plugins = with pkgs.vimPlugins; [
46 # Language servers
47 coc-tsserver
48 coc-eslint
49 coc-rust-analyzer
50 coc-json
51 coc-jest
52 coc-css
Skyler Grey37e3c112022-09-09 08:15:08 +010053 coc-go
Skyler Greyb8300e72022-09-04 23:06:24 +010054 coc-markdownlint
Skyler Grey34e57982022-10-30 23:00:58 +000055 coc-texlab
Skyler Greya7feb6e2022-08-26 06:51:55 +010056
57 # Spellchecker
Skyler Grey2f9904e2022-09-05 03:18:02 +010058 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-spell-checker
Skyler Greyf066b512022-10-31 00:02:48 +000059 nixpkgs-minion.legacyPackages.${system}.vimPlugins.coc-omnisharp
Skyler Greya7feb6e2022-08-26 06:51:55 +010060
61 # File explorer
62 coc-explorer
63 coc-git # TODO: Check if coc-git is still needed
64
65 # Snippet completion
Skyler Greyf066b512022-10-31 00:02:48 +000066 ultisnips
Skyler Greya7feb6e2022-08-26 06:51:55 +010067 vim-snippets
Skyler Greyf066b512022-10-31 00:02:48 +000068 coc-ultisnips
69
70 # General utils
71 coc-pairs
Skyler Greya7feb6e2022-08-26 06:51:55 +010072 ];
73 extraConfig = lib.pipe [./keybinds.vim ./theme.vim] [
74 (map builtins.readFile)
75 (builtins.concatStringsSep "\n")
76 ];
Skyler Greyf066b512022-10-31 00:02:48 +000077 extraPackages = with pkgs; [
78 nodejs
79 rustc
80 go
81 rust-analyzer
82 texlab
83 omnisharp-roslyn
84 ];
Skyler Greya7feb6e2022-08-26 06:51:55 +010085 };
Skyler Greyba17b652022-09-09 14:22:54 +010086 home.file = lib.pipe ./snippets [
87 builtins.readDir
88 builtins.attrNames
89 (map
90 (f: {
Skyler Greyf066b512022-10-31 00:02:48 +000091 name = ".config/nvim/UltiSnips/${f}";
Skyler Greyba17b652022-09-09 14:22:54 +010092 value = {
93 source = ./snippets + "/${f}";
Skyler Greyf066b512022-10-31 00:02:48 +000094 target = ".config/nvim/UltiSnips/${f}";
Skyler Greyba17b652022-09-09 14:22:54 +010095 };
96 }))
97 builtins.listToAttrs
98 lib.traceValSeq
Skyler Greyf066b512022-10-31 00:02:48 +000099 ] // {
100 ".config/coc/placeholder".text = "";
101 };
Skyler Greya7feb6e2022-08-26 06:51:55 +0100102}