How many times have you seen an instruction in a setup script which says “Now add source <(somescript completion bash)
to your ~/.bashrc
file” or “Add export SOMEVAR=abc123
to your .bashrc
file”?
This is great when it’s one or two lines, but for a big chunk of them? Whew!
Instead, I created this block in mine:
if [ -d ~/.bash_extensions.d ]; then
for extension in ~/.bash_extensions.d/[a-zA-Z0-9]*
do
. "$extension"
done
fi
This dynamically loads all the files in ~/.bash_extensions.d/
which start with a letter or a digit, so it means I can manage when things get loaded in, or removed from my bash shell.
For example, I recently installed the pre-release of Atuin, so my ~/.bash_extensions.d/atuin
file looks like this:
source $HOME/.atuin/bin/env
eval "$(atuin init bash --disable-up-arrow)"
And when I installed direnv, I created ~/.bash_extensions.d/direnv
which has this in it:
eval "$(direnv hook bash)"
This is dead simple, and now I know that if I stop using direnv, I just need to remove that file, rather than hunting for a line in .bashrc
.
Featured image is “Gears gears cogs bits n pieces” by “Les Chatfield” on Flickr and is released under a CC-BY license.