You can also also view the full archives of micro-posts. Longer blog posts are available in the Articles section.
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.

TIL about Git maintenance (via Git Tips 2: New Stuff in Git).
Trying out Helix today. It lasted a few hours until I got back to Neovim. Too much muscle memory, I guess, and I’m happy with my current hand-crafted config.
What I’m working toward is a canonical definition of the dataframe. Petersohn et al. made the best attempt I’ve seen with their data model and algebra. Category theory adds structure on top: three migration functors for schema-changing operations, and topos structure for set-theoretic reasoning within a schema. Together, these cover the relational core. — What Category Theory Teaches Us About DataFrames
Haskell for Data Science. #haskell
Handy replacement for vaf from
treesitter-textobjects:
To select a whole Python function, including one or more blank line, you can use
a combination of builtin ]M (Jump forward to end of current scope) and [m
(Jump backward to begin of previous scope). #vim
git bayesect is a generalisation of git bisect that uses Bayesian inference to solve this problem.