.                       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 release hits of code license

About

toolbox is a collection of Unix shell utilities for backups, media, networking, and everyday tasks. Each utility is a portable POSIX script built on the shellbase shell framework:

  • bak wraps rdiff-backup to create incremental backups.

  • chowner changes the owner and permissions of a directory.

  • copyright updates years in copyright notices.

  • cuex splits a CD image (flac, ape, wav, or wv) into tagged flac tracks using its cue sheet. The name stands for Cue Extract. Options: -e sets the cue sheet encoding (for example cp1251), -o the output directory, and -p keeps the silent gap before track one. It then offers to remove the cue sheet and the image.

  • essid watches the ESSID of the connected Wi-Fi network and reports changes.

  • flactomp3 converts audio files to mp3 and keeps their tags.

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

  • myip continuously displays your external IP address using dig.

  • pingo adds timestamps to ping output.

  • reel converts a video clip to a vertical 1080×1920 social media reel using ffmpeg and pads it with a blurred copy of itself. Options: -c center-crops to fill the frame instead of padding, -f sets the input file, -o the output file, -r burns in subtitles transcribed by whisper-cli, -s the start time, -u the duration, and -z the horizontal crop shift in pixels (negative values allowed).

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

  • rsynx wraps rsync and picks safe options for the installed rsync version.

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

  • sift copies random files from a source directory to a destination directory until their total size reaches a byte budget. Options: -s sets the byte budget (a number with an optional K, M, or G suffix, default 8G) and -o the destination directory (default the current directory). The source directory is a required positional argument.

  • speed continuously displays internet download and upload 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 raise 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, and skips videos it already downloaded. It can run under cron.

Install

Make sure /usr/local/bin is in your PATH.

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

To install a subset of the utilities instead, use Homebrew and the tap:

brew install rdavid/tap/toolbox

Test

The project builds with Daniel J. Bernstein’s redo. You can use Sergey Matveev’s goredo implementation. redo lint runs whichever of the following linters you have installed: actionlint, agent-rules-lint, checkbashisms, conform, gitleaks, 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, checkbashisms, conform, gitleaks, 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 prints each command before it runs, in the same green as every other info-level log line.

  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 single 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.