Dotfiles, sharing your Unix environment preferences since the dawn of personal computing. This week I was going through my dotfiles repo and cleaning up when I learned a few things. Ended up completely restructuring my repo and rewriting my sync script.
One of the problems I faced how to split between mac and linux. I started with a separate branch for mac but after a while that became a complete mess as the sync script diverged. This time I was feeling more confident in my bash scripting so let the sync script handle it. I just restructured the repo with a /mac and /linux folders and then just detected operating system in when syncing. Also keeping duplicate files is not such a problem for me since I can vimdiff quite easily for changes.
Extending the sync script to handle these cases provided some good bash learning.
case statements: – Woh I didn’t know bash had pattern matching. Coming off elixir and elm projects its nice to see.
file based conditionals – If your in bash probably your doing so because you want to be close to the file system. Turns out it has super powered file based conditionals
\# check if file exists and is a file if [ -f "$REMOTE_FILE" ]; then ... fi \# check if file is a symlink if [ -L "$REMOTE_FILE" ]; then ... fi
full list of “File test operators” in the docs
quote variable usages – after a lot of WTF debugging it was all solved by quoting a variable, docs
stay away from ~/ – save the
$ cd ~/ for the shell and use
"$HOME"/ while bash scripting
drop the leading dash in tar arguments – tar argument for me at least have been a notorious
pain in the ass. I often get the arguments switched around causing “file not found” errors. Turns
out tar does not follow all the Unix argument conventions and its best to drop the leading dash
tar -cvf ./hello_world.tar ./files
tar cvf ./hello_world.tar ./files
Now that my dotfiles are in order, I’m hoping to publish more content on the various projects I currently have in the works.