Skip to content

Commit 5e31e57

Browse files
committed
wip: Bruh emoji
1 parent d98e672 commit 5e31e57

1 file changed

Lines changed: 67 additions & 8 deletions

File tree

config/langs/arduino.nix

Lines changed: 67 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,73 @@
1-
{ pkgs, ... }:
1+
{ lib, pkgs, ... }:
2+
let
3+
arduino-ls-wrapper = pkgs.writeShellScriptBin "arduino-ls-wrapper" ''
4+
# Find the project root by looking for arduino-cli.yaml
5+
find_config() {
6+
local dir="$PWD"
7+
while [ "$dir" != "/" ]; do
8+
if [ -f "$dir/arduino-cli.yaml" ]; then
9+
echo "$dir/arduino-cli.yaml"
10+
return 0
11+
fi
12+
dir="$(dirname "$dir")"
13+
done
14+
# If no config found, don't pass -cli-config flag
15+
return 1
16+
}
17+
18+
# Extract FQBN from arduino-cli.yaml using yq or fallback to grep/awk
19+
extract_fqbn() {
20+
local config="$1"
21+
# Try to extract from sketch.default_fqbn or fqbn field
22+
if command -v ${lib.getExe pkgs.yq-go} &> /dev/null; then
23+
${lib.getExe pkgs.yq-go} eval '.sketch.default_fqbn // .fqbn' "$config" 2>/dev/null | grep -v '^null$' || true
24+
else
25+
# Fallback to grep if yq is not available
26+
grep -E '^\s*(default_fqbn|fqbn):' "$config" | head -1 | sed 's/.*: *//' || true
27+
fi
28+
}
29+
30+
CONFIG_PATH=$(find_config)
31+
32+
if [ -n "$CONFIG_PATH" ]; then
33+
FQBN=$(extract_fqbn "$CONFIG_PATH")
34+
if [ -n "$FQBN" ]; then
35+
exec ${lib.getExe pkgs.arduino-language-server} \
36+
-cli ${lib.getExe pkgs.arduino-cli} \
37+
-clangd ${lib.getExe' pkgs.clang-tools "clangd"} \
38+
-cli-config "$CONFIG_PATH" \
39+
-fqbn "$FQBN" \
40+
"$@"
41+
else
42+
exec ${lib.getExe pkgs.arduino-language-server} \
43+
-cli ${lib.getExe pkgs.arduino-cli} \
44+
-clangd ${lib.getExe' pkgs.clang-tools "clangd"} \
45+
-cli-config "$CONFIG_PATH" \
46+
"$@"
47+
fi
48+
else
49+
exec ${lib.getExe pkgs.arduino-language-server} \
50+
-cli ${lib.getExe pkgs.arduino-cli} \
51+
-clangd ${lib.getExe' pkgs.clang-tools "clangd"} \
52+
"$@"
53+
fi
54+
'';
55+
in
256
{
3-
plugins = {
4-
lsp.servers.arduino_language_server = {
5-
enable = true;
6-
cmd = [
7-
"arduino-language-server"
8-
"-cli" "${pkgs.arduino-cli}/bin/arduino-cli"
9-
"-clangd" "${pkgs.clang-tools}/bin/clangd"
57+
lsp.servers.arduino_language_server = {
58+
enable = true;
59+
config = {
60+
cmd = [ (lib.getExe arduino-ls-wrapper) ];
61+
filetypes = [
62+
"cpp"
63+
"c"
64+
"ino"
1065
];
66+
root_markers = [ "arduino-cli.yaml" ];
1167
};
68+
};
69+
plugins = {
1270
treesitter.settings.ensure_installed = [ "arduino" ];
71+
conform-nvim.settings.formatters_by_ft.cpp = [ "clang_format" ];
1372
};
1473
}

0 commit comments

Comments
 (0)