summaryrefslogtreecommitdiffstats
path: root/modules/plugins/languages/julia.nix
blob: 1bef7d3b4e0b1a8ff259c5d3eaf4b3080bdd3836 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
  lib,
  pkgs,
  config,
  ...
}: let
  inherit (lib.options) literalExpression mkEnableOption mkOption;
  inherit (lib.types) listOf enum;
  inherit (lib.modules) mkIf mkMerge;
  inherit (lib) genAttrs;
  inherit (lib.nvim.types) mkGrammarOption;

  cfg = config.vim.languages.julia;

  defaultServers = ["julia-languageserver"];
  servers = ["julia-languageserver"];
in {
  options = {
    vim.languages.julia = {
      enable = mkEnableOption "Julia language support";

      treesitter = {
        enable =
          mkEnableOption "Julia treesitter"
          // {
            default = config.vim.languages.enableTreesitter;
            defaultText = literalExpression "config.vim.languages.enableTreesitter";
          };
        package = mkGrammarOption pkgs "julia";
      };

      lsp = {
        enable =
          mkEnableOption "Julia LSP support"
          // {
            default = config.vim.lsp.enable;
            defaultText = literalExpression "config.vim.lsp.enable";
          };
        servers = mkOption {
          type = listOf (enum servers);
          default = defaultServers;
          description = ''
            Julia LSP Server to Use

            ::: {.note}
            The entirety of Julia is bundled with nvf, if you enable this
            option, since there is no way to provide only the LSP server.

            If you want to avoid that, you have to change
            {option}`vim.lsp.servers.julials.cmd` to use
            the Julia binary in {env}`PATH`, and add the `LanguageServer`
            package to Julia in your devshells.

            Check the source file of this option for the full `cmd`.
            :::
          '';
        };
      };
    };
  };

  config = mkIf cfg.enable (mkMerge [
    (mkIf cfg.treesitter.enable {
      vim.treesitter.enable = true;
      vim.treesitter.grammars = [cfg.treesitter.package];
    })

    (mkIf cfg.lsp.enable {
      vim = {
        lsp = {
          presets = genAttrs cfg.lsp.servers (_: {enable = true;});
          servers = genAttrs cfg.lsp.servers (_: {
            filetypes = ["julia"];
          });
        };
      };
    })
  ]);
}