.                       oooo   .o8
            .o8                       `888  "888
          .o888oo  .ooooo.   .ooooo.   888   888oooo.   .ooooo.  oooo    ooo
            888   d88' `88b d88' `88b  888   d88' `88b d88' `88b  `88b..8P'
            888   888   888 888   888  888   888   888 888   888    Y888'
            888 . 888   888 888   888  888   888   888 888   888  .o8"'88b
            "888" `Y8bod8P' `Y8bod8P' o888o  `Y8bod8P' `Y8bod8P' o88'   888o
test hits of code release license

About

toolbox is a collection of Unix shell utilities for everyday use. Each utility is a portable POSIX script built on the Unix shell framework shellbase:

  • bak wraps rdiff-backup to create incremental backups.

  • chowner changes the owner and permissions on a directory.

  • copyright updates years in copyright notices.

  • essid watches for Wi-Fi ESSID changes and reports them.

  • flactomp3 converts audio files to mp3 with tags.

  • ival validates image files. The name stands for Image Validation.

  • myip continuously displays the external IP address using dig.

  • pingo adds timestamps to the ping command output.

  • reel converts a video clip to a vertical (1080×1920) social media reel using ffmpeg, padding it with a blurred copy of itself. Accepts -c to center-crop and fill the frame instead of padding, -f for input file, -o for output file, -s for start time, -u for duration, and -g for a top and bottom gap in crop mode.

  • remount remounts filesystems using a temporary fstab configuration, then restores the permanent one.

  • rsyncx wraps rsync and picks a safe option set for the installed rsync version.

  • scanner detects whether a device with a given MAC address is present on the local network using arp-scan.

  • sift copies a random subset of files from a source directory into a destination directory until a byte budget is reached. Accepts -s for the byte budget (a number with an optional K, M, or G suffix, default 8G) and -o for the destination directory (default the current directory). Takes the source directory as the mandatory positional argument.

  • speed continuously displays download and upload internet speeds using speedtest.

  • tex compiles a TeX source file to PDF and opens the result.

  • tru removes a torrent and its content, then adds it again to increase the share ratio. The name stands for Transmission Remote Updater. It can run under cron.

  • ydata wraps yt-dlp: it downloads, converts, renames, and stores media safely. It can run under cron.

Install

Ensure /usr/local/bin is in your PATH.

git clone https://github.com/rdavid/toolbox.git &&
  ./toolbox/app/install

Test

The project uses Daniel J. Bernstein’s build system redo. You can install Sergey Matveev’s goredo implementation. redo lint runs whichever of the following linters are installed: actionlint, reuse, shellcheck, shfmt, typos, vale, yamllint, zizmor. It also parses every script with dash -n and mksh -n to catch syntax errors and Bash-only constructs.

lint.do — redo lint
1 $ redo lint
2 20260803-14:02:01 » dash -n ./lint.do
20260803-14:02:01 » mksh -n ./lint.do
20260803-14:02:02 » shellcheck ./*.do ./app/*
3 actionlint, reuse — not installed, nothing logged
4 20260803-14:02:04 shfmt failed, err=1.
20260803-14:02:05 » yamllint ./.github/*.yml ./.github/workflows/*.yml
5 OK

What the numbers point at

  1. 1

    No custom CLI to learn — redo lint is a plain redo target running a POSIX lint.do script.

  2. 2

    cmd_run echoes the exact command it's about to run, in the same green as every other info-level log line, before any output appears.

  3. 3

    cmd_runif skips missing tools without a warning. Silence is the signal that a linter isn't installed, not a yellow line asking you to fix it.

  4. 4

    A genuine failure, printed in red by loge. One bad linter doesn't stop the rest — lint.do keeps going.

  5. 5

    The only line on stdout. redo reads it as the target's content. Every line above it went to stderr.

License

David Rabkin holds the copyright to toolbox and distributes it under the Zero-Clause BSD license.