This wrapper derivation (which assumes that the depot is available at
~/depot) can be used to actually get clangd working with
//third_party/nix.
In my setup I can launch this with M-x eglot, followed by
  env
    CLANGD_FLAGS='--compile-commands-dir=/home/tazjin/projects/nix-build'
    nix-shell -A third_party.nix --run 'nix-clangd' /home/tazjin/depot
		
	
			
		
			
				
	
	
		
			30 lines
		
	
	
	
		
			826 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			826 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
# Create a clangd wrapper script that can be used with this project.
 | 
						|
# The default Nix wrapper only works with C projects, not C++
 | 
						|
# projects.
 | 
						|
#
 | 
						|
# The CPATH construction logic is lifted from the original wrapper
 | 
						|
# script.
 | 
						|
 | 
						|
pkgs:
 | 
						|
 | 
						|
pkgs.writeShellScriptBin "nix-clangd" ''
 | 
						|
  buildcpath() {
 | 
						|
    local path
 | 
						|
    while (( $# )); do
 | 
						|
      case $1 in
 | 
						|
          -isystem)
 | 
						|
              shift
 | 
						|
              path=$path''${path:+':'}$1
 | 
						|
      esac
 | 
						|
      shift
 | 
						|
    done
 | 
						|
    echo $path
 | 
						|
  }
 | 
						|
 | 
						|
  export CPATH=''${CPATH}''${CPATH:+':'}:$(buildcpath ''${NIX_CFLAGS_COMPILE})
 | 
						|
  export CPATH=${pkgs.glibc.dev}/include''${CPATH:+':'}''${CPATH}
 | 
						|
  export CPLUS_INCLUDE_PATH=${pkgs.llvmPackages.libcxx}/include/c++/v1:''${CPATH}
 | 
						|
 | 
						|
  # TODO(tazjin): Configurable commands directory?
 | 
						|
  exec -a clangd ${pkgs.llvmPackages.clang-unwrapped}/bin/clangd $@
 | 
						|
''
 |