various tools I have been using throughout the years
README.md

tools #

Various tools I have been using throughout the years.

tool description
bandano Bandcamp RSS feed proxy
diggah find files modified within a time range, locally or over SSH
dam line-file syncer with rsync and coloured diff
hue Ruby library and CLI for Philips Hue
lastfm_rs Last.fm scrobble exporter to CSV
lazymaster 2-pass audio loudness normalization via ffmpeg
mpd MPD utility tools
nts NTS show tracklist fetcher
pmn password selection utility for pass (Wayland, X11, macOS)
pracomer Pomodoro timer
shuffle random album picker for MPD
speediness network speed test
tempfox Firefox user.js preference overrides
wrd full-text search and reader for an offline web archive
plants bluetooth battery monitoring for linux
reflink-snap reflink (copy-on-write) snapshot manager for XFS
rem2org Remind to org-agenda exporter
kundali scans track metadata and builds a sequence around an anchor track
backup backup helper for git, tarsnap, plakar and rclone
tpswitch toggle the touchpad by holding an evdev grab

Toolchains #

language version pinned by
Rust nightly rust-toolchain.toml (rustup)
Zig 0.17.0 build.zig.zon (minimum_zig_version)
Python 3.14 system
Go 1.26 go.mod
Ruby >= 3.0 hue.gemspec (required_ruby_version). reflink-snap uses stdlib only
Janet 1.41.2 system

Building #

Install knit and the native toolchains. Knit orchestrates cargo, zig build, go build, cc, and a shared Python virtualenv. All common tasks are available via just:

just all             # build every tool into bin/
just build <target>  # build a specific tool, e.g. just build lazymaster
just run <target>    # build and run a tool

Deploying #

Knit builds and copies binaries to $HOME/.local/bin:

knit deploy/<target>
knit deploy/all      # build and install every tool

The equivalent convenience wrapper is just deploy <target>.

knit deploy/mpd (or just deploy mpd) installs the configured mpd_* binaries. Deployed Python tools (diggah, lazymaster, nts, shuffle) are thin shims that run out of this repository's .venv, and deployed Ruby tools (hue, reflink-snap) run straight from the checkout. Both need the checkout to stay in place.

Development #

just test                    # run the Rust, Zig, Go, and MPD test suites
just clippy                  # run Clippy over the Cargo workspace
just rustfmt                 # format the Cargo workspace with rustfmt
just clang-tidy              # run clang-tidy over the C sources
just lint                    # run Clippy and clang-tidy

rust-analyzer works out of the box against the Cargo workspace.

Other #

just cargo-lockfile          # update Cargo.lock
just pip-update              # update requirements.txt (Python lockfile)
just clean                   # remove build artifacts and caches