this post was submitted on 18 Aug 2025
14 points (100.0% liked)

Nix / NixOS

2461 readers
1 users here now

Main links

Videos

founded 2 years ago
MODERATORS
 

I'm working on switching over to NixOS on my desktop and one of the last things I haven't got fully working is my neovim config. My LSP's are able to start, and all of them work fine except for clangd. For some reason, it can't find C/C++ header files for any installed libraries. I have all of the LSPs themselves installed through Mason in Neovim, and I have programs.nix-ld.enable = true enabled so they can be run correctly.

screenshot showing 'file not found' error on '#include <fcntl.h>'

screenshot showing 'file not found' error on '#include <SDL2/SDL2.h>'

Here is the shell.nix file I'm using for this project:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell.override { stdenv = pkgs.gccStdenv; } {
  nativeBuildInputs = with pkgs.buildPackages; [
    glibc libgcc
    clang-tools libclang
    SDL2 SDL2_image SDL2_sound
  ]; 
  CPATH = pkgs.lib.makeSearchPathOutput "dev" "include" pkgs.glibc pkgs.SDL2 pkgs.SDL2_Image pkgs.SDL2_sound;
}

Is there something extra I need to do to get clangd to find the C headers being used by the project? when I actually run gcc it compiles fine, it just can't seem to find them correctly in Neovim

Edit: Forgot to mention that I'm using this shell with direnv and launching nvim directly from the same shell that I'm compiling from

you are viewing a single comment's thread
view the rest of the comments
[–] Euphoma@lemmy.ml 3 points 1 month ago (1 children)

i have a .clangd file with

CompileFlags:
    Add: [
    CompilationDatabase: /src/
-Wall,
-I/nix/store/vm10zh43xgfxvgrqs8brz6v6xyrq9qin-glibc-2.40-66-dev/include,
-I/nix/store/64819v2lcdbdqqb52gyqpic3khn4hvyf-libcxx-19.1.7-dev/include,
-I/nix/store/f4x7z33ymmqn0m0pvi5ydxifsfmic1jw-raylib-5.5/include,
-I/nix/store/wakcjb523m43qbm4xblyqm7rgg9l9s32-glu-9.0.3-dev/include,
-I/nix/store/8xbbdx4ckcdj76ldb0cbym965whipq72-libglvnd-1.7.0-dev/include,
-I/nix/store/b5i8r0l5bnaj8khjz4lsmsdph8dkha3s-libX11-1.8.12-dev/include,
-I/nix/store/l1qkka1svxk8s0myynmb6kgl0ni19mjk-xorgproto-2024.1/include,
-I/nix/store/y91x77rjip3i5zdza2ikf2lj80qc0286-libxcb-1.17.0-dev/include,
-I/nix/store/95hqc5scvz3vxhs0p1crx9rr5r1sfs1i-compiler-rt-libc-19.1.7-dev/include,
-I/nix/store/64819v2lcdbdqqb52gyqpic3khn4hvyf-libcxx-19.1.7-dev/include,
-I/nix/store/f4x7z33ymmqn0m0pvi5ydxifsfmic1jw-raylib-5.5/include,
-I/nix/store/wakcjb523m43qbm4xblyqm7rgg9l9s32-glu-9.0.3-dev/include,
-I/nix/store/8xbbdx4ckcdj76ldb0cbym965whipq72-libglvnd-1.7.0-dev/include,
-I/nix/store/b5i8r0l5bnaj8khjz4lsmsdph8dkha3s-libX11-1.8.12-dev/include,
]

and a create-clangd.py

   3 includes = []
   4 with open("./src/compile_commands.json", 'r') as f:
   5     lines = f.readlines()
   6     for line in lines:
   7         if "include" in line:
   8             includes += [line[1:-2].strip()]
   9
  10 s = """
  11 CompileFlags:
  12     Add: [
  13     CompilationDatabase: /src/
  14 -Wall,
  15 """
  16
  17 for include in includes:
  18     s += "-I" + include[1:-1] + ",\n"
  19
  20 s += "]"
  21 print(s)
  22
  23 with open(".clangd", 'w') as file:
  24     file.write(s)

I forgot how I made the compile-commands.json file. I think I used a program called bear.

I also don't code cpp normally, I just did this for one small project, so it might be a bad solution

[–] balsoft@lemmy.ml 2 points 1 month ago (1 children)

Hmm, clangd should support compile_commands.json directly. Not sure why your script is needed.

[–] Euphoma@lemmy.ml 1 points 1 month ago

Yeah idk, maybe my setup is bad