File tree Expand file tree Collapse file tree 2 files changed +59
-11
lines changed Expand file tree Collapse file tree 2 files changed +59
-11
lines changed Original file line number Diff line number Diff line change 2
2
lib ,
3
3
config ,
4
4
options ,
5
+ pkgs ,
5
6
...
6
7
} :
7
8
let
8
9
inherit ( lib ) types ;
9
10
inherit ( lib . nixvim ) toLuaObject ;
10
11
11
12
cfg = config . lsp ;
13
+
14
+ mkServerSubmodule =
15
+ {
16
+ name ? null ,
17
+ package ? null ,
18
+ } :
19
+ types . submodule [
20
+ ./server.nix
21
+ {
22
+ options . package =
23
+ let
24
+ extraDescription = ''
25
+
26
+
27
+ Alternatively, the language server should be available on your `$PATH`.
28
+ '' ;
29
+ in
30
+ if package == null then
31
+ lib . mkOption {
32
+ type = types . nullOr types . package ;
33
+ default = null ;
34
+ description = ''
35
+ Package to use for this language server.
36
+ ${ extraDescription }
37
+ '' ;
38
+ }
39
+ else if lib . isOption package then
40
+ package
41
+ else
42
+ lib . mkPackageOption pkgs name {
43
+ nullable = true ;
44
+ default = package ;
45
+ inherit extraDescription ;
46
+ } ;
47
+ }
48
+ ] ;
49
+
50
+ mkServerOption =
51
+ name :
52
+ {
53
+ package ? null ,
54
+ description ? "The ${ name } language server." ,
55
+ } :
56
+ lib . mkOption {
57
+ type = mkServerSubmodule { inherit name package ; } ;
58
+ inherit description ;
59
+ default = { } ;
60
+ } ;
61
+
62
+ # TODO: generate package defaults from lsp-packages.nix
63
+ serverSpecs = {
64
+ nixd . package = "nixd" ;
65
+ } ;
12
66
in
13
67
{
14
68
options . lsp = {
25
79
} ;
26
80
27
81
servers = lib . mkOption {
28
- type = types . attrsOf ( types . submodule ./server.nix ) ;
82
+ type = types . submodule {
83
+ freeformType = types . attrsOf ( mkServerSubmodule { } ) ;
84
+ options = builtins . mapAttrs mkServerOption serverSpecs ;
85
+ } ;
86
+
29
87
description = ''
30
88
LSP servers to enable and/or configure.
31
89
Original file line number Diff line number Diff line change 24
24
example = false ;
25
25
} ;
26
26
27
- package = lib . mkOption {
28
- type = with types ; nullOr package ;
29
- default = null ;
30
- description = ''
31
- Package to use for this language server.
32
-
33
- Alternatively, the language server should be available on your `$PATH`.
34
- '' ;
35
- } ;
36
-
37
27
config = lib . mkOption {
38
28
type = with types ; attrsOf anything ;
39
29
description = ''
You can’t perform that action at this time.
0 commit comments