Skip to content

Commit 7dc5b79

Browse files
authored
cmake, arduino and glsl support (#1041)
* languages/cmake: init * languages/arduino: init * languages/glsl: init * ci: add `tese` to typos
2 parents 0c4fecd + 9724ddf commit 7dc5b79

File tree

7 files changed

+272
-1
lines changed

7 files changed

+272
-1
lines changed

.github/typos.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ default.extend-ignore-words-re = [
99
"edn",
1010
"esy",
1111
"BA", # somehow "BANanaD3V" is valid, but BA is not...
12-
"Emac"
12+
"Emac",
13+
"tese" # for glsl shaders
1314
]
1415

configuration.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ isMaximal: {
5555
# Languages that are enabled in the maximal configuration.
5656
bash.enable = isMaximal;
5757
clang.enable = isMaximal;
58+
cmake.enable = isMaximal;
5859
css.enable = isMaximal;
5960
html.enable = isMaximal;
6061
json.enable = isMaximal;
@@ -75,6 +76,7 @@ isMaximal: {
7576
xml.enable = isMaximal;
7677

7778
# Language modules that are not as common.
79+
arduino.enable = false;
7880
assembly.enable = false;
7981
astro.enable = false;
8082
nu.enable = false;
@@ -84,6 +86,7 @@ isMaximal: {
8486
scala.enable = false;
8587
r.enable = false;
8688
gleam.enable = false;
89+
glsl.enable = false;
8790
dart.enable = false;
8891
ocaml.enable = false;
8992
elixir.enable = false;

docs/manual/release-notes/rl-0.9.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,4 +241,14 @@ https://github.com/gorbit99/codewindow.nvim
241241
242242
- Ignore terminals by default in spell-checking
243243
244+
[poz](https://poz.pet):
245+
246+
[neocmakelsp]: https://github.com/neocmakelsp/neocmakelsp
247+
[arduino-language-server]: https://github.com/arduino/arduino-language-server
248+
[glsl_analyzer]: https://github.com/nolanderc/glsl_analyzer
249+
250+
- Add CMake support with [neocmakelsp].
251+
- Add Arduino support with [arduino-language-server].
252+
- Add GLSL support with [glsl_analyzer].
253+
244254
<!-- vim: set textwidth=80: -->
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}: let
7+
inherit (builtins) attrNames;
8+
inherit (lib.generators) mkLuaInline;
9+
inherit (lib.meta) getExe getExe';
10+
inherit (lib.modules) mkIf mkMerge;
11+
inherit (lib.options) mkEnableOption mkOption;
12+
inherit (lib.types) enum listOf str;
13+
inherit (lib.nvim.attrsets) mapListToAttrs;
14+
inherit (lib.nvim.types) mkGrammarOption;
15+
16+
cfg = config.vim.languages.arduino;
17+
18+
defaultServers = ["arduino-language-server"];
19+
servers = {
20+
arduino-language-server = {
21+
enable = true;
22+
cmd =
23+
[
24+
(getExe pkgs.arduino-language-server)
25+
"-clangd"
26+
(getExe' pkgs.clang-tools "clangd")
27+
"-cli"
28+
(getExe pkgs.arduino-cli)
29+
"-cli-config"
30+
"$HOME/.arduino15/arduino-cli.yaml"
31+
]
32+
++ cfg.lsp.extraArgs;
33+
filetypes = ["arduino"];
34+
root_dir =
35+
mkLuaInline
36+
/*
37+
lua
38+
*/
39+
''
40+
function(bufnr, on_dir)
41+
local fname = vim.api.nvim_buf_get_name(bufnr)
42+
on_dir(util.root_pattern("*.ino")(fname))
43+
end
44+
'';
45+
capabilities = {
46+
textDocument = {
47+
semanticTokens = mkLuaInline "vim.NIL";
48+
};
49+
workspace = {
50+
semanticTokens = mkLuaInline "vim.NIL";
51+
};
52+
};
53+
};
54+
};
55+
in {
56+
options.vim.languages.arduino = {
57+
enable = mkEnableOption "Arduino support";
58+
59+
treesitter = {
60+
enable = mkEnableOption "Arduino treesitter" // {default = config.vim.languages.enableTreesitter;};
61+
package = mkGrammarOption pkgs "arduino";
62+
};
63+
64+
lsp = {
65+
enable = mkEnableOption "Arduino LSP support" // {default = config.vim.lsp.enable;};
66+
servers = mkOption {
67+
type = listOf (enum (attrNames servers));
68+
default = defaultServers;
69+
description = "Arduino LSP servers to use";
70+
};
71+
72+
extraArgs = mkOption {
73+
type = listOf str;
74+
default = [];
75+
description = "Extra arguments passed to the Arduino LSP";
76+
};
77+
};
78+
};
79+
80+
config = mkIf cfg.enable (mkMerge [
81+
(mkIf cfg.treesitter.enable {
82+
vim.treesitter.enable = true;
83+
vim.treesitter.grammars = [cfg.treesitter.package];
84+
})
85+
86+
(mkIf cfg.lsp.enable {
87+
vim.lsp.servers =
88+
mapListToAttrs (n: {
89+
name = n;
90+
value = servers.${n};
91+
})
92+
cfg.lsp.servers;
93+
})
94+
]);
95+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}: let
7+
inherit (builtins) attrNames;
8+
inherit (lib.options) mkEnableOption mkOption;
9+
inherit (lib.modules) mkIf mkMerge;
10+
inherit (lib.meta) getExe;
11+
inherit (lib.types) enum listOf package;
12+
inherit (lib.nvim.attrsets) mapListToAttrs;
13+
inherit (lib.nvim.types) mkGrammarOption;
14+
15+
cfg = config.vim.languages.cmake;
16+
17+
defaultServers = ["neocmakelsp"];
18+
servers = {
19+
neocmakelsp = {
20+
enable = true;
21+
cmd = [(getExe pkgs.neocmakelsp) "--stdio"];
22+
filetypes = ["cmake"];
23+
root_markers = [".gersemirc" ".git" "build" "cmake"];
24+
capabilities = {
25+
textDocument.completion.completionItem.snippetSupport = true;
26+
};
27+
};
28+
};
29+
30+
defaultFormat = "gersemi";
31+
formats = {
32+
gersemi = {
33+
package = pkgs.gersemi;
34+
};
35+
};
36+
in {
37+
options.vim.languages.cmake = {
38+
enable = mkEnableOption "CMake language support";
39+
40+
treesitter = {
41+
enable = mkEnableOption "CMake treesitter" // {default = config.vim.languages.enableTreesitter;};
42+
package = mkGrammarOption pkgs "cmake";
43+
};
44+
45+
lsp = {
46+
enable = mkEnableOption "CMake LSP support" // {default = config.vim.lsp.enable;};
47+
servers = mkOption {
48+
type = listOf (enum (attrNames servers));
49+
default = defaultServers;
50+
description = "CMake LSP servers to use";
51+
};
52+
};
53+
54+
format = {
55+
enable = mkEnableOption "CMake formatting" // {default = config.vim.languages.enableFormat;};
56+
57+
type = mkOption {
58+
description = "CMake formatter to use";
59+
type = enum (attrNames formats);
60+
default = defaultFormat;
61+
};
62+
63+
package = mkOption {
64+
description = "CMake formatter package";
65+
type = package;
66+
default = formats.${cfg.format.type}.package;
67+
};
68+
};
69+
};
70+
71+
config = mkIf cfg.enable (mkMerge [
72+
(mkIf cfg.treesitter.enable {
73+
vim.treesitter.enable = true;
74+
vim.treesitter.grammars = [cfg.treesitter.package];
75+
})
76+
77+
(mkIf cfg.lsp.enable {
78+
vim.lsp.servers =
79+
mapListToAttrs (n: {
80+
name = n;
81+
value = servers.${n};
82+
})
83+
cfg.lsp.servers;
84+
})
85+
86+
(mkIf cfg.format.enable {
87+
vim.formatter.conform-nvim = {
88+
enable = true;
89+
setupOpts.formatters_by_ft.cmake = [cfg.format.type];
90+
setupOpts.formatters.${cfg.format.type} = {
91+
command = getExe cfg.format.package;
92+
};
93+
};
94+
})
95+
]);
96+
}

modules/plugins/languages/default.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,20 @@
33
inherit (lib.nvim.languages) mkEnable;
44
in {
55
imports = [
6+
./arduino.nix
67
./asm.nix
78
./astro.nix
89
./bash.nix
910
./cue.nix
1011
./dart.nix
1112
./clang.nix
1213
./clojure.nix
14+
./cmake.nix
1315
./css.nix
1416
./elixir.nix
1517
./fsharp.nix
1618
./gleam.nix
19+
./glsl.nix
1720
./go.nix
1821
./hcl.nix
1922
./helm.nix

modules/plugins/languages/glsl.nix

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{
2+
config,
3+
lib,
4+
pkgs,
5+
...
6+
}: let
7+
inherit (builtins) attrNames;
8+
inherit (lib.modules) mkIf mkMerge;
9+
inherit (lib.nvim.types) mkGrammarOption;
10+
inherit (lib.options) mkEnableOption mkOption;
11+
inherit (lib.types) enum listOf;
12+
inherit (lib.meta) getExe;
13+
inherit (lib.nvim.attrsets) mapListToAttrs;
14+
15+
cfg = config.vim.languages.glsl;
16+
17+
defaultServers = ["glsl_analyzer"];
18+
servers = {
19+
glsl_analyzer = {
20+
enable = true;
21+
cmd = [(getExe pkgs.glsl_analyzer)];
22+
filetypes = ["glsl" "vert" "tesc" "tese" "frag" "geom" "comp"];
23+
root_markers = [".git"];
24+
};
25+
};
26+
in {
27+
options.vim.languages.glsl = {
28+
enable = mkEnableOption "GLSL language support";
29+
30+
treesitter = {
31+
enable = mkEnableOption "GLSL treesitter" // {default = config.vim.languages.enableTreesitter;};
32+
package = mkGrammarOption pkgs "glsl";
33+
};
34+
35+
lsp = {
36+
enable = mkEnableOption "GLSL LSP support" // {default = config.vim.lsp.enable;};
37+
38+
servers = mkOption {
39+
type = listOf (enum (attrNames servers));
40+
default = defaultServers;
41+
description = "GLSL LSP server to use";
42+
};
43+
};
44+
};
45+
46+
config = mkIf cfg.enable (mkMerge [
47+
(mkIf cfg.treesitter.enable {
48+
vim.treesitter = {
49+
enable = true;
50+
grammars = [cfg.treesitter.package];
51+
};
52+
})
53+
54+
(mkIf cfg.lsp.enable {
55+
vim.lsp.servers =
56+
mapListToAttrs (n: {
57+
name = n;
58+
value = servers.${n};
59+
})
60+
cfg.lsp.servers;
61+
})
62+
]);
63+
}

0 commit comments

Comments
 (0)