This is currently copied from my dotfiles. Should probably consider using flake-parts to DRY this out.