While reading links from an article on dotfiles in the first issue of
I came across a tool I hadn't seen. I like reading about other people's tools and their dotfiles, so here are some tools and bash snippets I think are useful. I run a bash shell, with tmux and vim.
Tool recommendations
No particular order, and just a random sampling of the first few things filtered by how recently I used them.
Facebook Path Picker
github.com/facebook/pathpicker/
Can take the output of git status or something, and let you pick some of the files, and then open it in an editor.![]()
Diff So Fancy
github.com/so-fancy/diff-so-fancy
Better git diffs. Shows what in a line changed, and clear file headers.![]()
up
"the ultimate pipe plumber", you pipe some data in and it interactively write stuff to pipe it to.![]()
jq (and xq/yq)
jq is a command line json parser. xq/yq are just xml->json or yaml->json parsers that automatically call jq.
Example:
We want to get the latest rasbian image.
The [raspberry pi download RSS](http://downloads.raspberrypi.org/rss.xml) feed looks like this:
<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Raspberry Pi Root Filesystem Downloads</title>
<link>http://www.raspberrypi.org/downloads</link>
<description>The latest root filesystems for the Raspberry Pi computer!</description>
<item>
<title><![CDATA[archlinux-hf-2013-06-15]]></title>
<link>http://downloads.raspberrypi.org/arch/images/archlinux-hf-2013-06-15/archlinux-hf-2013-06-15.img.zip.torrent</link>
</item>
...
<item>
<title><![CDATA[raspbian_lite-2019-07-12]]></title>
<link>http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-07-12/2019-07-10-raspbian-buster-lite.zip.torrent</link>
</item>
...
<item>
<title><![CDATA[raspbian_lite-2019-06-24]]></title>
<link>http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-06-24/2019-06-20-raspbian-buster-lite.zip.torrent</link>
</item>
</channel>
</rss>> curl http://downloads.raspberrypi.org/rss.xml | xq '[.rss.channel.item[] | select(.title | contains("raspbian_lite"))] | .[-1]'
{
"title": "raspbian_lite-2019-07-12",
"link": "http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-07-12/2019-07-10-raspbian-buster-lite.zip.torrent"
}
rename
Run regex on filenames. Example: rename all .txt files to .md
rename ‘s/txt/md/’ *.txt
ncdu
dev.yorhel.nl/ncdu
NCurses Disk Usage shows disk usage.

Bash snippets
- [Shebang line](https://en.wikipedia.org/wiki/Shebang_(Unix)) says how to execute this file, it’s for more than just bash. Please use one.
- Second line makes sure that the script executes from the directory it is stored in.
- set -e causes bash to exit on any non-zero status.
- set -u causes bash to exit on undefined variables.
- For more on those, see http://redsymbol.net/articles/unofficial-bash-strict-mode/
#!/bin/bash cd $(dirname "$0") set -eu
- Take command line flags and parse them, have a help function.
- Also how to use true/false, as they don’t exist in bash but if you use them like this it will work.
- getopt can do some fancier things, see `man getopt`
help () {
echo "Usage: gsource FILE [LINE NUMBER]"
echo "Link to the online git file, with optional line number"
echo " -h, --help display this help and exit"
}
# getopt short options go together, long options have commas
TEMP=`getopt -o hd:f --long help,dir,force -n 'test.sh' -- "$@"`
if [ $? != 0 ] ; then
echo "Something wrong with getopt" >&2
exit 1
fi
eval set -- "$TEMP"
dir=""
while true ; do
case "$1" in
-h|--help) help; exit 0; shift ;;
-d|--dir) dir=$2 ; shift 2 ;;
-f|--force) force=true ; shift ;;
--) shift ; break ;;
*) echo "Internal error, unexpected argument '$0'!" ; exit 1 ;;
esac
done
if [ "$force" = true ]; then
echo "force was true or whatever"
fi
- y/n prompt
- press any key to continue prompt
read -r -p "some yes/no question [Y/n] " response
case "$response" in
[nN][oO]|[nN])
echo "Alright setup your own key"
;;
[yY][eE][sS]|[yY])
echo "Alright good luck"
;;
esac
read -n 1 -s -r -p "Press any key to continue"
Lastly
Just run it:
curl wttr.in/?m
Hope you learned something, and I hope you share other things with me. Feel free to look at

