aliquote.org

April 7, 2026

Adding guards to all the executables I use as makeprg, compiler, formatprg, etc. in my Neovim config files (mostly in after/ftplugin) to ensure portability across machines. While it is easy to detect language servers when they come as static binaries, some LSPs come as packages, e.g., R or Racket language servers. Here’s what I came with:

" after/ftplugin/r.vim
let output = system("Rscript -e '\"languageserver\" %in% installed.packages()'")
if v:shell_error == 0
lua <<EOF
vim.lsp.enable("r_language_server")
EOF
endif

" after/ftplugin/racket.vim
let output = system("raco pkg show racket-langserver | grep Checksum")
if v:shell_error == 0
lua <<EOF
vim.lsp.enable("racket-langserver")
EOF
endif

For other languages, I just use an if executable("<whatever>") test.

img